Schedule execution of dbt project objects on Snowflake

You can use Snowflake tasks to schedule execution of a dbt project object with the EXECUTE DBT PROJECT command. From a workspace, you can quickly create and schedule a user-managed task to execute a connected dbt project object. You can also use SQL commands to create a task directly. If a workspace is connected to a dbt project object, you can view all tasks that run the EXECUTE DBT PROJECT command for that object.

Você deve criar uma tarefa que executa o comando EXECUTE DBT PROJECT no mesmo banco de dados e esquema que o objeto de projeto dbt.

Nota

Serverless tasks can’t be used to execute dbt project objects. You must specify a user-managed warehouse when creating a task that executes the EXECUTE DBT PROJECT command.

Criação de uma tarefa de dentro de um espaço de trabalho

When you create a schedule from within a workspace, Snowflake creates a user-managed task in the same database and schema as the dbt project object. The task runs with the privileges of the task owner, but task runs are not associated with a user.

Para criar uma tarefa que agenda a execução de um objeto de projeto dbt de dentro de um espaço de trabalho:

  1. From the dbt project menu on the right side of the project pane, under Scheduled runs, choose Create schedule.

  2. Na caixa de diálogo Schedule a dbt run, faça o seguinte:

    • Em Schedule name, insira um nome para a tarefa.

    • Em Frequency, escolha uma frequência que varie de Hourly a Monthly, com um qualificador at, ou selecione Custom e insira uma expressão Cron. Para obter mais informações sobre como agendar tarefas, consulte SCHEDULE = ... na referência do comando CREATE TASK.

    • Em dbt properties:

      • Em Operation, selecione o comando do dbt que você quer executar em um cronograma. Para ver a lista dos comandos permitidos, consulte Comandos e sinalizadores do dbt permitidos.

      • Em Profile, selecione um dos perfis definidos no arquivo profiles.yml do projeto dbt.

      • Em Additional flags, insira qualquer opção de linha de comando para o comando do dbt.

  3. Escolha Create.

    O Snowflake cria uma tarefa que executa o comando EXECUTE DBT PROJECT usando os parâmetros que você especifica.

Visualização de tarefa de dentro de um espaço de trabalho

From within a workspace, you can view all tasks in the database and schema that execute the connected dbt project object. You can choose a task to view its details in the object explorer, including the task definition, the run history of the task, and the task graph.

Para visualizar tarefas associadas a um objeto de projeto dbt de dentro de um espaço de trabalho:

  • No menu do projeto dbt, selecione View schedules e escolha o cronograma (tarefa) na lista.

    A tela Task Details é aberta no explorador de objetos. Os detalhes da tarefa, a instrução SQL que inclui a definição da tarefa e os privilégios concedidos no objeto da tarefa são mostrados.

    Escolha a guia Run History para visualizar o histórico de execuções da tarefa ou escolha a guia Task Graph para visualizar o relacionamento desta tarefa com outras tarefas em um gráfico de tarefas, se aplicável.

    Para obter mais informações, consulte View tasks and task graphs in Snowsight.

Criação de tarefa usando SQL

Você pode usar o comando CREATE TASK para criar tarefas que executam o comando EXECUTE DBT PROJECT. O uso do SQL para criar tarefas que executam diferentes comandos do dbt com opções de CLI distintas do dbt é uma maneira poderosa de orquestrar implantações de dbt no Snowflake.

O exemplo de SQL a seguir cria uma tarefa para um destino dbt de produção que executa um comando run do dbt em um intervalo de seis horas.

CREATE OR ALTER TASK my_database.my_schema.run_dbt_project
  WAREHOUSE = my_warehouse
  SCHEDULE = '6 hours'
AS
  EXECUTE DBT PROJECT my_database.my_schema.my_dbt_project args='run --target prod';

Depois disso, o SQL abaixo cria uma tarefa que executa o comando test do dbt após a conclusão de cada tarefa run_dbt_project anterior.

CREATE OR ALTER TASK change_this.public.test_dbt_project
        WAREHOUSE = my_warehouse
        AFTER run_dbt_project
AS
  EXECUTE DBT PROJECT my_database.my_schema.my_dbt_project args='test --target prod';