Déployer et gérer DCM Projects

Cette rubrique décrit comment créer et déployer DCM Projects pour gérer les environnements Snowflake, y compris en tant que comptes.

La gestion d’un DCM project comprend les étapes suivantes :

  1. Préparer votre compte Snowflake pour un DCM project.

  2. Définir la configuration du projet et les objets dans les fichiers de projet.

  3. Créer un objet DCM Projects.

  4. Planifier pour prévisualiser les modifications proposées avant le déploiement.

  5. Déployer le projet.

  6. Maintenir le projet en suivant, en mettant à jour et en répétant le processus, si nécessaire.

Vous pouvez déployer en continu des modifications incrémentielles dans votre projet, ainsi que des modifications d’infrastructure de compte à grande échelle.

Il est recommandé de déployer en continu des modifications incrémentielles et des ajouts à votre projet, plutôt que de passer de 0 à 100 modifications d’infrastructure de compte à grande échelle dans un seul déploiement.

Préparer un DCM project

Pour commencer avec DCM Projects, votre compte Snowflake doit remplir les conditions préalables suivantes :

  • Une base de données et un schéma dans lesquels vous pouvez créer votre objet DCM Projects

  • Un rôle disposant des privilèges nécessaires pour créer un objet DCM Projects et exécuter des requêtes sur un entrepôt

  • Pour la Snowflake CLI, un rôle disposant des privilèges nécessaires pour créer une zone de préparation temporaire

Cette section décrit les tâches que vous devez effectuer pour préparer l’installation de DCM Projects :

Note

Le référentiel DCM snowflake-labs est mis à jour en continu avec des ressources pour vous aider à démarrer.

  • Démarrages rapides et projets de démonstration : Un référentiel que vous pouvez cloner dans un espace de travail Snowflake ou un dossier local pour tester les commandes DCM Projects et explorer les capacités DCM Projects.

  • Exemples d’actions et de workflows GitHub : modèles de pipeline CI/CD utilisant la CLI Snowflake pour tester et déployer des projets DCM.

Outils d’interface

Vous disposez des options d’interface suivantes pour DCM Projects.

Outil d’interface

Mieux adapté à

Snowsight

Un espace de travail dans Snowsight est un IDE Cloud natif Snowflake disponible dans votre compte.

  • Créez ou importez facilement les fichiers de définition DCM via l’UI.

  • Connectez-vous à un référentiel Git pour récupérer et envoyer des modifications.

  • Examinez, modifiez et déboguez les fichiers de définition.

  • Exécutez les commandes DCM PLAN et DEPLOY à l’aide de l’UI d’espace de travail.

  • Parcourez le catalogue de bases de données pour voir les objets DCM project et leur configuration, les objets gérés et l’historique de déploiement.

  • Sélectionnez un profil cible pour utiliser automatiquement la configuration de DCM project et de modèle associée.

IDE local avec la CLI Snowflake

L’interface la plus familière et la plus personnalisée pour les ingénieurs logiciels.

  • Créez et modifiez des fichiers de définition localement.

  • Connectez-vous à un référentiel Git pour récupérer et envoyer des modifications.

  • Commandes Snowflake CLI concises avec contexte de répertoire et indicateurs facultatifs.

  • Sortie au format enrichi et option pour enregistrer en tant que fichier .json.

  • Option pour exploiter la CLI Cortex Code pour le développement agentique ou le développement assisté.

  • Voir Snowflake CLI pour DCM Projects pour des informations sur l’installation et l’exécution de la Snowflake CLI dans votre IDE local.

Cortex Code

Un outil AI agentique pour Snowflake. Pour plus d’informations, voir Cortex Code pour DCM Projects.

  • Création assistée par l’AI ou agentique de fichiers de définition locaux.

  • Validation et débogage de code assistés par l’AI ou agentiques en exécutant une analyse statique et les commandes DCM PLAN.

Commandes SQL

  • Exécutez des commandes SQL à partir de Snowflake CLI REPL, des espaces de travail, des notebooks ou des feuilles de calcul.

  • Personnalisez les commandes avec des arguments supplémentaires.

  • Les mêmes commandes fonctionnent sur toutes les interfaces SQL Snowflake.

Cortex Code pour DCM Projects

Cortex Code est un outil AI agentique pour Snowflake. Lorsque la fonctionnalité DCM est activée, Cortex Code peut créer, migrer, déboguer et déployer DCM Projects de manière autonome. Il peut également travailler à vos côtés étape par étape.

Note

Cortex Code avec la fonctionnalité DCM est actuellement disponible via la CLI Cortex Code uniquement. Il n’est pas disponible dans Snowsight Workspaces.

