ClickHouse (ReplacingMergeTree). Выгрузка данных справочника

Зачастую в работе аналитика возникает необходимость хранить в аналитической базе данных не только какие-то сводные данные (о продажах, выручке и т.п.), но и просто справочник. Причем так, чтобы справочник был актуален в любой момент времени. Можно настроить частую выгрузку, но если справочник очень большой, то выгрузка в разрезе «Партиций» может быть очень накладной по временным расходам. Для решения этой задачи лучше использовать механизм ClickHouse, называемый «ReplacingMergeTree» (в терминах ClickHouse - это называется «движок»). По своей сути - это возможность добавлять новые данные, не удаляя перед этим старые, т.к. движок ClickHouse сам уберет задвоения с одинаковым значением ключа сортировки. Подробнее об этом можно прочитать, пройдя по ссылке: ReplacingMergeTree в ClickHouse. Т.е. мы можем просто добавлять данные, которые были изменены или добавлены, а ClickHouse сам уберет дублирующиеся строки. Если настроить расписание выгрузки достаточно часто (например, раз в 5 секунд), то получится практически выгрузка в режиме «реального времени».

Схематично этот механизм можно представить следующим образом:

Рассмотрим подробно по шагам, как следует настроить проект на примере выгрузки справочника «Партнеры»:

Пример протестирован на версии 3.4.2.3.

  • создайте новый проект по инструкции (Этап 1) и нажмите кнопку “Добавить”, чтобы начать конструировать строку проекта.

  • Выберите “Объект”, укажите справочник “Партнеры” и нажмите “Далее

  • выберите «Настроить параметры» > Далее. Откроется форма выбора параметров источника.

  • В ней надо выбрать параметр «Ссылка» , остальные параметры удалить, чтобы в отбор всегда попадали уникальные значения (ссылка на справочник) и нажать> Далее

  • настройте выбранные поля (какие вам нужны), не удаляя при этом параметр “Ссылка” и нажмите “Далее”

  • в вычисляемых полях вычислим гуид ссылки. Он понадобится движку Clickhouse для идентификации, кто здесь дубль, а кто нет. По нему мы будем устанавливать ключ сортировки (об этом чуть позже)

  • Создадим новую таблицу, т.к. это новая выгрузка

  • На этапе сопоставления полей установим галку признака сегмента (в принципе, она установится по умолчанию сама).

  • заходим в “Расширенные настройки”.

  • Выбираем движок - ReplacingMergeTree

  • Партиции оставляем пустыми

  • а на закладке “Ключ сортировки” указываем гуид ссылки

  • Завершите мастер создания строки проекта, нажатием на “Далее”

  • Теперь необходимо донастроить строку проекта. Для этого надо выделить строку, нажать на и заполнить параметры, как показано на рисунке:

  • Теперь можно «инициализировать проект». При инициализации, Очередь будет заполнена всеми значениями справочника Партнеры.Ссылка

  • Затем выполним проект

  • Что будет происходить далее?

    • вам необходимо будет настроить расписание и сохранить проект

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

    • Далее, по своему расписанию, Проект будет добавлять эти элементы справочника в таблицу Clickhouse, создавая «дубли» (повторяющиеся элементы) записей.

    • а Clickhouse по своему расписанию, будет удалять повторяющиеся значения (по полю сортировки) (это расписание никому точно не известно)

    • Чтобы увидеть данный справочник без дублей, используйте не просто Select, а:

      Select from Справочник FINAL

    • Или применяйте команду:

      OPTIMIZE TABLE Справочник