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

О команде 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, переключив тумблер в правом нижнем углу командной панели.

      Выберите переключатель «Defer to production» в правом нижнем углу командной панели, чтобы включить defer в Studio IDE.Выберите переключатель «Defer to production» в правом нижнем углу командной панели, чтобы включить defer в Studio IDE.
    • Запустите команду dbt clone из командной панели.

Ознакомьтесь с этим постом в Developer blog, чтобы узнать больше о лучших практиках и о том, когда стоит использовать dbt clone по сравнению с deferral.

Нашли ошибку?

0
Loading