La fonctionnalité DCM Cortex Code permet d’effectuer les opérations suivantes :

  • Échelonner un nouveau DCM project de zéro, y compris le fichier manifeste, la structure des dossiers et les fichiers de définition.

  • Créer et modifier des instructions DEFINE, des modèles Jinja et des macros.

  • Exécuter des commandes PLAN, DEPLOY, REFRESH, TEST et PREVIEW.

  • Interpréter la sortie du plan, diagnostiquer les défaillances et suggérer des correctifs.

  • Télécharger et inspecter les artefacts de déploiement.

  • Naviguer et expliquer un DCM project existant.

Pour commencer avec la fonctionnalité DCM Cortex Code, procédez comme suit :

  1. Installez la CLI Cortex Code comme décrit dans Installation de Cortex Code.

  2. Démarrez Cortex Code sur votre terminal.

  3. Utilisez la référence de la compétence $dcm ou mentionnez DCM dans votre invite en langage naturel pour interagir avec votre DCM Projects de manière conversationnelle.

Par exemple :

  • « Créer un nouveau projet DCM pour notre pipeline d’analyses »

  • « Planifier mon projet par rapport à la cible PROD »

  • « Pourquoi mon dernier plan a-t-il échoué ? »

  • « Ajouter une nouvelle définition de table dynamique pour les dépenses des clients »

Snowflake CLI pour DCM Projects

Snowflake CLI est une interface de ligne de commande pour Snowflake. Il s’agit d’un outil que vous pouvez utiliser pour interagir avec votre compte Snowflake depuis votre IDE local.

  1. Les projets DCM nécessitent la version 3.16 ou supérieure de Snowflake CLI. Installez ou mettez à niveau la Snowflake CLI comme décrit dans Installation de Snowflake CLI.

  2. Configurez votre connexion à votre compte Snowflake, comme décrit dans Configuration de la CLI Snowflake et connexion à Snowflake. Confirmez que vous disposez d’une connexion fonctionnelle :

    snow connection test
    
  3. Accédez au répertoire local de votre clone de référentiel Git. Par exemple :

    cd ./Quickstarts/DCM_Quickstart_1
    
  4. Consultez les commandes DCM Snowflake CLI disponibles :

    snow dcm --help
    

Intégration Git

Connectez-vous au référentiel Git dans lequel vos fichiers de définition DCM project sont stockés.

  1. Créez un nouvel espace de travail à partir d’un référentiel Git.

  2. Créez ou sélectionnez une branche Git pour les modifications que vous prévoyez d’apporter.

    Snowflake clone les fichiers de cette branche dans votre éditeur d’espace de travail.

  3. Accédez au dossier dans lequel se trouvent vos fichiers de définition DCM project ou dans lequel vous souhaitez les créer.

Créer une DCM project

Rôles et privilèges requis

Le rôle de l’utilisateur qui crée un objet DCM project doit disposer des rôles et privilèges suivants :

  • Le privilège CREATE DCM PROJECT ON SCHEMA :

    GRANT CREATE DCM PROJECT ON SCHEMA <schema_name> TO ROLE <role_name>;
    

Créer une DCM project

Créez un objet DCM project à l’aide de l’une des options suivantes.

CREATE [OR REPLACE] DCM PROJECT [IF NOT EXISTS] <my_project>
[COMMENT = 'my comment'];

Contrôle d’accès et privilèges de rôle

Vous pouvez définir le contrôle d’accès basé sur les rôles (RBAC) de l’objet DCM project au niveau du schéma sur les privilèges READ, MONITOR ou OWNERSHIP.

Ces privilèges sont indépendants du contrôle d’accès aux fichiers de définitions stockés dans un espace de travail, une zone de préparation ou un référentiel.

Privilège

Description

Opérations autorisées

READ

  • Indique si l’objet DCM project existe.

  • Répertorie les objets et les autorisations déployés par DCM project, qui sont visibles pour le rôle de l’utilisateur.

    Cela signifie que vous avez besoin de READ sur DCM project et de READ sur les objets eux-mêmes.

  • SHOW DCM PROJECTS LIKE “%project”

  • DESCRIBE DCM PROJECT <project>

  • SHOW ENTITIES IN DCM PROJECT <project>

MONITOR

  • Permet d’accéder à l’historique complet du déploiement, y compris à tous les artefacts.

  • Donne au rôle la possibilité d’analyser, de déboguer ou d’auditer les déploiements de production sans la possibilité de déployer directement les modifications.

  • Tous les privilèges READ

  • DESCRIBE DCM PROJECT <project> (avec la source et le chemin de déploiement du dernier déploiement)

  • INFORMATION_SCHEMA.DCM_DEPLOYMENT_HISTORY (project_name => “db.schema.project”)

  • SHOW DEPLOYMENTS IN DCM PROJECT <project>

  • LIST tous les fichiers du déploiement

  • GET tout accès aux fichiers contenus dans DCM project

