184 похожих чатов

Всем привет. Скажите, возможно ли выполнить такую задачу в mat

view.
Есть две таблицы (table_a и table_b).
Мне надо выполнить их слияние (JOIN) и результат сохранить в промежуточную таблицу, в которой будут только "свежие" данные в рамках суток (TTL по времени вставки данных).
Я предполагаю что можно над этими двумя таблицами накрутить две mat view с TTL по времени вставки данных,
в каждой из которых мы берем измененные данные,
делаем left JOIN другой таблицы
и грузим в AggregatingMergeTree движок,
где делаем слияние изменяющихся полей. Вроде бы тема такая работает, но я получаю не ожидаемый результат (часть данных отсутствует)
Вот вопрос, такой подход полная шляпа и я что-то концептуально не так делаю или просто у меня косяк в бизнес логике имеется, что данные не все долетают до целевой таблицы?

15 ответов

23 просмотра

не совсем понял, у вас на каждой из таблиц по триггеру, каждый из которых сливает в одну и ту же третью таблицу? а где именно тогда указан "TTL по времени вставки данных"

вообще для движка с отсутствием очередей транзакций и уровнем изоляции чтений а-ля "read uncommitted" такие взаимные джойны видятся рискованной затеей по описанию задачи больше на что-то типа live view похоже

Alexandr-Vladimirovich Автор вопроса
ivan
не совсем понял, у вас на каждой из таблиц по триг...

да, сливает в одну таблицу с аггрегационным движком , на которой висит TTL на время вставки данных (Default now)

Alexandr-Vladimirovich Автор вопроса
ivan
вообще для движка с отсутствием очередей транзакци...

похоже на то, что фича экспериментальная ведь)

Если вы уже дошли до AggregatingMT, то зачем вам джойны? Делайте Nullable поля и грузите из каждой таблицы независимо. Для более сложных вариантов можно поиграться с SimpleAggregatingFunction - max, argMax, any и проч.

Alexandr-Vladimirovich Автор вопроса
Boris
Если вы уже дошли до AggregatingMT, то зачем вам д...

ну это справедливо, но даже при left JOIN у меня не должны данные попадать, которые с правой таблицей объединиться не смогли и все поля, кроме участвующих в order by, я указал как AggregatingFunction

Alexandr-Vladimirovich Автор вопроса
Boris
Если вы уже дошли до AggregatingMT, то зачем вам д...

у меня есть гипотеза, что в AggregatingMergeTree движке при указании TTL поля с дефолтным значением NOW подчищаются данные, которые не должны удаляться и из-за этого результат аггрегации выходит неожидаемым

Alexandr Vladimirovich
ну это справедливо, но даже при left JOIN у меня н...

не должны, но ошибиться можно много где. Я хотел сказать что без join тут скорее всего можно обойтись и это будет явно правильнее. И по мере возможности надо заменить AggregatingFunction на SimpleAggregatingFunction

Alexandr-Vladimirovich Автор вопроса
Boris
не должны, но ошибиться можно много где. Я хотел ...

ну да, согласен с вами, попробую действительно JOIN убрать, так как в данном движке данные все равно схлопнутся

Alexandr Vladimirovich
у меня есть гипотеза, что в AggregatingMergeTree ...

Откуда у вас дефолты вообще? У вас в мат вью все поля заполняются наверное

Alexandr-Vladimirovich Автор вопроса
Denny [Altinity]
Откуда у вас дефолты вообще? У вас в мат вью все п...

нет, у меня в аггрерационной таблице указано так create table if not exists schema.agg_table on cluster test ( ... processed_dttm DateTime DEFAULT NOW() ) ENGINE = ReplicatedAggregatingMergeTree() а в мат вью я это поле не заполняю прост

Alexandr Vladimirovich
нет, у меня в аггрерационной таблице указано так ...

не заполняю или не заполняю в секции полей в мат вью это поле определено?

Alexandr Vladimirovich
нет, в мат вью не указано

значит оно заполняется now вы можете отключить TTL мержи временно (system stop ttl merges) и выключить optimize_on_insert и посмотреть будут исчезать или нет

Alexandr-Vladimirovich Автор вопроса
Denny [Altinity]
значит оно заполняется now вы можете отключить TT...

ну вот про now я знаю, как раз пробую убрать ttl вообще и понаблюдать за рассчетом

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта