Перейти к основному содержимому
Перейти к основному содержимому

Интеграция dbt и ClickHouse

ClickHouse Supported

Адаптер 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

pip install dbt-clickhouse

Предоставьте dbt данные для подключения к нашей инстанции ClickHouse.

Настройте профиль clickhouse в файле ~/.dbt/profiles.yml и укажите свойства пользователя, пароля, схемы и хоста. Полный список опций конфигурации подключения доступен на странице Функции и конфигурации:

clickhouse:
  target: dev
  outputs:
    dev:
      type: clickhouse
      schema: <target_schema>
      host: <host>
      port: 8443 # use 9440 for native
      user: default
      password: <password>
      secure: True

Создайте проект dbt

dbt init project_name

Внутри директории project_name обновите файл dbt_project.yml, чтобы указать имя профиля для подключения к серверу ClickHouse.

profile: 'clickhouse'

Проверьте подключение

Выполните dbt debug с инструментом CLI, чтобы подтвердить, может ли dbt подключиться к ClickHouse. Подтвердите, что ответ включает Connection test: [OK connection ok], что указывает на успешное соединение.

Мы предполагаем использование CLI dbt в следующих примерах. Этот адаптер еще не доступен для использования внутри dbt Cloud, но мы ожидаем, что он станет доступен в ближайшее время. Пожалуйста, свяжитесь с поддержкой, чтобы получить более подробную информацию об этом.

dbt предлагает несколько вариантов установки через CLI. Следуйте инструкциям, описанным здесь. На этом этапе установите только dbt-core. Мы рекомендуем использовать pip для установки как dbt, так и dbt-clickhouse.

pip install dbt-clickhouse

Перейдите на страницу руководств, чтобы узнать больше о том, как использовать dbt с ClickHouse.

Устранение неполадок при подключениях

Если вы столкнулись с проблемами подключения к ClickHouse из dbt, убедитесь, что выполнены следующие условия:

  • Движок должен быть одним из поддерживаемых движков.
  • У вас должны быть соответствующие разрешения для доступа к базе данных.
  • Если вы не используете движок таблицы по умолчанию для базы данных, вам необходимо указать движок таблицы в конфигурации вашей модели.

Ограничения

Текущий адаптер ClickHouse для dbt имеет несколько ограничений, о которых пользователи должны быть осведомлены:

  1. Адаптер в настоящее время материализует модели как таблицы с использованием INSERT TO SELECT. Это фактически означает дублирование данных. Очень большие наборы данных (PB) могут привести к чрезвычайно долгим срокам выполнения, что делает некоторые модели неприемлемыми. Стремитесь минимизировать количество строк, возвращаемых любым запросом, используя GROUP BY, где это возможно. Предпочитайте модели, которые обобщают данные, по сравнению с теми, которые просто выполняют преобразование, сохраняя при этом счетчик строк источника.
  2. Чтобы использовать распределенные таблицы для представления модели, пользователи должны вручную создавать подлежащие реплицированные таблицы на каждом узле. В свою очередь, распределенная таблица может быть создана поверх этих таблиц. Адаптер не управляет созданием кластера.
  3. Когда dbt создает связь (таблица/представление) в базе данных, он обычно создает ее как: {{ database }}.{{ schema }}.{{ table/view id }}. У ClickHouse нет понятия схем. Поэтому адаптер использует {{schema}}.{{ table/view id }}, где schema - это база данных ClickHouse.
  4. Эфемерные модели/CTE не работают, если размещены перед INSERT INTO в SQL-вставке ClickHouse, см. https://github.com/ClickHouse/ClickHouse/issues/30323. Это не должно повлиять на большинство моделей, но следует осторожно относиться к тому, где размещена эфемерная модель в определениях моделей и других SQL-операторах.

Дополнительная информация

Предыдущие руководства лишь касаются powierzowania функциональности dbt. Мы рекомендуем пользователям ознакомиться с отличной документацией dbt.

Дополнительная конфигурация для адаптера описана здесь.

Fivetran

Коннектор dbt-clickhouse также доступен для использования в преобразованиях Fivetran, что позволяет seamlessly интеграции и возможностям трансформации прямо внутри платформы Fivetran с использованием dbt.