OWNERSHIP

  • Le rôle utilisé pour créer l’objet DCM project est le propriétaire de ce projet.

  • Donne au rôle la possibilité de déployer des modifications.

  • Donne au rôle la possibilité de transférer la propriété du projet à un autre rôle lorsque le projet n’a pas encore été déployé.

  • Tous les privilèges MONITOR

  • EXECUTE DCM PROJECT <project> PLAN

  • EXECUTE DCM PROJECT <project> DEPLOY

  • EXECUTE DCM PROJECT <project> PREVIEW

  • EXECUTE DCM PROJECT <project> REFRESH

  • EXECUTE DCM PROJECT <project> TEST

  • DROP DCM PROJECT <project>

  • ALTER DCM PROJECT <project>

  • GRANT READ sur DCM PROJECT <project> TO ROLE <role2>

  • GRANT MONITOR sur DCM PROJECT <project> TO ROLE <role2>

Note

Comme les autres commandes Snowflake, EXECUTE DCM PROJECT tient compte du fait que les privilèges des rôles secondaires sont activés pour l’utilisateur qui exécute la commande. Exécutez USE SECONDARY ROLES NONE; afin de ne pas tirer parti des privilèges d’autres rôles que celui de propriétaire du projet. Cela garantit que le comportement du déploiement est cohérent entre les différents environnements lorsqu’il est exécuté par différents utilisateurs de service dotés du même rôle principal.

Propriété sur les objets gérés par DCM

Le rôle qui déploie un DCM project, dispose, par défaut, du privilège OWNERSHIP associé à tous les objets déployés.

Les définitions de projets peuvent inclure les instructions GRANT OWNERSHIP vers d’autres rôles. Snowflake recommande que le rôle de propriétaire DCM project n’accorde la propriété des objets gérés par DCM qu’à un autre rôle de niveau inférieur dont il dispose également. Le projet peut alors continuer à gérer cet objet, car le rôle de propriétaire du projet « hérite » des privilèges du nouveau rôle de propriétaire de l’objet.

Si le rôle de propriétaire DCM project accorde la propriété sur les objets gérés par DCM à un autre rôle dont il ne dispose pas, le projet ne peut plus gérer cet objet déployé, car le rôle de propriétaire du projet n’en est plus propriétaire. Les déploiements suivants échoueront. La définition de l’objet doit être supprimée du projet ou la propriété doit être restituée au rôle de propriétaire du projet.

Si vous souhaitez migrer des objets existants pour qu’ils soient gérés par un DCM project, le rôle propriétaire de l’objet DCM project doit également disposer de privilèges de propriété (directs ou hérités par d’autres rôles) sur l’objet à gérer par DCM project.

Note

S’il s’agit d’un objet migré, nous vous recommandons d’ajouter l’instruction GRANT OWNERSHIP correspondante aux définitions du projet pour s’assurer que l’état actuel et les définitions DCM project sont synchronisés.

Définir un DCM project

Un DCM project repose sur un fichier manifeste et un ou plusieurs fichiers de définition d’objets SQL. Ces fichiers sont généralement stockés et gérés dans un référentiel Git ou dans votre espace de travail local.

  • Le fichier manifeste

    • Spécifie un ou plusieurs environnements cibles avec des identificateurs de compte correspondants, des objets DCM project, des rôles propriétaires pour ces objets et des configurations de modélisation facultatives

    • En option, spécifie les valeurs par défaut de modélisation et une ou plusieurs configurations avec des valeurs pour les variables de modèle.

  • Les fichiers de définition d’objet

    • Définissez un ensemble d’objets Snowflake, d’autorisations et d’attentes que vous souhaitez gérer ensemble dans cet DCM project.

Consultez Créer un dossier DCM project pour stocker vos fichiers de définition pour savoir comment configurer un dossier DCM project et les fichiers de définition et comment utiliser les modèles pour définir votre DCM project.

Planifier un DCM project

La planification d’un DCM project permet d’effectuer un test pour prévisualiser les modifications avant le déploiement. Snowflake compare vos fichiers de définition de projet avec des objets existants et indique quels objets seront créés, modifiés ou supprimés. Aucun changement n’est apporté à votre compte.

Utilisez la planification pour examiner et valider les modifications avant de déployer un projet DCM. Vous pouvez spécifier des options telles qu’une configuration ou un chemin de sortie pour les résultats du plan.

Le PLAN imite la commande DEPLOY autant que possible, sauf qu’il n’exécute pas réellement les instructions DDL.

Important

