Pull to refresh
12
0
Петр Гонин @pgonin

Data Engineer @ Okko

Send message

Раньше кстати пользовались clickhouse-driver, но он не поддерживает шаблонизацию и чет мы немного помучались с передачей в него настроек. Также, насколько я помню, он по дефолту оставляет подключения открытыми.

Мы используем вот этот плагин, для наших целей отлично подходит. Там помимо ClickHouseOperator, есть еще сразу ClickHouseSensor и ClickHouseHook.

Мы еще в него добавили дефолтные параметры типа названия подключения, настроек, query_id. Также из плюсов он поддерживает шаблонизацию Airflow, то есть туда прямо в SQL код можно добавлять всякие параметры типа {{ ds }}, {{ next_ds }} и пр. Ну и еще удобно что можно передавать сразу несколько SQL файлов.

В итоге большинство наших DAG'ов - это набор из следующих операторов/сенсоров:

ch_task = DefaultClickhouseOperator(
    task_id="ch_task",
    sql=["#1_drop_partition.sql", "#2_insert_increment.sql"],
    params={**TABLES},
)

Также из удобств он всегда закрывает за собой подключения, а также по дефолту пишет в логи финальный текст SQL запроса.

Вы правы, под капотом любая операция delete/update инсертнет обновленные данные. И это достаточно затратно по ресурсам. Зато подобная архитектура позволяет кликхаусу быть очень быстрой OLAP СУБД (при правильных настройках).

Для обновления данных в реплицированной таблице необязательно подключаться к каждому хосту, достаточно выполнить например replace partition on cluster <cluster> - так он сам отправит запросы на все ноды и дождется успешного выполнения. Либо можно дропать партицию и делать инсерт новой.

Разумеется, у каждого инструмента есть свои ограничения, поэтому крупные компании часто используют кликхаус в связке например с Greenplum / Vertica / HDFS / etc. В кликхаусе хранится кликстрим, а транзакционные данные - в других хранилищах.

Спасибо за комментарий! С обычным (Replicated)MergeTree же все ок?

И можете плиз поделиться ссылкой на описание проблемы с консистентностью? Беглым поиском не смог найти, а проекции мы используем)

Да, вы более чем правы, с дефолтным постгресом работать в определенной мере проще и точно привычнее. Но когда данных становится очень много, уже особо нет выбора и приходится переходить к менее привычным инструментам для работы с большими данными (колоночные распределенные СУБД, HDFS и тд).

Также, несмотря на то что порог входа в ClickHouse ненулевой, он в грамотных руках дает гораздо больший буст производительности и удобства работы (те самые фишки выше из статьи и не только🙂). Это примерно как впервые купить SmartTV для просмотра федеральных каналов - пока не разобрался и так сойдет, но потом оказывается что можно и много всего друго крутого делать: и отдельные приложения ставить, и музыку слушать, и в игры играть.

На мой взгляд, особенно на первых этапах работы с ClickHouse, задача дата инженеров и заключается в том, чтобы обеспечить плавный переход для аналитиков с привычных им СУБД - сделать простые понятные таблицы, рассказать про правильную фильтрацию и основные проблемы с которыми можно столкнуться. А уже потом постепенно рассказывать про нетривиальные, но удобные штуки, чтобы раскрыть этот инструмент по максимуму.

Занятная фишка конечно)

А что будет если optimize table final сделать?

И если это воспроизводится, мб issue закинуть?

У нас тоже все RMT таблицы реплицированы, но таких проблем не наблюдаем 🤷‍♂️

Information

Rating
Does not participate
Registered
Activity

Specialization

Data Engineer
Lead
Python
ClickHouse
Linux
Docker
Git