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

О команде dbt clone

Команда dbt clone клонирует выбранные узлы из указанного состояния в целевую схему(ы). Эта команда использует материализацию clone:

  • Если ваша платформа данных поддерживает клонирование таблиц без копирования (Snowflake, Databricks или BigQuery), и эта модель существует как таблица в исходной среде, dbt создаст её в вашей целевой среде как клон.
  • В противном случае, dbt создаст простой указатель в виде представления (select * from исходного объекта).
  • По умолчанию, dbt clone не будет воссоздавать уже существующие отношения в текущей цели. Чтобы переопределить это, используйте флаг --full-refresh.
  • Вы можете захотеть указать большее количество потоков, чтобы уменьшить время выполнения, так как отдельные команды клонирования независимы друг от друга.

Команда clone полезна для:

  • непрерывного развертывания blue/green (в хранилищах данных, поддерживающих клонирование таблиц без копирования)
  • клонирования текущего производственного состояния в схему(ы) разработки
  • обработки инкрементных моделей в заданиях CI dbt Cloud (в хранилищах данных, поддерживающих клонирование таблиц без копирования)
  • тестирования изменений кода на зависимостях в вашем BI-инструменте
# клонировать все мои модели из указанного состояния в мою целевую схему(ы)
dbt clone --state path/to/artifacts

# клонировать одну_конкретную_модель из указанного состояния в мою целевую схему(ы)
dbt clone --select "one_specific_model" --state path/to/artifacts

# клонировать все мои модели из указанного состояния в мою целевую схему(ы) и воссоздать все уже существующие отношения в текущей цели
dbt clone --state path/to/artifacts --full-refresh

# клонировать все мои модели из указанного состояния в мою целевую схему(ы), выполняя до 50 команд клонирования параллельно
dbt clone --state path/to/artifacts --threads 50

Когда использовать dbt clone вместо отложенного выполнения?

В отличие от отложенного выполнения, dbt clone требует некоторого вычислительного ресурса и создания дополнительных объектов в вашем хранилище данных. Во многих случаях отложенное выполнение является более дешевым и простым альтернативным вариантом dbt clone. Однако, dbt clone охватывает дополнительные случаи использования, где отложенное выполнение может быть невозможным.

Например, создавая реальные объекты в хранилище данных, dbt clone позволяет вам тестировать изменения кода на зависимостях вне dbt (например, в BI-инструменте).

В качестве другого примера, вы можете клонировать ваши модифицированные инкрементные модели как первый шаг вашего задания CI в dbt Cloud, чтобы избежать дорогостоящих сборок full-refresh для хранилищ, поддерживающих клонирование без копирования.

Клонирование в dbt Cloud

Вы можете клонировать узлы между состояниями в dbt Cloud, используя команду dbt clone. Это доступно в dbt Cloud IDE и dbt Cloud CLI и полагается на функцию --defer. Для получения более подробной информации о defer в dbt Cloud, прочитайте Использование defer в dbt Cloud.

  • Использование dbt Cloud CLI — Команда dbt clone в dbt Cloud CLI автоматически включает флаг --defer. Это означает, что вы можете использовать команду dbt clone без дополнительной настройки.

  • Использование dbt Cloud IDE — Чтобы использовать команду dbt clone в dbt Cloud IDE, выполните следующие шаги перед запуском команды dbt clone:

    • Настройте вашу Производственную среду и выполните успешный запуск задания.
    • Включите Отложить до производства, переключив тумблер в нижнем правом углу командной панели.
      Выберите переключатель 'Отложить до производства' в нижнем правом углу командной панели, чтобы включить defer в dbt Cloud IDE.Выберите переключатель 'Отложить до производства' в нижнем правом углу командной панели, чтобы включить defer в dbt Cloud IDE.
    • Запустите команду dbt clone из командной панели.

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

0