Exécutez toujours la commande PLAN sur vos projets avant le déploiement pour vous assurer qu’il n’y a pas d’erreurs liées à la syntaxe, aux modèles, aux dépendances entre objets, aux privilèges d’accès, etc. Examinez la sortie du plan pour corriger les éventuelles erreurs, prévisualisez le Jinja généré avec les variables fournies et prévisualisez les modifications qui seront apportées une fois le déploiement effectué.

Le plan effectue les étapes suivantes :

  1. Affiche toutes les modèles Jinja avec le profil de configuration sélectionné ou les valeurs fournies au moment de l’exécution.

  2. Compare toutes les définitions à l’état actuel des entités qui ont été définies dans le cadre du dernier déploiement.

  3. Convertit toutes les instructions définies en instructions CREATE, ALTER, DROP, GRANT et REVOKE.

  4. Trie toutes les instructions en fonction de leurs interdépendances.

  5. Compile toutes les instructions.

Note

Bien que le PLAN détecte presque toutes les erreurs possibles qui peuvent se produire pendant le déploiement, il ne garantit pas un déploiement réussi.

Exécutez la commande PLAN

La commande PLAN prend les informations suivantes en entrée :

  • Chemin d’accès au fichier manifeste

    La CLI lit la cible du manifeste (indicateur default_target ou --target). Pour les commandes SQL, le chemin d’accès au fichier manifeste et le nom du projet doivent être indiqués.

  • Valeurs définies pour les variables Jinja (facultatif).

  • La templating_config de la cible sélectionne automatiquement le profil de configuration. Pour les commandes SQL, utilisez la clause USING CONFIGURATION pour spécifier le profil.

  • Une ou plusieurs valeurs du profil de configuration à remplacer (facultatif).

Les exemples suivants montrent comment exécuter la commande PLAN.

Exécutez la commande snow dcm plan dans votre terminal IDE local ou dans le cadre d’un workflow Git.

Un exemple de commande CLI permettant de planifier un projet DCM à partir d’un répertoire local :

cd ./Quickstarts/DCM_Project_Quickstart_1/
snow dcm plan

Un exemple de commande CLI permettant de planifier un projet DCM à partir d’une zone de préparation Snowflake ou d’un clone de référentiel Git :

snow dcm plan --target PROD_US --save-output

Un exemple de commande CLI permettant de planifier un projet DCM avec des arguments facultatifs :

snow dcm plan
--variable "wh_size='MEDIUM'" --variable "teams = ['TEAM_A', 'TEAM_B']"
--save-output

Les variables doivent être placées entre guillemets doubles, avec des guillemets simples supplémentaires pour les valeurs de type chaîne. Les listes de valeurs doivent être placées entre crochets.

Commandes CLI Snowflake

Chemin du fichier de définition

Vous disposez des options suivantes pour indiquer l’emplacement des fichiers de manifeste et de définition.

  • À partir d’un chemin d’accès à l’espace de travail

    L’interface utilisateur de Snowsight liste automatiquement toutes les définitions DCM project dans l’espace de travail actuel. Vous pouvez sélectionner l’un de ces chemins et les espaces de travail l’utiliseront pour exécuter des commandes DCM.

    Si vous voulez exécuter manuellement des commandes SQL dans les espaces de travail, vous pouvez également indiquer ce même chemin dans l’un de vos espaces de travail.

    Conseil : le menu à trois points situé derrière chaque fichier de votre espace de travail vous permet de copier le chemin d’accès complet de ce fichier dans votre code SQL.

    Un exemple de commande SQL permettant de planifier un projet DCM à partir d’un chemin d’espace de travail :

    EXECUTE DCM PROJECT DCM_PROJECT_DEV
      PLAN
      USING CONFIGURATION DEV
    FROM
      'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/live/Quickstarts/DCM_Project_Quickstart_1'
    
  • À partir d’un clone de référentiel Git local sur votre disque

    Sélectionnez le répertoire qui contient voter fichier manifest.yml avant d’exécuter la commande CLI dans votre IDE local. Vous pouvez également spécifier un autre répertoire local contenant le manifeste et les définitions que vous souhaitez utiliser.

    Un exemple de commande CLI permettant de planifier un DCM project à partir du répertoire actuel d’un référentiel Git local :

    cd ./Quickstarts/DCM_Project_Quickstart_1/
    
    snow dcm plan
    
    snow dcm plan --target PROD
    

    Un exemple de commande CLI permettant de planifier un DCM project à partir d’un répertoire différent dans un clone de référentiel Git local :

    snow dcm plan DCM_PROJECT_DEV --configuration DEV --from ./Quickstarts/DCM_Project_Quickstart_2/
    
  • Depuis votre référentiel distant dans un workflow

    La même syntaxe CLI peut être utilisée lorsque les commandes DCM sont exécutées dans un workflow CI/CD.

    Un exemple de workflow CI/CD permettant de planifier un DCM project à partir d’un clone de référentiel Git local :

    steps:
      - name: Clone Repo
        uses: actions/checkout@v4
      - name: Setup SnowCLI
        uses: snowflakedb/snowflake-cli-action@v2.0
      - name: Run PLAN
        run: |
          cd ./Quickstarts/DCM_Project_Quickstart_1/
          snow dcm plan --target PROD --save-output
    
  • À partir d’un clone de référentiel Stage ou Git dans Snowflake

    Si vous souhaitez exécuter une procédure ou une tâche dans Snowflake qui exécute des commandes DCM, cette commande SQL peut indiquer un chemin absolu vers une zone de préparation Snowflake ou un clone de référentiel Git au sein du compte.

    Pour les clones du référentiel Git, envisagez d’abord d’exécuter ALTER GIT REPOSITORY FETCH pour disposer de la dernière version.

    Les chemins '@...' ne peuvent être utilisés que lors de l’exécution de commandes DCM SQL.

    Un exemple de commande SQL permettant de planifier un projet DCM à partir d’une zone de préparation ou d’un clone de référentiel Git dans Snowflake :

    EXECUTE DCM PROJECT DCM_PROJECT_DEV
      PLAN
      USING CONFIGURATION DEV
    FROM
      '@DCM_DEMO.DEPLOY.DCM_DEMO/branches/main/Quickstarts/DCM_Project_Quickstart_1/'
    

