О команде dbt clone
Команда dbt clone клонирует выбранные ноды из указанного состояния в целевые схемы. Эта команда использует материализацию clone:
- Если ваша платформа данных поддерживает zero-copy клонирование таблиц (Snowflake, Databricks или BigQuery), и модель существует как таблица в исходном окружении, dbt создаст её в целевом окружении как клон.
- В противном случае dbt создаст простое представление-указатель (
select * fromисходного объекта). - По умолчанию
dbt cloneне пересоздаёт уже существующие relation’ы в текущем target. Чтобы изменить это поведение, используйте флаг--full-refresh. - Вы можете указать большее количество threads, чтобы сократить время выполнения, поскольку отдельные операции клонирования не зависят друг от друга.
Команда clone полезна для:
- blue/green непрерывного деплоя (на хранилищах данных, которые поддерживают zero-copy клонирование таблиц)
- клонирования текущего production-состояния в development-схемы
- работы с инкрементальными моделями в CI-задачах dbt (на хранилищах данных, которые поддерживают zero-copy клонирование таблиц)
- тестирования изменений кода на downstream-зависимостях в вашем BI-инструменте
# clone all of my models from specified state to my target schema(s)
dbt clone --state path/to/artifacts
# clone one_specific_model of my models from specified state to my target schema(s)
dbt clone --select "one_specific_model" --state path/to/artifacts
# clone all of my models from specified state to my target schema(s) and recreate all pre-existing relations in the current target
dbt clone --state path/to/artifacts --full-refresh
# clone all of my models from specified state to my target schema(s), running up to 50 clone statements in parallel
dbt clone --state path/to/artifacts --threads 50
Когда использовать dbt clone вместо deferral?
В отличие от deferral, dbt clone требует некоторого объёма вычислений и создания дополнительных объектов в вашем хранилище данных. Во многих случаях deferral является более дешёвой и простой альтернативой dbt clone. Однако dbt clone покрывает дополнительные сценарии использования, где deferral может быть невозможен.
Например, за счёт создания реальных объектов в хранилище данных, dbt clone позволяет тестировать изменения кода на downstream-зависимостях вне dbt (например, в BI-инструменте).
В качестве другого примера, вы можете выполнить clone изменённых инкрементальных моделей как первый шаг CI-задачи в dbt, чтобы избежать дорогостоящих full-refresh сборок для хранилищ, поддерживающих zero-copy клонирование.
Клонирование в dbt
Вы можете клонировать ноды между состояниями в dbt с помощью команды dbt clone. Она доступна в Studio IDE и Cloud CLI и опирается на функциональность --defer. Подробнее о defer в dbt читайте в разделе Using defer in dbt.
-
Использование Cloud CLI — Команда
dbt cloneв Cloud CLI автоматически включает флаг--defer. Это означает, что вы можете использовать командуdbt cloneбез какой-либо дополнительной настройки. -
Использование Studio IDE — Чтобы использовать команду
dbt cloneв Studio IDE, выполните следующие шаги перед запускомdbt clone:-
Настройте Production environment и убедитесь, что есть успешно выполненный job.
-
Включите Defer to production, переключив тумблер в правом нижнем углу командной панели.
-
Запустите команду
dbt cloneиз командной панели.
-
Ознакомьтесь с этим постом в Developer blog, чтобы узнать больше о лучших практиках и о том, когда стоит использовать dbt clone по сравнению с deferral.
