придумал внятного
Как на момент выборки получать дедуплицированные данные?
ReplacingMergeTree не дает гарантий, что данные будут дедуплицированы в селекте, тк только во время мержа схлопывает их, а OPTIMIZE дергать каждый раз не комильфо и долго
MatView делает агрегацию только для инсертируемого батча данных, но, как я понял из доки, две одинаковых строки в разных батчах не будут дедуплицироваться друг относительно друга и рядышком в матвью лягут, одна за другой.
Задача дедупликации вообще звучит как супер базовая вещь и для нее должно быть какое-то хрестоматийное решение
https://kb.altinity.com/engines/mergetree-table-engine-family/replacingmergetree/
Я обычно добавляю hash от всех строк при вставке, индексирую по этому полю, и потом при след вставке проверяю есть ли такой hash, но это если batch. В остальном проблему дублей каждый решает своими костылями...
а вариант с FINAL не подходит ?
говорят, перформанс страдает)
>Задача дедупликации вообще звучит как супер базовая вещь да, и она конечно решается до заливки в DWH, причем безотносительно какая база используется, это одинаковая проблема и решение для КХ, вертики, redshift , ...
пипец, и сколько строк в секунду удается вставить?, вы душите вставки раз в 100
запросы замедляются раз в 1000
это только для таблиц которые раз в день загружаются... ночью отрабатывает, есть 2 таблицы, одна Log куда вставляю данные, затем INSERT INTO
Хм Окей Тогда другой момент Версионирование данных В табличке лежат и старые (Version < N) и новые данные(Version = N) Как считать агрегаты только по новым данным? Это тоже своего рода дедупликация VersionedMergeTree опять же не даёт гарантий ни на что:/
еще есть вариант через row policy
АргМакс даст последнее значение - т.е. сагрегирует набор данных в одну единицу данных А мне нужны агрегаты вроде суммы/среднего Агрегат от агрегата кх считать не умеет как я понял View пилить?
в чем проблема с select from select
Достаточно ли кх умный, чтобы фильтры из первого селекта прокинуть во второй и не аргмаксить всю таблицу для получения, скажем, по конкретному id
А вообще несколько плохо так писать insert в Log -> insert into MergeTree с проверкой на hash, если не реалтайм? а очень редкие вставки раз в день ну или в час
да, есть id в groupby
да можно если вам надо мало строк инжестить, я просто когда про КХ разговариваю, я думаю про вставки 100тыс - 1 мл. строк в секунду 24*7
а ну нет, для такого конечно так делать не буду)
Спасибо, сильно помогли!:)
Обсуждают сегодня