Sortie du plan

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>
  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. Les valeurs de kind déterminent 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": []
    }
  ]
}

Déployer un DCM project

Lorsque vous déployez un DCM project, les actions suivantes sont effectuées :

  • Les objets qui sont définis mais qui n’existent pas encore sont créés.

  • Les objets qui existent déjà mais qui diffèrent de la définition actuelle sont modifiés.

  • Les objets qui existent déjà tels que définis sont ignorés.

  • Les objets qui existent déjà mais qui ne sont plus définis sont supprimés.

Le même comportement s’applique aux autorisations et aux attentes en matière de qualité des données définies dans le projet.

Important

Pour éviter toute perte de données involontaire, exécutez toujours PLAN et examinez la sortie avant l’exécution de DEPLOY.

Chaque DCM project ne peut avoir qu’une seule instance déployée à tout moment. Plusieurs profils de configuration ne peuvent pas coexister. Le déploiement de la configuration B avec le même DCM project supprimera tous les objets des autres configurations précédentes qui ne sont pas définis dans B.

Créez un DCM project pour chaque environnement cible. Le DCM project pour chaque environnement peut alors pointer vers les mêmes fichiers de définition, mais se déployer indépendamment avec des valeurs différentes pour chaque variable, comme suffix => 'DEV_JS', afin qu’ils puissent exister indépendamment côte à côte sur le même compte Snowflake.

Vous pouvez remplacer les valeurs des variables sélectionnées lors de l’exécution si vous souhaitez utiliser un profil prédéfini avec une légère variation.

Par exemple :

EXECUTE DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV
  DEPLOY
  USING CONFIGURATION DEV (suffix=>'DEV_USER', user=>'JANEDOE')
FROM
  'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/live/DCM_Project_Quickstart_1';
snow dcm deploy DCM_PROJECT_DEV --configuration DEV --variable "suffix='DEV_USER'" --variable "user='JANEDOE'"

Chaque tentative de déploiement (réussie, échouée ou annulée) dispose d’un numéro de déploiement, par exemple DEPLOYMENT$1. Vous pouvez éventuellement spécifier une chaîne unique en tant qu’alias de déploiement afin de nommer des déploiements individuels pour une meilleure observabilité dans l’historique de déploiement. Considérez l’alias de déploiement comme un message de validation pour votre changement de code.

Chaque commande DEPLOY exécute d’abord un PRE-PLAN interne dans le cadre du déploiement. Si lePRE-PLAN réussit, alors DEPLOY est exécuté directement après. Il n’existe aucune option permettant d’intercepter ou d’examiner cette étape interne du plan. Le PRE-PLAN est exécuté pour réduire davantage le risque de défaillance lors du déploiement. Si un DEPLOY échoue, vous pouvez voir dans le message d’erreur s’il a échoué lors due l’étape PRE-PLAN ou DEPLOY. L’échec lors de l’étape PRE-PLAN est similaire à PLAN ; aucune modification DDL n’est exécutée.

Important

L’échec lors de l’étape DEPLOY peut entraîner une exécution partielle des modifications définies. Cela peut potentiellement entraîner un état indéfini pour certains des objets gérés. Dans la plupart des cas, il suffit de remédier à la cause profonde et de relancer DEPLOY pour restaurer l’état cible défini.

