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

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

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

15 ответов

16 просмотров

не совсем понял, у вас на каждой из таблиц по триггеру, каждый из которых сливает в одну и ту же третью таблицу? а где именно тогда указан "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 вообще и понаблюдать за рассчетом

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

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

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Привет, запускаю werf в dind в k8s, получаю ошибку на этапе build/beforeSetup: /.werf/stapel/embedded/bin/bash: /.werf/scripts/5898bdfe5214357d3706b879cc8d3d78460fb379607cbd...
florius0
7
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Добрый день, чат. Мне в очередь из других RabbitMQ по shovel валятся метрики в формате текста для Prometheus. Помогите пожалуйста подружить RabbitMQ и Prometheus, чтобы он (...
Aleksey
4
Карта сайта