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

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

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

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

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

9 ответов

5 просмотров

Две таблицы, одна для последнего состояния, вторая для истории с обычным движком 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 которая будет схлопывать дубликаты во время мержей. Но это же означает, что в произвольный момент времени дубликаты будут находится в таблице и вам нужно будет писать запросы специальным образом, что бы они вам не мешали

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта