EXECUTE DCM PROJECT

Exécute l’une des actions suivantes sur un projet DCM :

  • EXECUTE DCM PROJECT <name> PLAN effectue une simulation de l’exécution de DCM project pour analyser les modifications qui seraient appliquées à la cible lors d’un déploiement, mais n’applique aucune modification.

  • EXECUTE DCM PROJECT <name> DEPLOY déploie les modifications définies dans les fichiers de définition du projet sur le compte.

  • EXECUTE DCM PROJECT <name> REFRESH ALL actualise les tables dynamiques gérées par DCM project.

  • EXECUTE DCM PROJECT <name> TEST ALL teste toutes les attentes des fonctions de métrique des données associées gérées par DCM project.

  • EXECUTE DCM PROJECT <name> PREVIEW renvoie un échantillon de données des définitions actuelles spécifiées dans le chemin source de la table, vue ou table dynamique spécifiée.

Voir aussi :

CREATE DCM PROJECT, ALTER DCM PROJECT, DESCRIBE DCM PROJECT, DROP DCM PROJECT, SHOW DCM PROJECTS, SHOW DEPLOYMENTS IN DCM PROJECT

Syntaxe

EXECUTE DCM PROJECT <name>
  PLAN
  [ USING [ CONFIGURATION <config_name> ] [ (<expr>, [, <expr>, ...]) ] ]
  FROM '<source-files_path>'

EXECUTE DCM PROJECT <name>
  DEPLOY [ AS '<deployment_name_alias>' ]
  [ USING [ CONFIGURATION <name> ] [ (<expr>, [, <expr>, ...]) ] ]
  FROM '<source-files_path>'

EXECUTE DCM PROJECT <name>
  REFRESH ALL

EXECUTE DCM PROJECT <name>
  TEST ALL

EXECUTE DCM PROJECT <name>
  PREVIEW <fully_qualified_table_object_name>
  USING CONFIGURATION <config_name>
  FROM '<source_files_path>'

Paramètres requis

name

Spécifie l’identificateur du projet DCM à exécuter.

Si l’identificateur contient des espaces ou des caractères spéciaux, toute la chaîne doit être délimitée par des guillemets doubles. Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus d’informations, voir Exigences relatives à l’identificateur.

PLAN

Demande à Snowflake d’effectuer une simulation de l’exécution de|dcm-object|. En mode simulation, Snowflake analyse les modifications qui seraient appliquées à la cible lors d’un déploiement, mais n’applique aucune modification.

DEPLOY [ AS 'deployment_name_alias' ]

Déploie les modifications définies dans les fichiers de définition du projet sur le compte ; spécifie éventuellement un alias pour le déploiement.

FROM 'source_files_path'

Indique le répertoire qui contient les fichiers sources de DCM project. Le répertoire doit contenir un fichier manifeste et au moins un fichier de définition dans /sources/definitions/. Le fichier manifeste fournit les valeurs de modélisation au cas où une configuration a été spécifiée.

REFRESH ALL

Actualise toutes les tables dynamiques actuellement gérées par DCM project.

TEST ALL

Vérifie toutes les contraintes de qualité des données associées aux tables, aux tables dynamiques ou aux vues actuellement gérées par DCM project.

PREVIEW fully_qualified_table_object_name

Renvoie un échantillon de données des définitions actuelles spécifiées dans le chemin source pour la table, la vue ou la table dynamique spécifiée, indépendamment de tout état déployé.

Paramètres facultatifs

USING CONFIGURATION config_name

Spécifie la configuration à utiliser. Cela vous permet de personnaliser les déploiements pour différents environnements, tels que le développement, la mise en zone de préparation ou la production, sans utiliser différents fichiers de définition de projet.

Si le nom de la configuration n’est pas tout en majuscules, placez-le entre guillemets doubles.

USING ( expr [, expr , ... ] )

Spécifie éventuellement les valeurs des variables de modèle. L’utilisation de cette option remplace toutes les valeurs par défaut ou de configuration pour cette variable spécifique. L’expression unique doit se présenter sous la forme suivante : <variable_name> => <variable_value>. Pour les listes, utilisez le format suivant : <variable_name> => [<value1>, <value2>, ...]. Par exemple : wh_size => 'MEDIUM' or teams => ['TEAM_A', 'TEAM_B'].

Cela vous permet de personnaliser les déploiements pour différents environnements, tels que le développement, la mise en zone de préparation ou la production, sans utiliser différents fichiers de définition de projet.

Exigences en matière de contrôle d’accès

Un rôle utilisé pour exécuter cette opération doit au minimum disposer des privilèges suivants :

Privilège

Objet

Remarques

OWNERSHIP

Projet DCM

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

Pour effectuer une opération sur un objet dans un schéma, il est nécessaire de disposer d’au moins un privilège sur la base de données parente et d’au moins un privilège sur le schéma parent.

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.

Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

Sortie

Après l’exécution de DCM project, cette commande renvoie la sortie suivante en fonction de la variation :

  • PLAN et DEPLOY : Une seule ligne contenant un objet JSON avec le journal des modifications.

  • PREVIEW : Un jeu de résultats.

  • REFRESH ALL : Une seule ligne contenant un objet JSON qui contient la réponse complète.

  • TEST ALL : Une seule ligne contenant un objet JSON qui contient la réponse complète.

Sortie PLAN et DEPLOY

Note

Au cours de la phase de prévisualisation, le format de sortie exact peut être sujet à changement.

La sortie du plan standard contient les informations suivantes sur l’exécution du plan au format JSON :

{
  "version": 2,
  "metadata": {
    "timestamp": <timestamp>,
    "query_id": <query_id>,
    "project_name": <project_name>,
    "user": <user>,
    "role_name": <role_name>,
    "command": <command>
  },
  "changeset": [
    {
      "type": <type>,
      "object_id": {
        "domain": <domain>,
        "name": <name>,
        "fqn": <fqn>,
        "database": <database>,
        "schema": <schema>
      },
      "changes": [
        {
          "kind": <kind>,
          "attribute_name": <attribute_name>,
          "value": <value>,
          "changes": [
            {
              "kind": <kind>,
              "attribute_name": <attribute_name>,
              "value": <value>
            }
          ]
        }
      ]
    }
  ]
}

Propriété

Description

version

Version du schéma du format de sortie. La version 2 est la dernière version et la seule version prise en charge.

metadata

Informations contextuelles sur l’exécution.

metadata.timestamp

Horodatage ISO 8601 du moment où la commande a été exécutée.

metadata.query_id

Identificateur unique de la requête qui a produit ce plan.

metadata.project_name

Nom complet de l’objet de projet DCM.

metadata.user

Nom de l’utilisateur qui a exécuté la commande.

metadata.role_name

Rôle actif utilisé pour exécuter la commande.

metadata.command

La commande qui a été exécutée. PLAN ou DEPLOY.

changeset

Un tableau d’entrées de modifications. Chaque entrée représente un objet qui serait ou a été créé, modifié ou supprimé. Un tableau vide indique que les définitions du projet sont déjà synchronisées avec le compte.

changeset[].type

L’action planifiée pour l’objet. Valeurs possibles : CREATE, ALTER, DROP.

changeset[].object_id

Identifie l’objet cible.

changeset[].object_id.domain

Le type d’objet Snowflake.

changeset[].object_id.name

Nom de l’objet.

changeset[].object_id.fqn

Nom complet de l’objet.

changeset[].object_id.database

Base de données contenant l’objet. Omis pour les objets au niveau du compte.

changeset[].object_id.schema

Schéma contenant l’objet. Omis pour les objets au niveau de la base de données et au niveau du compte.

changeset[].changes

Un tableau de descripteurs de changements détaillant les modifications d’attributs spécifiques.

changeset[].changes[].kind

Le type de modification. Valeurs possibles : set, changed, unset, nested, collection. La valeur de kind détermine les clés restantes dans l’objet.

changeset[].changes[].attribute_name

Nom de l’attribut en cours de définition ou de modification. Présent lorsque kind est set, changed ou unset.

changeset[].changes[].value

La nouvelle valeur de l’attribut. Présent lorsque kind est set ou changed.

changeset[].changes[].prev_value

Valeur précédente de l’attribut avant la modification. Présente uniquement lorsque kind est changed.

changeset[].changes[].collection_name

Nom de la collection en cours de modification (par exemple, columns, constraints, privileges, expectations). Présente uniquement lorsque kind est collection.

changeset[].changes[].id_label

Étiquette utilisée pour identifier les éléments de la collection (par exemple, name). Présente uniquement sur certaines collections.

changeset[].changes[].changes

Un tableau imbriqué de descripteurs d’éléments de collection. Présente uniquement lorsque kind est collection.

changeset[].changes[].changes[].kind

Type de modification apportée à l’élément de la collection. Valeurs possibles : added, removed, modified.

changeset[].changes[].changes[].item_id

Identifie l’élément dans la collection. Peut être une chaîne ou un objet, selon le type de collection.

changeset[].changes[].changes[].changes

Un tableau de descripteurs de modifications supplémentaires pour cet élément. Présent pour les éléments added et modified. Toujours absent pour les éléments removed.

Exemple de sortie de plan :

{
  "version": 2,
  "metadata": {
    "timestamp": <timestamp>,
    "query_id": <query_id>,
    "project_name": <project_name>,
    "user": <user>,
    "role_name": <role_name>,
    "command": <command>
  },
  "changeset": [
    {
      "type": "CREATE",
      "object_id": {
        "domain": "TABLE",
        "name": "CUSTOMER_SUMMARY",
        "fqn": "MY_DB.ANALYTICS.CUSTOMER_SUMMARY",
        "database": "MY_DB",
        "schema": "ANALYTICS"
      },
      "changes": [
        {
          "kind": "set",
          "attribute_name": "warehouse_size",
          "value": "XSMALL"
        },
        {
          "kind": "set",
          "attribute_name": "query",
          "value": "SELECT customer_id, SUM(amount) AS total FROM orders GROUP BY customer_id"
        }
      ]
    },
    {
      "type": "ALTER",
      "object_id": {
        "domain": "DYNAMIC_TABLE",
        "name": "ORDER_DETAILS",
        "fqn": "MY_DB.ANALYTICS.ORDER_DETAILS",
        "database": "MY_DB",
        "schema": "ANALYTICS"
      },
      "changes": [
        {
          "kind": "changed",
          "attribute_name": "warehouse_size",
          "value": "SMALL",
          "prev_value": "XSMALL"
        },
        {
          "kind": "collection",
          "collection_name": "columns",
          "id_label": "name",
          "changes": [
            {
              "kind": "added",
              "item_id": "DISCOUNT_AMOUNT",
              "changes": [
                {
                  "kind": "set",
                  "attribute_name": "data_type",
                  "value": "NUMBER(10,2)"
                }
              ]
            },
            {
              "kind": "modified",
              "item_id": "ORDER_STATUS",
              "changes": [
                {
                  "kind": "changed",
                  "attribute_name": "data_type",
                  "value": "VARCHAR(50)",
                  "prev_value": "VARCHAR(20)"
                }
              ]
            },
            {
              "kind": "removed",
              "item_id": "LEGACY_FLAG"
            }
          ]
        }
      ]
    },
    {
      "type": "DROP",
      "object_id": {
        "domain": "VIEW",
        "name": "OLD_REPORT_VIEW",
        "fqn": "MY_DB.ANALYTICS.OLD_REPORT_VIEW",
        "database": "MY_DB",
        "schema": "ANALYTICS"
      },
      "changes": []
    }
  ]
}

Sortie REFRESH ALL

La sortie JSON contient les résultats de l’opération d’actualisation de la table dynamique au format suivant :

{
  "dts_refresh_result": {
    "refreshed_tables": [
      {
        "table_name": <table_name>,
        "statistics": {
          "inserted_rows": <inserted_rows>,
          "deleted_rows": <deleted_rows>
        },
        "data_timestamp": <data_timestamp>
      }
    ]
  }
}

Propriété

Description

dts_refresh_result

Contient les résultats de l’opération d’actualisation de la table dynamique.

refreshed_tables[]

Un tableau d’entrées, une pour chaque table dynamique actualisée.

table_name

Nom complet de la table dynamique qui a été actualisée.

statistics

Actualiser les statistiques de la table.

inserted_rows

Nombre de lignes insérées lors de l’actualisation.

deleted_rows

Nombre de lignes supprimées lors de l’actualisation.

data_timestamp

Horodatage ISO 8601 représentant le niveau d’actualisation ponctuel des données après l’actualisation.

Un exemple de sortie JSON pour l’actualisation d’une table dynamique :

{
  "dts_refresh_result": {
    "refreshed_tables": [
      {
        "table_name": "db.schema.my_dynamic_table",
        "statistics": {
          "inserted_rows": 150,
          "deleted_rows": 30
        },
        "data_timestamp": "2026-03-16T12:00:00.000Z"
      }
    ]
  }
}

Sortie TEST ALL

La sortie TEST contient l’état global et les attentes avec leurs valeurs au format suivant :

Note

Au cours de la phase de prévisualisation, le format de sortie exact peut être sujet à changement.

{
  "status": <status>,
  "expectations": [
    {
      "table_name": <table_name>,
      "metric_database": <metric_database>,
      "metric_schema": <metric_schema>,
      "metric_name": <metric_name>,
      "expectation_name": <expectation_name>,
      "expectation_expression": <expectation_expression>,
      "value": <value>,
      "expectation_violated": <expectation_violated>,
      "column_names": <column_names>
    }
  ]
}

Propriété

Description

status

Résultat global de l’exécution du test. Valeurs possibles :SUCCESSFUL (toutes les attentes sont satisfaites),``FAILED`` (une ou plusieurs attentes ne sont pas respectées).

expectations[]

Tableau de résultats des attentes, un pour chaque attente en matière de qualité des données évaluée.

table_name

Nom complet de la table ou de la vue sur laquelle l’attente a été évaluée.

metric_database

Base de données contenant la fonction de métrique des données.

metric_schema

Schéma contenant la fonction de métrique des données.

metric_name

Nom de la fonction de métrique des données (par exemple, NULL_COUNT, MIN, UNIQUE_COUNT).

expectation_name

Nom de l’attente tel que défini dans le projet.

expectation_expression

Expression booléenne par rapport à laquelle la valeur de la métrique est évaluée (par exemple, value = 0,``value >= 0``).

value

Résultat de l’évaluation de la fonction de métrique des données. Présente uniquement lorsque expectation_violated est``false``.

expectation_violated

Si l’attente a été respectée ou non. true si la valeur de la métrique ne satisfait pas l’expression d’attente ; false dans le cas contraire.

column_names

Tableau de noms de colonnes sur lesquels la fonction de métrique des données a été évaluée.

Un exemple de sortie JSON pour un test de qualité des données :

{
  "status": "FAILED",
  "expectations": [
    {
      "table_name": "db.schema.my_table",
      "metric_database": "SNOWFLAKE",
      "metric_schema": "CORE",
      "metric_name": "NULL_COUNT",
      "expectation_name": "no_nulls_in_id",
      "expectation_expression": "value = 0",
      "value": 0,
      "expectation_violated": false,
      "column_names": ["ID"]
    },
    {
      "table_name": "db.schema.my_table",
      "metric_database": "SNOWFLAKE",
      "metric_schema": "CORE",
      "metric_name": "UNIQUE_COUNT",
      "expectation_name": "unique_id_check",
      "expectation_expression": "value >= 100",
      "value": null,
      "expectation_violated": true,
      "column_names": ["ID"]
    }
  ]
}

Notes sur l’utilisation

Lors de l’exécution d’un DCM project avec EXECUTE DCM PROJECT PLAN, la sortie de la commande est identique à celle du déploiement réel. La différence est qu’aucune modification n’est appliquée au compte concerné. Cette fonctionnalité vous permet de vérifier si les fichiers de définition générés respectent la syntaxe requise, quelles modifications seraient appliquées au compte, et si le rôle de propriétaire du projet dispose des privilèges nécessaires pour appliquer ces modifications.

Pour éviter les modifications involontaires et détecter les erreurs, exécutez toujours EXECUTE DCM PROJECT PLAN avant de déployer un DCM project.

Prise en charge des variables de modèle

Les variables de modèle permettent de choisir de manière dynamique le contenu des fichiers de définitions paramétrés pendant l’exécution DCM project. Vous pouvez utiliser les variables de modèle des manières suivantes :

Consultez la section Exemples de variables de modèle pour obtenir des exemples.

Exemples

Exemples de base

Exécutez un DCM project en mode PLAN pour valider les modifications apportées à un projet sans les appliquer :

EXECUTE DCM PROJECT my_project
  PLAN
  FROM '@my_database.my_schema.my_stage/my_project';

Exécutez un projet DCM en mode DEPLOY (pour appliquer les modifications) pour spécifier un alias de déploiement et une configuration nommée PROD :

EXECUTE DCM PROJECT my_project
  DEPLOY AS "my_update"
  USING CONFIGURATION PROD
  FROM '@my_database.my_schema.my_stage/my_project';

Exemples de variables de modèle

Les exemples suivants montrent comment vous pouvez spécifier la valeur des variables de modèle dans une instruction EXECUTE DCM PROJECT.

Remplacer la variable de modèle définie dans le fichier manifeste du projet DCM

  1. Définir une variable de modèle nommée desc dans le fichier manifeste :

    manifest_version: 2
    type: DCM_PROJECT
    default_target: DCM_DEV
    targets:
      DCM_DEV:
        desc: "created by hello world project"
    
  2. Créer un fichier de définition qui utilise la variable de modèle :

    DEFINE DATABASE NEW_DB;
    DEFINE TABLE NEW_DB.PUBLIC.TBL (ID INT) COMMENT = '{{desc}}';
    
  3. Appeler la commande EXECUTE DCM PROJECT en mode DEPLOY, et spécifier une valeur pour la variable desc pour remplacer sa valeur par défaut dans le manifeste :

    EXECUTE DCM PROJECT MY_PROJECT DEPLOY
      USING CONFIGURATION FIRST_CONFIG (desc => 'This object is mine')
      FROM '/my/project/source';
    

Indiquer une valeur pour une variable de modèle non définie dans le fichier manifeste

  1. Créer un fichier de définition avec les commandes souhaitées :

    DEFINE DATABASE NEW_DB;
    DEFINE TABLE NEW_DB.PUBLIC.TBL (ID INT) COMMENT = '{{desc_new}}';
    
  2. Appeler la commande EXECUTE DCM PROJECT, et spécifier une valeur pour la variable desc_new :

    EXECUTE DCM PROJECT MY_PROJECT (desc_new => 'This object is mine');