Le chemin cible du fichier de sortie DEPLOY ne peut pas être personnalisé. Les artefacts de déploiement sont toujours stockés dans l’DCM project.

Exécutez la commande DEPLOY

Pour exécuter la commande DEPLOY, fournissez les entrées suivantes :

  • Chemin d’accès au fichier manifeste.

  • Un profil de configuration doit être nommé si les profils de configuration sont définis dans le manifeste.

  • De manière facultative, les valeurs du profil de configuration qui remplacent les valeurs par défaut.

  • De manière facultative, un alias de déploiement.

Les exemples suivants montrent comment exécuter la commande DEPLOY.

EXECUTE DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV
  DEPLOY
FROM
  'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/live/Quickstarts/DCM_Project_Quickstart_1';

Un exemple de commande SQL pour déployer un DCM project lors de l’utilisation de Jinja avec des profils de configuration, mais en remplaçant wh_size et teams :

EXECUTE DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV
  DEPLOY AS "testing 2 teams"
  USING CONFIGURATION DEV (wh_size => 'MEDIUM', teams => ['TEAM_A', 'TEAM_B'])
FROM
  'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/live/Quickstarts/DCM_Project_Quickstart_1';

Consultez Sortie du plan pour la structure de sortie du plan standard.

Gérer un DCM project

Afficher tous les objets gérés par un DCM project

La commande SHOW ENTITIES IN DCM PROJECT vous permet de voir une liste de tous les objets Snowflake qui sont actuellement gérés par un DCM project spécifique. Elle fournit une liste de noms complets pour tous les objets. Pour voir les résultats, vous devez disposer du privilège READ sur l’DCM project et des privilèges pour voir l’objet géré lui-même.

Note

Le résultat ne correspond pas nécessairement aux objets du déploiement le plus récent. Les objets qui ont été supprimés manuellement ou détachés du projet n’apparaissent pas dans les résultats.

Vous pouvez utiliser LIKE pour effectuer une recherche par nom ou utiliser un opérateur de flux pour poursuivre le traitement ou filtrer le jeu de résultats.

De même, vous pouvez SHOW GRANTS et SHOW FUTURE GRANTS qui sont définis et déployés avec ce projet.

Exemples pour voir tous les objets qui sont actuellement gérés par un DCM project :

SHOW ENTITIES LIKE '%DASHBOARD%' IN DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV;

SHOW ENTITIES IN DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV
  ->> SELECT * FROM $1 WHERE "object_type" = 'DYNAMIC_TABLE';

SHOW [FUTURE] GRANTS IN DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV;

Détacher des objets d’un DCM project

À l’aide de la commande ALTER <objet> avec la clause UNSET DCM PROJECT, vous pouvez détacher un objet qui a été déployé et qui est maintenant géré par un DCM project. La commande supprime l’association entre l’objet et l’DCM project sans supprimer l’objet. Vous pouvez utiliser cette commande lorsque vous souhaitez commencer à gérer un objet via un DCM project différent.

Assurez-vous de supprimer l’instruction DEFINE correspondante de vos fichiers de définition de projet avant de le déployer à nouveau. Dans le cas contraire, l’objet sera réintégré dans le DCM project.

Un exemple de commande SQL pour détacher un objet d’un DCM project :

ALTER TABLE MY_DB.MY_SCH.MY_TABLE
  UNSET DCM PROJECT;

Vous ne pouvez pas détacher des autorisations ou des exécutions déployées d’un projet DCM.

Supprimer un DCM project

Lorsqu’un objet DCM project est supprimé, l’ensemble des entités gérées, des autorisations et des attentes restent en place comme « non gérés ».

Important

La suppression ou le remplacement d’un objet DCM project vous fait perdre tous les artefacts de l’historique de déploiement que l’objet contient.

DROP DCM PROJECT [IF EXISTS] <my_project>;

Automatiser un déploiement DCM project

Bonnes pratiques CI/CD

Suivez ces pratiques lorsque vous automatisez des déploiements à l’aide de pipelines CI/CD :

  • Un DCM project ciblant un environnement de non-production doit appartenir à un rôle différent de son homologue de production afin d’éviter des déploiements accidentels vers la production.

  • Un DCM project ciblant un environnement de production doit appartenir à un rôle dédié aux déploiements de production avec des privilèges d’accès spécifiquement adaptés qui sont juste suffisants pour déployer tous les objets du projet.

    • Évitez d’utiliser les rôles d’administrateur général pour la propriété DCM project. Accordez de tels rôles uniquement aux utilisateurs des services, et non aux développeurs individuels.

    • Accordez le rôle de déploiement de production dédié uniquement aux utilisateurs du service, et non aux développeurs individuels.

    • Limitez la propriété au rôle de déploiement de production pour garantir l’immuabilité de l’infrastructure ou des produits de données critiques.

      Si le rôle de déploiement de production dédié accorde la propriété des objets de production à d’autres rôles, les utilisateurs qui se voient attribuer ces rôles peuvent toujours modifier ou supprimer les objets de production.

