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.

Vous devez créer une tâche qui exécute la commande EXECUTE DBT PROJECT dans la même base de données et le même schéma que l’objet de projet dbt.

Note

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.

Créer une tâche à partir d’un espace de travail

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.

Pour créer une tâche qui planifie l’exécution d’un objet de projet dbt à partir d’un espace de travail :

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

  2. Dans la boîte de dialogue Schedule a dbt run, procédez comme suit :

    • Pour le Schedule name, saisissez un nom pour la tâche.

    • Pour la Frequency, choisissez une fréquence comprise entre Hourly et Monthly avec un qualificatif at, ou choisissez Custom et saisissez une expression Cron. Pour plus d’informations sur la planification des tâches, voir SCHEDULE = ... dans la référence de commande CREATE TASK.

    • Sous dbt properties :

      • Pour Operation, sélectionnez la commande dbt que vous souhaitez exécuter sur une planification. Pour une liste des commandes prises en charge, voir Commandes et indicateurs dbt pris en charge.

      • Pour Profile, sélectionnez un des profils définis dans le fichier profiles.yml de votre projet dbt.

      • Pour Additional flags, saisissez toute autre option de ligne de commande pour la commande dbt.

  3. Choisissez Create.

    Snowflake crée une tâche qui exécute une commande EXECUTE DBT PROJECT en utilisant les paramètres que vous spécifiez.

Visualisation d’une tâche à partir d’un espace de travail

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.

Pour visualiser les tâches associées à un objet de projet dbt à partir d’un espace de travail :

  • Dans le menu du projet dbt, sélectionnez View schedules puis choisissez votre planification (tâche) dans la liste.

    Les Task Details pour la tâche s’ouvrent dans l’explorateur d’objets. Détails de la tâche, l’instruction SQL qui comprend la définition de la tâche et les privilèges accordés sur l’objet de tâche sont affichés.

    Choisissez l’onglet Run History pour voir l’historique de l’exécution de la tâche, ou sélectionnez l’onglet Task Graph pour voir la relation de cette tâche avec d’autres tâches dans un graphique des tâches, le cas échéant.

    Pour plus d’informations, consultez View tasks and task graphs in Snowsight.

Créer une tâche en utilisant SQL

Vous pouvez utiliser la commande CREATE TASK pour créer des tâches qui exécutent la commande EXECUTE DBT PROJECT. L’utilisation de SQL pour créer des tâches qui exécutent différentes commandes dbt avec différentes options d’CLI dbt fournit un moyen puissant d’orchestrer des déploiements dbt dans Snowflake.

La requête SQL suivante crée une tâche pour une cible de dbt de production qui exécute une commande dbt run sur un intervalle de six heures.

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';

Ensuite, la requête SQL suivante crée une tâche qui exécute la commande dbt test après chaque achèvement de la tâche run_dbt_project précédente.

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';