feat(airflow): подключён официальный провайдер ClickHouse
- Зачем: - нужен единый штатный путь исполнения SQL и программных запросов ClickHouse из Airflow. - Что: - добавлен официальный провайдер и подключения типа `clickhouse`. - SQL-файлы переданы `SQLExecuteQueryOperator`, а программные запросы — `ClickHouseHook`. - разбор заказов собран в одном файле, DDL разделён по задачам, документация и смоук обновлены. - Проверка: - выполнены `make lint` и `make config-test`. - собран образ, выполнены `pip check`, `make rebuild-storage`, `make smoke` (21/21), `make check-clickhouse` (10/10) и `make check-services` (7/7).
This commit is contained in:
1 parent
587e392220
commit
8d82679bc1
17 files changed
+393
-438
No files matched your search
@@ -2,14 +2,19 @@ FROM apache/airflow:3.3.0
|
||||
|
||||
USER root
|
||||
|
||||
# SQL-файлы ClickHouse исполняет официальный провайдер Airflow. Он разрешает
|
||||
# любую версию clickhouse-connect >= 1.3.0, поэтому драйвер закреплён отдельно:
|
||||
# сборка стенда не должна незаметно менять транспорт при обновлении зависимостей.
|
||||
#
|
||||
# Официальный провайдер Kafka использует тот же confluent-kafka. Пробникам
|
||||
# не нужны его подключения и обёртки, поэтому в образ добавлен сам клиент.
|
||||
#
|
||||
# Провайдера docker, которым пульт мира зовёт генератор, ставить не нужно:
|
||||
# база несёт его сама — 4.5.7 к Airflow 3.3.0, замер 13 августа 2026 года.
|
||||
RUN uv pip install --python /home/airflow/.local/bin/python --no-cache \
|
||||
"apache-airflow-providers-clickhousedb==1.0.0" \
|
||||
"clickhouse-connect==1.6.0" \
|
||||
"confluent-kafka==2.15.0" \
|
||||
&& python -c "import clickhouse_connect, confluent_kafka"
|
||||
&& python -c "import airflow.providers.clickhousedb, clickhouse_connect, confluent_kafka"
|
||||
|
||||
USER airflow
|
||||
@@ -22,21 +22,26 @@ PY
|
||||
|
||||
runuser -u airflow -- airflow db migrate
|
||||
runuser -u airflow -- airflow connections delete clickhouse_default >/dev/null 2>&1 || true
|
||||
# Прикладные запросы короткие: 30 с отличают зависший транспорт от работы запроса.
|
||||
runuser -u airflow -- airflow connections add clickhouse_default \
|
||||
--conn-type generic \
|
||||
--conn-type clickhouse \
|
||||
--conn-host clickhouse-01 \
|
||||
--conn-port 8123 \
|
||||
--conn-login etl \
|
||||
--conn-password "$CLICKHOUSE_ETL_PASSWORD" \
|
||||
--conn-schema default \
|
||||
--conn-description "ClickHouse, нода 1; типизированный провайдер появится на этапе ETL"
|
||||
--conn-extra '{"connect_timeout": 5, "send_receive_timeout": 30}' \
|
||||
--conn-description "ClickHouse, нода 1; запросы прикладных дагов"
|
||||
|
||||
runuser -u airflow -- airflow connections delete clickhouse_lifecycle >/dev/null 2>&1 || true
|
||||
# `ON CLUSTER` ждёт хосты до 180 с. Транспорт живёт дольше, чтобы ClickHouse
|
||||
# успел назвать незавершённый хост вместо сетевого тайм-аута.
|
||||
runuser -u airflow -- airflow connections add clickhouse_lifecycle \
|
||||
--conn-type generic \
|
||||
--conn-type clickhouse \
|
||||
--conn-host clickhouse-01 \
|
||||
--conn-port 8123 \
|
||||
--conn-login lifecycle \
|
||||
--conn-password "$CLICKHOUSE_LIFECYCLE_PASSWORD" \
|
||||
--conn-schema default \
|
||||
--conn-extra '{"connect_timeout": 5, "send_receive_timeout": 300}' \
|
||||
--conn-description "ClickHouse, нода 1; создание и пересоздание прикладного мира"
|
||||
Reference in new issue
Block a user