![Планирование и оркестрация облачных задач dbt Cloud с помощью Prefect Планирование и оркестрация облачных задач dbt Cloud с помощью Prefect](https://nuancesprog.ru/wp-content/uploads/2023/05/dbt-pattern-696x392.png)
![](https://cdn-images-1.medium.com/max/1000/0*D8a3atsnUzT02Pyv.png)
Настройка dbt Cloud
Сначала нужно извлечь ID аккаунта dbt Cloud и создать ключ API. Для этого зайдите в Account Settings:
![](https://cdn-images-1.medium.com/max/1000/0*t7RbdM-WghbvbJwB.png)
Теперь в URL вы должны увидеть ID аккаунта. Скопируйте его и вставьте в строку DBT_CLOUD_ACCOUNT_ID
файла .env
. Далее с той же страницы Account Settings перейдите в раздел API Access:
![](https://cdn-images-1.medium.com/max/1000/0*VzZAQlxvDgKci7kT.png)
Создайте и скопируйте ключ API:
![](https://cdn-images-1.medium.com/max/1000/0*2N8YAi8DbDXieyD-.png)
Создание программного блока
Вставьте этот ключ в строку DBT_CLOUD_API_KEY
файла .env
. Теперь этот файл должен содержать следующие две переменных среды:
DBT_CLOUD_API_KEY=xxx
DBT_CLOUD_ACCOUNT_ID=12345
Файл .env
нужен, только если вы хотите создать блок DbtCloudCredentials
программно. Проще всего сделать это, следуя рекомендациям из серии постов How to Build a Modular Data Stack — Data Platform with Prefect, dbt and Snowflake и используя репозиторий prefect-dataplatform. Вы можете непосредственно использовать один из автоматически развертываемых скриптов, например настройку локального выполнения, показанную в скрипте deploy_locally.py.
Создание блока из UI
В качестве альтернативы можно использовать ключ API dbt Cloud и ID аккаунта для настройки блока из Prefect UI:
![](https://cdn-images-1.medium.com/max/1000/0*nEEvOjq5Fa_OAQmC.png)
После указания учетных данных нужно настроить проект dbt Cloud. Если у вас такой уже есть, можете следующий раздел пропустить.
Настройка проекта dbt Cloud
Сначала перейдите в аккаунт dbt Cloud и создайте новый проект:
![](https://cdn-images-1.medium.com/max/1000/0*WyhbH3iD0v6eCsKr.png)
Следуйте приведенной инструкции и заполните учетные данные вашего хранилища:
![](https://cdn-images-1.medium.com/max/1000/0*jfpwUf15_GlpwqeT.png)
В самом конце нужно будет выбрать ваш репозиторий Git:
![](https://cdn-images-1.medium.com/max/1000/0*lppywLRIyDnWUf3s.png)
Затем можно будет начать разрабатывать IDE:
![](https://cdn-images-1.medium.com/max/1000/0*7YBVKJYEY9q2QWzX.png)
Выполнение простой команды dbt compile
поможет убедиться, что все работает нормально:
![](https://cdn-images-1.medium.com/max/1000/0*GBF8MlYyJ9jhEeXw.png)
Создание среды dbt
Прежде чем мы сможем создавать задачи, необходимо настроить среду.
![](https://cdn-images-1.medium.com/max/1000/0*AP_nTOZu-L8mh0Jl.png)
Создаем среду:
![](https://cdn-images-1.medium.com/max/1000/0*QyBekYr2tznAupEb.png)
Можете назвать ее в соответствии со своим dev/prod хранилищем Snowflake или схемой. Также можете связать ее с ветвью Git, соответствующей вашей dev/prod среде:
![](https://cdn-images-1.medium.com/max/1000/0*Q23RgXR8RprZz6q5.png)
После создания среды dbt Cloud предложит создать задачу:
![](https://cdn-images-1.medium.com/max/1000/0*WhGgep_snUUMDxYt.png)
Создание задачи dbt
Следуйте инструкциям “Create new Job” и не забудьте отключить планирование, чтобы вы могли оркестрировать эту задачу с помощью Prefect:
![](https://cdn-images-1.medium.com/max/1000/0*YjNRz5hPE5AqnZnR.png)
Копирование ID задачи из URL
URL содержит ID задачи, который потребуется для ее активации:
![](https://cdn-images-1.medium.com/max/1000/0*mSrJ9BV85pDNCsDO.png)
Выполнение задачи dbt Cloud с помощью Prefect
Теперь можно активировать задачу dbt Cloud с помощью Prefect. Вот простой поток, который загружает блок учетных данных (безопасно сохраняя ID аккаунта dbt Cloud и ключ API) и активирует выполнение для ID этой задачи (скорректируйте на ваш в строке 10):
from prefect import flow
from prefect_dbt.cloud import DbtCloudCredentials
from prefect_dbt.cloud.jobs import trigger_dbt_cloud_job_run_and_wait_for_completion
@flow
def run_dbt_job_flow():
trigger_dbt_cloud_job_run_and_wait_for_completion(
dbt_cloud_credentials=DbtCloudCredentials.load("default"), job_id=154217
)
if __name__ == "__main__":
run_dbt_job_flow()
После выполнения этого скрипта Python вы сможете отслеживать логи из терминала:
![](https://cdn-images-1.medium.com/max/1000/0*XOXCtBQHbNFnjr8d.png)
Или из dbt Cloud:
![](https://cdn-images-1.medium.com/max/1000/0*i4gDLXeJZAywwNg-.png)
![](https://cdn-images-1.medium.com/max/1000/0*LfQIzQ2Wv6DkRVV5.png)
Или из Prefect Cloud UI:
![](https://cdn-images-1.medium.com/max/1000/0*hO2fDKB_zUxOoEJk.png)
Логи в Prefect Cloud UI упрощают переход из Prefect в логи, находящиеся в информационной панели dbt Cloud:
![](https://cdn-images-1.medium.com/max/1000/0*T64QcGv-Pm4jRhEc.png)
Это было короткое ознакомление о том, как настраивать задачу dbt Cloud и оркестрировать ее с помощью блоков Prefect и коллекции prefect-dbt.
Читайте также:
- Запуск DBT в Azure Functions с помощью Snowflake
- Запускаем Rocket REST API на AWS
- Легко и быстро: автоматизация развертывания AWS EC2 с GitHub Actions и Docker Hub
Читайте нас в Telegram, VK и Дзен
Перевод статьи Anna Geller: Schedule & orchestrate dbt Cloud jobs with Prefect