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

Добрый день! подскажите плз. Я понимаю, что у КХ нет

возможности update,и для этого придуманы коллапсирующие движки типа VersionedCollapsingMergeTree
А как быть, если надо предыдущую версию записи сохранить для аудита (в другой таблице). Update бывают редко, для отчетов всегда нужна последяя версия, но предыдущие версии нужны просто для посмотреть в UI. В идеале в другую таблицу их сохранять.

Данные - показания счетчиков электроэнергии. они идут плотным потоком, не всегда в строгой последовательности по времени.

Кто как выкручивается?

9 ответов

9 просмотров

Две таблицы, одна для последнего состояния, вторая для истории с обычным движком mergeTree соединены через Materialized VIEW

Robert-Egorov Автор вопроса
Dmitry [Altinity] Titov
Две таблицы, одна для последнего состояния, вторая...

Спасибо. Перевариваю. А первая получается типа VersionedCollapsingMergeTree? и вставляем сразу в две таблицы? Что то пока не могу ухватить идею.

Robert Egorov
Спасибо. Перевариваю. А первая получается типа Ver...

CollapsingMergeTree нужен в 90% случаев для задачи подсчета sum и count агрегатов, только для этого есть толк в строках и антистроках. Для остальных видов запросов есть ReplacingMergeTree

Dmitry [Altinity] Titov
CollapsingMergeTree нужен в 90% случаев для задачи...

>вставляем сразу в две таблицы для этого есть MATERALIZED VIEW, они работают аналогично insert trigger в других базах

Robert-Egorov Автор вопроса
Dmitry [Altinity] Titov
CollapsingMergeTree нужен в 90% случаев для задачи...

это осознал. Спасибо. Там действительно нет задачи подсчета агрегатов, надо просто перезаписать значение.

Robert-Egorov Автор вопроса
Dmitry [Altinity] Titov
>вставляем сразу в две таблицы для этого есть MATE...

ага, я по Oracle знаю, что такое MView, думаю в КХ аналогично. Но если я использую ReplaceMergeTree то как я узнаю, что уже такой ключ там есть? или делаем так 1. делаем insert очередной пачки записей в таблицу "A" (MergeTree) 2. из таблицы с конечными значеними "B" (ReplaceMergeTree) переписываем в таблицу "V" записи которые есть в таблице "A". то есть что то типа insert into V select from A if exists in B 3. переношу все записи из A в B (и все что нужно зареплейсится).

Robert Egorov
ага, я по Oracle знаю, что такое MView, думаю в КХ...

Не совсем, в кх MV работают как insert trigger, те нет возможности пересчитывать их по расписанию и тд. > Но если я использую ReplacingMergeTree то как я узнаю, что уже такой ключ там есть? Никак, просто пихаете все записи в ReplacingMergeTree, таким образом что бы при схлопывании всех записей по ORDER BY у вас оставалась только одна нужная. Потом пишете запросы к ReplacingMergeTree определенным образом(схлопывая все записи в последнее состояние)

Robert-Egorov Автор вопроса
Dmitry [Altinity] Titov
Не совсем, в кх MV работают как insert trigger, те...

покурить это надо. Не ухватываю мысль. Попробую вот так: была запись X версии1 в ReplacingMergeTree Я вставляю X версии2 в ReplacingMergeTree. Хочу, что бы в таблице осталась X версии2 но Xверсии1 а) не пропала без следа б) не мешалась.

Robert Egorov
покурить это надо. Не ухватываю мысль. Попробую во...

Нужно две таблицы, MergeTree которая будет хранить всю историю ReplacingMergeTree которая будет схлопывать дубликаты во время мержей. Но это же означает, что в произвольный момент времени дубликаты будут находится в таблице и вам нужно будет писать запросы специальным образом, что бы они вам не мешали

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
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
Карта сайта