apache-airflow-providers-clickhousedb подключает Airflow к ClickHouse, позволяя выполнять запросы, создавать таблицы и загружать данные в рамках DAG. Он подключается через HTTP-интерфейс с помощью клиента clickhouse-connect и предоставляет доступ к ClickHouse через общий SQL-фреймворк Airflow, поэтому стандартный SQLExecuteQueryOperator обрабатывает DDL, DML и аналитические запросы без необходимости в специальном операторе для ClickHouse.
Уже используете
airflow-clickhouse-plugin от сообщества? Он использует другой драйвер, протокол и порт. Следуйте
руководству по миграции, чтобы перенести существующие DAG и соединения на провайдер.Установите провайдер
Установите провайдер в окружение, где работают планировщик Airflow и воркеры:apache-airflow-providers-common-sql и clickhouse-connect, которые устанавливаются вместе с ним. Чтобы передавать результаты запросов в DataFrame из pandas или polars, установите дополнительные опциональные компоненты:
Создайте подключение ClickHouse
Провайдер регистрирует тип подключенияclickhouse. Создайте подключение в интерфейсе Airflow в разделе Admin > Connections или задайте его через CLI либо переменную окружения.
В интерфейсе выберите ClickHouse в качестве типа подключения и заполните следующие поля:
Для ClickHouse Cloud или любого самоуправляемого кластера с включенным TLS установите для
secure значение true в поле Extra и используйте TLS-порт (8443).
Дополнительные параметры соединения
Провайдер предоставляет дополнительные параметры в виде отдельных полей в форме соединения. Если вместо этого вы задаёте соединение через URI, JSON или переменную окружения, укажите их как ключи в объекте JSONextra. Все они необязательны:
Настройте подключение без интерфейса
Задайте подключение через переменную окружения. Формат URI включает хост, учетные данные и базу данных:clickhouse_default, если не указан другой.
Выполнение запросов с SQLExecuteQueryOperator
Укажите вconn_id оператора ваше подключение к ClickHouse. Следующий DAG создаёт таблицу, вставляет строки, считывает их обратно и удаляет таблицу:
handler, используемого по умолчанию (fetch_all_handler). Чтобы вернуть не весь результирующий набор, передайте другой обработчик, например fetch_one_handler, чтобы получить только первую строку.
Укажите разные базы данных для каждой задачи
Если одно соединение указывает на кластер, а отдельные задачи выполняют запросы к разным базам данных, переопределите базу данных черезhook_params вместо создания отдельного соединения:
Используйте хук напрямую
Для задач, которые не укладываются в возможности SQL-оператора, — например, для массовой вставки, стриминга или вызовов клиента, специфичных для ClickHouse, — используйтеClickHouseHook в Python-задаче.
Метод bulk_insert_rows этого хука использует нативный столбцовый путь вставки в clickhouse-connect, который на больших датасетах значительно быстрее, чем построчная вставка. Установите batch_size, чтобы ограничить пиковое потребление памяти при очень больших объёмах входных данных:
get_client(), чтобы получить доступ к клиенту clickhouse-connect на низком уровне для всего, что хук не предоставляет напрямую:
Применить настройки сеанса
Передавайте настройки сеанса при создании хука — напрямую или черезhook_params оператора. Настройки, переданные в конструктор, накладываются поверх любых session_settings, заданных в поле Extra подключения; при конфликте ключей приоритет имеют значения конструктора: