Интеграция dbt и ClickHouse
Адаптер dbt-clickhouse
dbt (инструмент для построения данных) позволяет аналитическим инженерам трансформировать данные в своих хранилищах, просто написав SQL-запросы SELECT. dbt обрабатывает материализацию этих запросов в объекты базы данных в виде таблиц и представлений - выполняя этап T из Извлечения, Загрузки и Преобразования (ELT). Пользователи могут создавать модель, определенную выражением SELECT.
В dbt эти модели могут перекрестно ссылаться и слоиться, что позволяет строить более сложные концепции. Шаблонный SQL, необходимый для связи моделей, автоматически генерируется. Более того, dbt определяет зависимости между моделями и гарантирует, что они создаются в нужном порядке с использованием направленного ациклического графа (DAG).
Dbt совместим с ClickHouse через адаптер, поддерживаемый ClickHouse. Мы описываем процесс подключения ClickHouse с простым примером на основе общедоступного набора данных IMDB. Мы также подчеркиваем некоторые ограничения текущего соединителя.
Поддерживаемые функции
Поддерживаемые функции
- Материализация таблиц
- Материализация представлений
- Инкрементная материализация
- Инкрементная материализация микропакетов
- Материализации материализованных представлений (использует форму
TO
MATERIALIZED VIEW, экспериментально) - Сиды
- Источники
- Генерация документации
- Тесты
- Снимки
- Большинство макросов dbt-utils (теперь включены в dbt-core)
- Эфемерная материализация
- Материализация распределенных таблиц (экспериментально)
- Распределенная инкрементная материализация (экспериментально)
- Контракты
Концепции
dbt вводит концепцию модели. Это определяется как SQL-запрос, потенциально объединяющий множество таблиц. Модель может быть "материализована" несколькими способами. Материализация представляет стратегию построения для запроса SELECT модели. Код за материализацией - это шаблонный SQL, который оборачивает ваш запрос SELECT в оператор, чтобы создать новую связь или обновить существующую.
dbt предоставляет 4 типа материализации:
- view (по умолчанию): Модель создается как представление в базе данных.
- table: Модель создается как таблица в базе данных.
- ephemeral: Модель не создается непосредственно в базе данных, а используется в зависимых моделях как общие табличные выражения.
- incremental: Модель изначально материализуется как таблица, а в последующих запусках dbt вставляет новые строки и обновляет измененные строки в таблице.
Дополнительный синтаксис и операторы определяют, как эти модели должны обновляться, если их исходные данные изменяются. dbt обычно рекомендует начинать с материализации представлений, пока производительность не станет проблемой. Материализация таблицы обеспечивает улучшение производительности времени выполнения запроса, фиксируя результаты запроса модели как таблицу за счет увеличения объема хранимых данных. Инкрементный подход строится на этом, позволяя последующим обновлениям исходных данных фиксироваться в целевой таблице.
Текущий адаптер для ClickHouse также поддерживает материализованные представления, словарь, распределенные таблицы и распределенные инкрементные материализации. Адаптер также поддерживает снимки dbt и сиды.
Подробности о поддерживаемых материализациях
Тип | Поддерживается? | Подробности |
---|---|---|
Материализация представления | ДА | Создает представление. |
Материализация таблицы | ДА | Создает таблицу. Смотрите ниже для списка поддерживаемых движков. |
Инкрементная материализация | ДА | Создает таблицу, если она не существует, и затем записывает только обновления в нее. |
Эфемерная материализация | ДА | Создает эфемерную/CTE материализацию. Эта модель является внутренней для dbt и не создает объекты базы данных. |
Следующие функции являются экспериментальными функциями в ClickHouse:
Тип | Поддерживается? | Подробности |
---|---|---|
Материализация материализованного представления | ДА, Экспериментально | Создает материализованное представление. |
Материализация распределенной таблицы | ДА, Экспериментально | Создает распределенную таблицу. |
Распределенная инкрементная материализация | ДА, Экспериментально | Инкрементная модель, основанная на той же идее, что и распределенная таблица. Обратите внимание, что не все стратегии поддерживаются, посетите это для получения дополнительной информации. |
Материализация словаря | ДА, Экспериментально | Создает словарь. |
Установка dbt и адаптера ClickHouse
Установка dbt-core и dbt-clickhouse
Предоставьте dbt данные для подключения к нашей инстанции ClickHouse.
Настройте профиль clickhouse
в файле ~/.dbt/profiles.yml
и укажите свойства пользователя, пароля, схемы и хоста. Полный список опций конфигурации подключения доступен на странице Функции и конфигурации:
Создайте проект dbt
Внутри директории project_name
обновите файл dbt_project.yml
, чтобы указать имя профиля для подключения к серверу ClickHouse.
Проверьте подключение
Выполните dbt debug
с инструментом CLI, чтобы подтвердить, может ли dbt подключиться к ClickHouse. Подтвердите, что ответ включает Connection test: [OK connection ok]
, что указывает на успешное соединение.
Мы предполагаем использование CLI dbt в следующих примерах. Этот адаптер еще не доступен для использования внутри dbt Cloud, но мы ожидаем, что он станет доступен в ближайшее время. Пожалуйста, свяжитесь с поддержкой, чтобы получить более подробную информацию об этом.
dbt предлагает несколько вариантов установки через CLI. Следуйте инструкциям, описанным здесь. На этом этапе установите только dbt-core. Мы рекомендуем использовать pip
для установки как dbt, так и dbt-clickhouse.
Перейдите на страницу руководств, чтобы узнать больше о том, как использовать dbt с ClickHouse.
Устранение неполадок при подключениях
Если вы столкнулись с проблемами подключения к ClickHouse из dbt, убедитесь, что выполнены следующие условия:
- Движок должен быть одним из поддерживаемых движков.
- У вас должны быть соответствующие разрешения для доступа к базе данных.
- Если вы не используете движок таблицы по умолчанию для базы данных, вам необходимо указать движок таблицы в конфигурации вашей модели.
Ограничения
Текущий адаптер ClickHouse для dbt имеет несколько ограничений, о которых пользователи должны быть осведомлены:
- Адаптер в настоящее время материализует модели как таблицы с использованием
INSERT TO SELECT
. Это фактически означает дублирование данных. Очень большие наборы данных (PB) могут привести к чрезвычайно долгим срокам выполнения, что делает некоторые модели неприемлемыми. Стремитесь минимизировать количество строк, возвращаемых любым запросом, используя GROUP BY, где это возможно. Предпочитайте модели, которые обобщают данные, по сравнению с теми, которые просто выполняют преобразование, сохраняя при этом счетчик строк источника. - Чтобы использовать распределенные таблицы для представления модели, пользователи должны вручную создавать подлежащие реплицированные таблицы на каждом узле. В свою очередь, распределенная таблица может быть создана поверх этих таблиц. Адаптер не управляет созданием кластера.
- Когда dbt создает связь (таблица/представление) в базе данных, он обычно создает ее как:
{{ database }}.{{ schema }}.{{ table/view id }}
. У ClickHouse нет понятия схем. Поэтому адаптер использует{{schema}}.{{ table/view id }}
, гдеschema
- это база данных ClickHouse. - Эфемерные модели/CTE не работают, если размещены перед
INSERT INTO
в SQL-вставке ClickHouse, см. https://github.com/ClickHouse/ClickHouse/issues/30323. Это не должно повлиять на большинство моделей, но следует осторожно относиться к тому, где размещена эфемерная модель в определениях моделей и других SQL-операторах.
Дополнительная информация
Предыдущие руководства лишь касаются powierzowania функциональности dbt. Мы рекомендуем пользователям ознакомиться с отличной документацией dbt.
Дополнительная конфигурация для адаптера описана здесь.
Fivetran
Коннектор dbt-clickhouse
также доступен для использования в преобразованиях Fivetran, что позволяет seamlessly интеграции и возможностям трансформации прямо внутри платформы Fivetran с использованием dbt
.