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

Конфигурации ClickHouse

Модели

ТипПоддерживается?Подробности
материализация viewДАСоздает представление.
материализация tableДАСоздает таблицу. См. ниже список поддерживаемых движков.
материализация incrementalДАСоздает таблицу, если она не существует, и затем записывает в нее только обновления.
материализация ephemeralДАСоздает временную/CTE материализацию. Эта модель является внутренней для dbt и не создает никаких объектов в базе данных.

Экспериментальные модели

Следующие функции являются экспериментальными в ClickHouse:

ТипПоддерживается?Подробности
Материализация Materialized ViewДА, ЭкспериментальноСоздает материализованное представление.
Материализация Distributed tableДА, ЭкспериментальноСоздает распределенную таблицу.
Материализация Distributed incrementalДА, ЭкспериментальноИнкрементальная модель на основе той же идеи, что и распределенная таблица. Обратите внимание, что не все стратегии поддерживаются, посетите эту страницу для получения дополнительной информации.
Материализация DictionaryДА, ЭкспериментальноСоздает словарь.

Материализация View

Модель dbt может быть создана как представление ClickHouse и настроена с использованием следующего синтаксиса:

dbt_project.yml
models:
<resource-path>:
+materialized: view

Материализация Table

Модель dbt может быть создана как таблица ClickHouse и настроена с использованием следующего синтаксиса:

dbt_project.yml
models:
<resource-path>:
+materialized: table
+order_by: [ <column-name>, ... ]
+engine: <engine-type>
+partition_by: [ <column-name>, ... ]

Конфигурация таблицы

ОпцияОписаниеОбязательно?
materializedКак модель будет материализована в ClickHouse. Должно быть table, чтобы создать модель таблицы.Обязательно
engineДвижок таблицы, используемый при создании таблиц. См. список поддерживаемых движков ниже.Необязательно (по умолчанию: MergeTree())
order_byКортеж имен столбцов или произвольных выражений. Это позволяет создать небольшой разреженный индекс, который помогает быстрее находить данные.Необязательно (по умолчанию: tuple())
partition_byРаздел — это логическое объединение записей в таблице по заданному критерию. Ключ раздела может быть любым выражением из столбцов таблицы.Необязательно

Инкрементальная материализация

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

dbt_project.yml
models:
<resource-path>:
+materialized: incremental
+order_by: [ <column-name>, ... ]
+engine: <engine-type>
+partition_by: [ <column-name>, ... ]
+unique_key: [ <column-name>, ... ]
+inserts_only: [ True|False ]

Конфигурация инкрементальной таблицы

ОпцияОписаниеОбязательно?
materializedКак модель будет материализована в ClickHouse. Должно быть table, чтобы создать модель таблицы.Обязательно
unique_keyКортеж имен столбцов, которые уникально идентифицируют строки. Для получения более подробной информации об ограничениях уникальности см. здесь.Обязательно. Если не указано, измененные строки будут добавлены дважды в инкрементальную таблицу.
engineДвижок таблицы, используемый при создании таблиц. См. список поддерживаемых движков ниже.Необязательно (по умолчанию: MergeTree())
order_byКортеж имен столбцов или произвольных выражений. Это позволяет создать небольшой разреженный индекс, который помогает быстрее находить данные.Необязательно (по умолчанию: tuple())
partition_byРаздел — это логическое объединение записей в таблице по заданному критерию. Ключ раздела может быть любым выражением из столбцов таблицы.Необязательно
inserts_only(Устарело, см. стратегию материализации append). Если True, инкрементальные обновления будут вставлены непосредственно в целевую инкрементальную таблицу без создания промежуточной таблицы.Необязательно (по умолчанию: False)
incremental_strategyСтратегия, используемая для инкрементальной материализации. Поддерживаются delete+insert, append и insert_overwrite (экспериментально). Для получения дополнительной информации о стратегиях см. здесьНеобязательно (по умолчанию: 'default')
incremental_predicatesУсловие инкрементального предиката, применяемое к материализациям delete+insertНеобязательно

Снимок

Снимки dbt позволяют фиксировать изменения в изменяемой модели с течением времени. Это, в свою очередь, позволяет выполнять запросы на модели с указанием времени, где аналитики могут "вернуться в прошлое" и посмотреть на предыдущее состояние модели. Эта функциональность поддерживается коннектором ClickHouse и настраивается с использованием следующего синтаксиса:

Для получения дополнительной информации о конфигурации, ознакомьтесь со страницей справки snapshot configs.

Поддерживаемые движки таблиц

ТипПодробности
MergeTree (по умолчанию)https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/.
HDFShttps://clickhouse.com/docs/en/engines/table-engines/integrations/hdfs
MaterializedPostgreSQLhttps://clickhouse.com/docs/en/engines/table-engines/integrations/materialized-postgresql
S3https://clickhouse.com/docs/en/engines/table-engines/integrations/s3
EmbeddedRocksDBhttps://clickhouse.com/docs/en/engines/table-engines/integrations/embedded-rocksdb
Hivehttps://clickhouse.com/docs/en/engines/table-engines/integrations/hive

Экспериментальные поддерживаемые движки таблиц

ТипПодробности
Distributed Tablehttps://clickhouse.com/docs/en/engines/table-engines/special/distributed.
Dictionaryhttps://clickhouse.com/docs/en/engines/table-engines/special/dictionary

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

Поддержка макросов для работы с несколькими базами данных

dbt-clickhouse поддерживает большинство макросов для работы с несколькими базами данных, которые теперь включены в dbt-core, за исключением следующих:

  • SQL-функция split_part реализована в ClickHouse с использованием функции splitByChar. Эта функция требует использования постоянной строки в качестве разделителя, поэтому параметр delimeter, используемый для этого макроса, будет интерпретироваться как строка, а не имя столбца.
  • Аналогично, SQL-функция replace в ClickHouse требует постоянных строк для параметров old_chars и new_chars, поэтому эти параметры будут интерпретироваться как строки, а не имена столбцов при вызове этого макроса.

Установка quote_columns

Чтобы избежать предупреждения, убедитесь, что вы явно установили значение для quote_columns в вашем dbt_project.yml. См. документацию о quote_columns для получения дополнительной информации.

seeds:
+quote_columns: false #или `true`, если у вас есть заголовки столбцов csv с пробелами
0