Exemples GitHub Actions

Cette section fournit des exemples de workflows GitHub Actions illustrant des modèles CI/CD typiques pour DCM Projects. Les mêmes concepts s’appliquent à d’autres plateformes basées sur Git, comme Azure DevOps, GitLab CI/CD ou Bitbucket Pipelines. Seule la syntaxe du workflow diffère.

Chaque exemple fournit des éléments de base que vous pouvez personnaliser et combiner en fonction de la configuration de votre pipeline, de la topologie de votre environnement et des exigences organisationnelles.

Les exemples de workflows illustrent les modèles suivants, applicables à toute configuration DCM CI/CD :

  • Configuration pilotée par manifeste Chaque workflow lit account_identifier, project_owner et``project_name`` à partir des cibles du manifeste. Ceci conserve la configuration de l’environnement à un seul endroit et évite de la dupliquer à travers les secrets GitHub.

  • Protection contre la suppression des données Le workflow de déploiement analyse plan_result.json pour les opérations DROP destructrices sur les objets contenant des données, tels que les bases de données, les schémas, les tables et les zones de préparation, et bloque le déploiement s’il en détecte.

  • Promotion séquentielle de la zone de préparation vers la production Le déploiement en production ne commence qu’une fois que le déploiement de la zone de préparation a abouti, que les tables dynamiques ont été actualisées et que les tests de qualité des données ont été validés.

  • Analyse de la sortie du plan structuré Les workflows utilisent jq pour extraire les nombres d’opérations et les domaines d’objets de plan_result.json, ce qui facilite la création de résumés et de contrôles personnalisés.

  • Résumés alimentés par AI snow cortex complete génère des résumés en langage naturel des résultats du script post-hook et de la sortie de l’actualisation de la table dynamique pour le résumé de la tâche GitHub Actions.

Avant d’exécuter ces exemples de workflows, remplissez les conditions préalables suivantes :

  • Stocker les fichiers DCM project dans un référentiel Git.

  • Accorder à un utilisateur des privilèges pour créer et exécuter GitHub Actions.

  • Configurer les secrets GitHub pour les identifiants de connexion de l’utilisateur du service Snowflake (SNOWFLAKE_USER, SNOWFLAKE_PASSWORD ou un jeton d’accès personnel).

  • Configurer les variables GitHub pour le chemin vers le dossier DCM project (DCM_PROJECT_PATH).

  • Configurer les environnements GitHub pour chaque cible de manifeste (par exemple, DCM_STAGE, DCM_PROD_US).

Pour la configuration d’une connexion Snowflake dans GitHub Actions, consultez la première moitié de l’article de blog, Guide pratique sur GitHub Actions CI/CD.

Consultez le référentiel DCM snowflake-labs pour un ensemble de workflows GitHub Actions qui couvrent la totalité du cycle de vie CI/CD pour DCM Projects.

Tous les exemples de workflows lisent le rôle account_identifier et project_owner Snowflake directement à partir des cibles du manifeste à l’aide de yq, de sorte que la configuration spécifique à l’environnement existe dans le manifest.yml contrôlé par la version plutôt que dans des secrets GitHub dupliqués. Seules les identifiants de connexion de l’utilisateur du service sont stockés en tant que secrets.

Exemple de workflow : Valider les connexions et les privilèges

  • Fichier de configuration de workflow : DCM_0_Test_Connections.yml

  • Déclencheur : Manuel avec l’événement workflow_dispatch

Ce workflow valide le fait que l’utilisateur du service GitHub Actions peut se connecter à chaque environnement cible défini dans le manifeste. Utilisez-le lorsque vous configurez un nouveau référentiel, l’onboarding d’un nouveau compte ou le débogage de problèmes d’authentification. Le workflow comprend les étapes suivantes :

  • Analyse tous les noms cibles de manifest.yml de manière dynamique.

  • Utilise une stratégie matricielle GitHub Actions pour tester chaque cible en parallèle.

  • Pour chaque cible, vérifie la connexion Snowflake, signale le compte, l’utilisateur et le rôle connectés, et vérifie si le rôle connecté correspond au propriétaire DCM project.

  • Indique si l’objet DCM project existe déjà et si l’utilisateur du service dispose des privilèges de déploiement.

Exemple de workflow : Prévisualisation des modifications de la demande d’extraction

  • Fichier de configuration de workflow : DCM_1_Test_PR_to_main.yml

  • Déclencheur : Demande d’extraction ouverte, synchronisée ou rouverte par rapport à la branche main

Ce workflow exécute un PLAN par rapport aux objectifs de mise en zone de préparation et de production en tant que test d’intégration pour chaque demande d’extraction. Il fournit aux réviseurs un résumé des modifications planifiées directement sur la demande d’extraction. Le workflow comprend les étapes suivantes :

  • Exécute snow dcm plan en parallèle sur le cibles STAGE et PROD.

  • Analyse plan_result.json pour résumer les opérations CREATE, ALTER et DROP regroupées par domaine d’objets.

  • Importe les artefacts de plan pour une inspection ultérieure.

  • Publie un commentaire consolidé sur la demande d’extraction avec le résumé du plan pour les deux environnements.

  • La vérification échoue si PLAN échoue, ce qui bloque la fusion.

Exemple de workflow : Déployer des modifications sur la zone de préparation et l’environnement de production

  • Fichier de configuration de workflow : DCM_2_Deploy_to_Stage_and_Prod.yml

  • Déclencheur : Pousser vers la branche main (généralement une demande d’extraction fusionnée)

Ce workflow met en œuvre un pipeline de promotion séquentielle. Les modifications sont d’abord déployées dans la zone de préparation, validées de bout en bout, puis promues en production. Si l’une des zones de préparation échoue, le pipeline s’arrête et la production n’est pas affectée.

Séquence de déploiement de la zone de préparation :

  1. Plan : Exécute snow dcm plan et résume l’ensemble des modifications.

  2. Détection des pertes de données : Analyse la sortie du plan et bloque le pipeline s’il contient des opérations DROP pour les bases de données, les schémas, les tables ou les zones de préparation.

  3. Déployer : Exécute snow dcm deploy.

  4. Publier des scripts : Exécute des scripts post-hook SQL facultatifs avec injection de variables Jinja à l’aide de snow sql.

  5. Actualiser les tables dynamiques : Exécute snow dcm refresh pour appliquer toute nouvelle logique de transformation.

  6. Tester les attentes : Exécute snow dcm test pour valider les attentes en matière de qualité des données.

Séquence de déploiement de la production :

Les six mêmes étapes sont répétées pour la cible de production, mais uniquement une fois que toutes les tâches de mise en zone de préparation ont été exécutées avec succès.

Une fois toutes les tâches terminées, le workflow publie un résumé d’état final dans la demande d’extraction d’origine.

Note

Le workflow de déploiement utilise snow cortex complete pour générer des résumés lisibles par l’homme pour les résultats du script post-hook et la sortie de l’actualisation de la table dynamique dans les résumés de tâches GitHub Actions.

Exemple de workflow : Tester les attentes sur la zone de préparation

Ce workflow fournit un moyen à la demande de valider la qualité des données sur l’environnement de mise en zone de préparation sans déclencher un déploiement complet. Utilisez-le pour vérifier les attentes après les modifications manuelles des données ou les actualisations des données en amont, ou en tant que contrôle qualité périodique. Le workflow comprend les étapes suivantes :

  • Actualise toutes les tables dynamiques gérées par la mise en zone de préparation DCM project.

  • Exécute tous les tests d’attente de qualité des données associés aux tables, aux tables dynamiques et aux vues du projet.

  • Indique si le test a réussi ou échoué, avec des détails sur les critères non respectés.

Questions fréquemment posées (FAQ)

Comment renommer un objet existant ?
  1. Exécutez une commande ALTER en dehors du projet DCM.

  2. Modifiez la définition.

  3. Exécutez PLAN pour vérifier que la nouvelle définition correspond au nouvel état (aucune modification dans PLAN).

  4. Exécutez DEPLOY pour enregistrer le nouvel état.

Comment déployer des objets qui ne sont pas encore pris en charge par des instructions DEFINE ?

Vous pouvez exécuter des instructions CREATE IF NOT EXISTS ou CREATE OR REPLACE dans un script SQL distinct après l’exécution de votre plan de projet ou déploiement DCM.

Ces deux options prennent en charge les modèles Jinja2 et l’exécution à blanc (l’exécution à blanc effectue le rendu des modèles Jinja sans vérifier que la compilation SQL s’est bien déroulée).

Par exemple :

EXECUTE DCM PROJECT my_project
  PLAN ...
USING ...
FROM ...

EXECUTE IMMEDIATE
FROM
  'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/head/DCM_Project_Quickstart_1/hooks/post_hook.sql'
  USING (db => 'DEV')
  dry_run = TRUE      -- shows the rendered Jinja but does not verify successful compilation
;