Адаптер dbt-clickhouse
Поддерживаемые возможности
- Материализация таблиц
- Материализация представлений
- Инкрементальная материализация
- Инкрементальная материализация Microbatch
- Materialized View materializations (использует форму
TOдля MATERIALIZED VIEW, экспериментально) - Seeds
- Источники
- Генерация документации
- Тесты
- Снимки
- Большинство макросов dbt-utils (теперь входят в dbt-core)
- Эфемерная материализация
- Материализация distributed таблиц (экспериментально)
- Инкрементальная материализация distributed таблиц (экспериментально)
- Контракты
- Специфичные для ClickHouse конфигурации столбцов (кодек, TTL…)
- Специфичные для ClickHouse настройки таблиц (индексы, проекции…)
--sample; также устранены все предупреждения об устаревании для будущих версий. Интеграции с каталогами (например, Iceberg), появившиеся в dbt 1.10, пока не поддерживаются адаптером нативно, но доступны обходные решения. Подробности см. в разделе Catalog Support.
Этот адаптер по-прежнему недоступен для использования в dbt Cloud, но мы рассчитываем добавить его в ближайшее время. За дополнительной информацией обратитесь в службу поддержки.
Концепции dbt и поддерживаемые материализации
SELECT в оператор, чтобы создать новое или обновить существующее отношение.
dbt предоставляет 5 типов материализации. Все они поддерживаются dbt-clickhouse:
- view (по умолчанию): Модель создаётся как представление в базе данных. В ClickHouse это создаётся как view.
- table: Модель создаётся как таблица в базе данных. В ClickHouse это создаётся как table.
- ephemeral: Модель не создаётся напрямую в базе данных, а подставляется в зависимые модели как CTE (Common Table Expressions, общие табличные выражения).
- incremental: Изначально модель материализуется как таблица, а при последующих запусках dbt выполняет вставку новых строк и обновляет изменённые строки в таблице.
- materialized view: Модель создаётся как materialized view в базе данных. В ClickHouse это создаётся как materialized view.
dbt-clickhouse:
Настройка dbt и адаптера ClickHouse
Установите dbt-core и dbt-clickhouse
pip.
Укажите в dbt сведения о подключении к нашему экземпляру ClickHouse.
clickhouse-service в файле ~/.dbt/profiles.yml и задайте свойства schema, host, port, user и password. Полный список параметров конфигурации подключения доступен на странице Возможности и конфигурации:
Создайте проект в dbt
project_name обновите файл dbt_project.yml, указав имя профиля для подключения к серверу ClickHouse.
Проверка подключения
dbt debug в CLI, чтобы проверить, может ли dbt подключиться к ClickHouse. Убедитесь, что в ответе есть строка Connection test: [OK connection ok], которая указывает на успешное подключение.
Перейдите на страницу руководств, чтобы узнать больше об использовании dbt с ClickHouse.
Тестирование и развертывание ваших моделей (CI/CD)
CI/CD с простыми тестами данных и модульными тестами
dbt build на продакшн-кластере ClickHouse.
Более полный этап CI/CD: используйте свежие данные и тестируйте только затронутые модели
- Если вам не нужны свежие данные для тестирования, можно восстановить резервную копию данных из продакшн в staging-среду.
- Если вам нужны свежие данные для тестирования, можно использовать сочетание table function
remoteSecure()и refreshable materialized views, чтобы выполнять вставку с нужной частотой. Другой вариант — использовать Объектное хранилище как промежуточное хранилище, периодически записывать в него данные из вашего продакшн-сервиса, а затем импортировать их в staging-среду с помощью table functions для Объектного хранилища или ClickPipes (для непрерывной ингестии).
dbt build --select state:modified+ --state path/to/last/deploy/state.json, чтобы выборочно пересобирать минимально необходимое количество моделей на основе изменений с момента последнего запуска в продакшн.
Устранение типичных неполадок
Подключения
- Движок должен быть одним из поддерживаемых движков.
- У вас должны быть достаточные разрешения на доступ к базе данных.
- Если вы не используете движок таблицы по умолчанию для базы данных, необходимо указать движок таблицы в конфигурации модели.
Понимание длительно выполняющихся операций
debug — тогда будет выводиться время выполнения каждого запроса. Например, для этого можно добавить --log-level debug к командам dbt.
Ограничения
- Плагин использует синтаксис, требующий ClickHouse версии 25.3 или новее. Более старые версии ClickHouse мы не тестируем. Также в настоящее время мы не тестируем таблицы Replicated.
- Разные запуски
dbt-adapterмогут конфликтовать, если выполняются одновременно, поскольку внутри они могут использовать одинаковые имена таблиц для одних и тех же операций. Подробнее см. issue #420. - Сейчас адаптер материализует модели в виде таблиц с использованием INSERT INTO SELECT. На практике это означает дублирование данных при повторном запуске. Очень большие датасеты (PB) могут приводить к крайне долгому времени выполнения, из-за чего некоторые модели становятся непрактичными. Чтобы повысить производительность, используйте materialized views ClickHouse, реализуя представление как
materialized: materialization_view. Кроме того, старайтесь по возможности уменьшать количество строк, возвращаемых любым запросом, используяGROUP BY. Предпочтительнее модели, которые агрегируют данные, а не просто преобразуют их, сохраняя количество строк источника. - Чтобы использовать Distributed tables для представления модели, необходимо вручную создать базовые реплицируемые таблицы на каждом узле. Затем поверх них можно создать Distributed таблицу. Адаптер не управляет созданием cluster.
- Когда dbt создает отношение (table/view) в database, оно обычно создается в виде:
{{ database }}.{{ schema }}.{{ table/view id }}. В ClickHouse нет понятия схем. Поэтому адаптер использует{{schema}}.{{ table/view id }}, гдеschema— это database ClickHouse. - Эфемерные модели/CTE не работают, если размещены перед
INSERT INTOв операторе вставки ClickHouse, см. https://github.com/ClickHouse/ClickHouse/issues/30323. Это не должно затрагивать большинство моделей, но следует учитывать, где именно эфемерная модель размещается в определениях моделей и других SQL-командах.
Fivetran
dbt-clickhouse также можно использовать в трансформациях Fivetran, что обеспечивает бесшовную интеграцию и возможность преобразования данных непосредственно в платформе Fivetran с помощью dbt.