Fichiers et modèles DCM Projects¶
Un|dcm-object| nécessite 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 les fichiers de définition d’objet à inclure.
Définit des configurations pour différents environnements avec des variables de modèle.
Les fichiers de définition d’objet
Définissez un groupe d’objets Snowflake que vous souhaitez gérer ensemble dans DCM project.
Le workflow de haut niveau pour créer des fichiers DCM project est :
Créer un dossier DCM project pour stocker vos fichiers de définition¶
Pour créer un nouveau DCM project, créez un dossier pour stocker votre fichier manifeste (manifest.yml) et des fichiers de définition d’objets SQL.
La commande snow init avec le modèle DCM_PROJECT crée des exemples de fichiers de définition dans le répertoire de votre projet. Vous pouvez ouvrir et modifier ces fichiers pour définir votre DCM project.
Les DCM Projects suivent la structure de dossier normalisée :
Les fichiers de définition d’objet DCM Projects doivent être placés sous
sources/definitions/.Les fichiers de macro globaux facultatifs peuvent être placés sous
sources/macros/.Les noms et l’imbrication des fichiers dans ces répertoires de projet sont flexibles.
Les objets de sortie enregistrés depuis les commandes DCM sont toujours écrits dans
out/.Si vous avez d’autres scripts ou fichiers de projet que vous souhaitez utiliser pour les commandes DCM, vous pouvez les ajouter sous
sources(par exemple, les fichiers de projet dbt).Si vous avez d’autres scripts personnalisés que vous souhaitez stocker dans le dossier du projet et qui ne doivent pas être utilisés par les commandes DCM Projects et ne doivent pas être chargés depuis un fichier local, ajoutez-les dans un dossier en dehors du dossier
sources.Les commandes CLI ne téléchargent que des fichiers situés dans le dossier
sources.
Note
Si vous utilisez Git, ajoutez:file:out/ à votre fichier .gitignore pour éviter de pousser les fichiers de sortie locaux vers Git.
Un exemple de structure des dossiers DCM project est la suivante :
Création d’un fichier manifeste¶
Chaque DCM project nécessite un fichier manifest.yml. Il contient les détails de configuration essentiels du projet et permet d’identifier le dossier du projet en tant que DCM project.
Vous utilisez le fichier manifeste pour contrôler quels objets et rôles DCM project utiliser lors du déploiement dans différents environnements cibles et pour gérer des ensembles de valeurs de modèles.
Le fichier manifeste est un fichier YAML qui contient les propriétés suivantes :
Propriété |
Obligatoire |
Description |
|---|---|---|
|
Obligatoire |
Version du schéma du manifeste. La version actuelle est la 2. |
|
Obligatoire |
Type du projet. Définissez sur : |
|
Facultatif |
Si vous avez plus d’une cible, spécifiez la cible par défaut. Le Snowflake CLI et les espaces de travail utilisent la cible par défaut si vous ne spécifiez pas de cible avec l’indicateur |
|
Obligatoire |
La section |
|
Facultatif |
La section |
Cibles du projet¶
Chaque cible du fichier manifeste contient les propriétés suivantes :
Propriété |
Description |
|---|---|
|
L’identificateur du compte Snowflake pour cette cible. |
|
Le nom complet de l’objet DCM project, par exemple``DCM_DEMO.PROJECTS.DCM_PROJECT_DEV``. Utilisez la commande :doc:`/sql-reference/sql/show-dcm-projects`SQL pour le trouver. |
|
Le rôle avec OWNERSHIP sur cet objet de projet. Utilisez la commande SHOW DCM PROJECTS ou :doc:`/sql-reference/sql/desc-dcm-project`SQL pour le trouver. |
|
Nom de la configuration de modèles définie dans la section |
Mappage entre les définitions de projet et les objets de projet¶
Les fichiers de définition DCM Projects ne sont pas strictement liés à un objet DCM project spécifique. Vous pouvez utiliser le même ensemble de définitions pour effectuer un déploiement sur plusieurs projets, soit sur différents comptes Snowflake, soit en référençant différents profils de configuration. Par exemple, les mêmes fichiers de définition sur une branche du référentiel peuvent être déployés à la fois sur les comptes DEV et PROD comme indiqué dans la figure suivante.
De même, vous pouvez exécuter un objet DCM Projects en référençant des fichiers de définition provenant de différents chemins. Par exemple, votre automatisation CI/CD peut déployer des définitions à partir de votre branche principale et vous pouvez exécuter manuellement un PLAN à partir de vos fichiers de définitions locaux vers le même projet pour vérifier comment vos définitions diffèrent du dernier déploiement. Vous pouvez également utiliser cette approche pour les déploiements manuels ad hoc à partir d’autres branches ou de chemins locaux.
Configurations de la modélisation du projet¶
Vous trouverez ci-dessous la structure de haut niveau de la configuration de modèles dans le fichier manifeste. Vous ne pouvez définir que defaults, ou seulement configurations, ou les deux.
Propriété |
Description |
|---|---|
|
Les valeurs des variables partagées, dans des paires clé-valeur, qui s’appliquent à toutes les configurations pour éviter les répétitions. |
|
Les configurations de modèles à utiliser pour le projet. Les configurations individuelles peuvent remplacer les valeurs par défaut par des valeurs spécifiques à la configuration. Pour plus de détails sur la façon dont les variables sont résolues, voir Configurations. |
|
Nom de la configuration de modèles. Les noms de configuration sont insensibles à la casse. |
|
Nom de la variable. Les noms des variables doivent suivre les règles de dénomination des variables Python. Toutes les variables des définitions du projet doivent être déclarées soit par défaut, dans la configuration sélectionnée, soit au moment de l’exécution. Si vous voulez que les variables de chaîne de caractères soient vides, spécifiez-les comme suit |
|
La valeur de la variable. Les valeurs peuvent être des chaînes, des nombres, des booléens, des listes ou des dictionnaires. Les dictionnaires peuvent être définis dans le manifeste, mais ne peuvent pas être écrasés au moment de l’exécution. |
Exemple : manifest.yml¶
Voici un exemple de fichier manifeste DCM project (manifest.yml) qui comprend trois configurations,DEV ,STAGE, et PROD, avec des variables de modèle et leurs valeurs par défaut :
Créer des fichiers de définition d’objet¶
Un fichier de définition DCM project est un modèle qui se traduit par des instructions SQL valides pour la gestion des objets Snowflake. Chaque DCM project nécessite au moins un fichier de définition.
Vous pouvez organiser vos définitions d’objets et vos attributions dans plusieurs fichiers et dossiers. Snowflake recommande de choisir une structure qui représente la logique métier du projet (par exemple, Bronze, Azure et Or) plutôt que de grouper par type d’objet.
Les fichiers de définition ne peuvent contenir que des instructions DEFINE,GRANT ouATTACH. Les autres commandes SQL ne sont pas prises en charge.
Pour commencer rapidement avec DCM Projects, vous pouvez convertir vos scripts SQL de déploiement existants en utilisant le mot-clé DEFINE de vos DDLs existants (pour les types d’objets pris en charge).
L’instruction DEFINE fonctionne comme la commande CREATE OR ALTER <objet>, mais avec les différences clés suivantes :
L’ordre et l’emplacement des instructions DEFINE n’ont pas d’importance. Snowflake collecte et trie toutes les instructions de tous les fichiers de définition pendant l’exécution du projet.
Si vous supprimez une instruction DEFINE, Snowflake supprime l’objet correspondant la prochaine fois que vous déployez le projet.
Seul un sous-ensemble d’objets Snowflake est pris en charge. Pour plus de détails, voir Types d’objets pris en charge dans DCM Projects.
Tous les objets doivent être définis avec un nom complet au format
database.schema.object_name.
Les fichiers de définition peuvent contenir différentes options de modélisation Jinja2 et prendre en charge des fonctionnalités de modélisation avancées, ce qui vous permet d’effectuer les opérations suivantes :
Personnaliser le contenu du fichier lors de l’exécution à l’aide de variables de modèle.
Utiliser la syntaxe Jinja2 pour des logiques telles que les boucles et les logiques conditionnelles.
Rendre les fichiers de définition réutilisables et adaptables pour différents scénarios.
Modélisation de définition d’objet¶
Les DCM Projects prennent en charge le framework Jinja2 pour la création de modèles d’instructions SQL. Vous pouvez déclarer des variables et attribuer des valeurs en utilisant la syntaxe Jinja2 soit à partir de profils de configuration, dans la commande EXECUTE DCM PROJECT ou dans Jinja. Vous pouvez également construire des boucles à travers des listes de valeurs, des instructions de cas, des fonctions réutilisables, et bien plus encore. Pour plus d’informations, consultez la `documentation Jinja2<https://jinja.palletsprojects.com/en/stable/>`_.
Les fonctionnalités Jinja2 prises en charge incluent :
Les remplacements de chaîne
Les listes
Les dictionnaires et dictionnaires imbriqués
Les conditions (instructions IF)
Le bouclage
Macros globales et dans le fichier
Les macros définies dans le dossier
sources/macrospeuvent être utilisées pour tous les fichiers de définition.Les macros définies dans un fichier peuvent être utilisées dans le fichier.
La fonctionnalité Jinja2 non prise en charge comprend :
Note
L’identificateur _snow est réservé pour une utilisation future et ne peut pas être utilisé comme nom de variable ou de macro.
Important
N’utilisez pas les variables de modélisation DCM Projects pour les définitions d’objets contenant des informations ou des identifiants de connexion sensibles. Les définitions SQL rendues n’éditent pas les valeurs insérées par les variables d’environnement.
De même, ne saisissez pas de données personnelles, de données sensibles, de données contrôlées à l’exportation ou d’autres données réglementées comme métadonnées, par exemple, des noms de fichiers, de configuration et de variables, lorsque vous utilisez le service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.
Voici un exemple de fichier de définition DCM project qui utilise la création de modèles Jinja2 :
Voici un exemple de fichier manifeste DCM project (manifest.yml) qui définit deux configurations :DEV etPROD.
Rendre cette définition d’entrepôt avec la configuration DEV (sélectionnée automatiquement via templating_config de la cible ou au moment de l’exécution) se résout en :
Macros¶
Les fichiers macro sont nécessaires. Les fichiers SQL situés dans le dossier et ses sous-dossiers macros. Ils ne peuvent contenir que des macros.
Un exemple de structure de répertoire d’un DCM project avec des fichiers macro est :
Comme les fonctions dans les langages de programmation classiques, les macros permettent d’organiser les parties de code souvent utilisées en fonctions réutilisables, évitant ainsi les répétitions et suivant le principe DRY (Ne vous répétez pas). Les macros dans DCM Projects fonctionnent de la même manière que les `macros Jinja2<https://jinja.palletsprojects.com/en/stable/templates/#macros>`_ avec les exceptions suivantes :
Emplacement dédié aux fichiers de macro dans le dossier
macros.Les macros définies dans les fichiers de macros sont automatiquement visibles dans les autres fichiers sources. La balise Jinja `import<https://jinja.palletsprojects.com/en/stable/templates/#import>`_ n’est pas autorisée.
La définition en double d’une macro portant le même nom est détectée et rejetée.
Importation automatique de macros globales¶
Au cours du processus de rendu du fichier de définition, les fichiers sources sont analysés à la recherche d’appels de macro potentiels. Si une macro appelée est définie dans un fichier de macro, la `balise d'importation from [...]<https://jinja.palletsprojects.com/en/stable/templates/#import>`_ implicite est ajoutée automatiquement, de sorte qu’aucune importation explicite n’est nécessaire.
Comme pour les `macros Jinja2<https://jinja.palletsprojects.com/en/stable/templates/#macros>`_, vous pouvez définir une macro locale en lui ajoutant un trait de soulignement comme préfixe. Une macro locale ne peut être utilisée que dans le fichier où elle est déclarée et n’est pas visible pour les autres fichiers.
Commentaires de modèle¶
Dans les commandes SQL, vous pouvez ajouter -- avant votre code pour commenter la ligne. Jinja traite toujours les variables au sein du code SQL, mais laisse les commentaires SQL.
Par exemple, le code Jinja suivant :
Se présente comme :
Les commandes commentées ne s’exécutent pas en SQL. Vous pouvez utiliser les commentaires des modèles pour déboguer les modèles Jinja sans affecter votre code SQL.
Pour ignorer le code Jinja pendant le rendu, ajoutez # à l’intérieur des crochets d’ouverture et de fermeture, comme indiqué dans l’exemple suivant :
Configurations¶
Lorsque vous utilisez des modèles dans vos définitions d’objets, vous disposez des options suivantes :
Attribuer des valeurs aux variables lors de l’exécution.
Définir différents profils de configuration sous
templating: configurations:dans lemanifest.yml. Chaque cible peut référencer une configuration viatemplating_config. Voir Configurations de la modélisation du projet pour plus de détails.Si des profils de configuration sont définis et qu’une cible fait référence à l’un d’eux via
templating_config, la configuration est automatiquement appliquée lors de l’utilisation de cette cible. Pour des exemples, voir Planifier un DCM project.Le cas d’utilisation principal des profils de configuration dans DCM Projects consiste à cibler différents environnements. Les profils de configuration vous permettent d’effectuer les opérations suivantes :
Déployer le même code dans plusieurs environnements.
Tester le code de production dans un environnement de non production à une échelle réduite.
Conserver plusieurs environnements isolés sur le même compte.
Toutes les configurations de modélisation ne doivent pas être référencées par un profil cible. Vous pouvez conserver les configurations inutilisées afin de passer d’une configuration de modèle à une autre pour votre cible.
Définissez les valeurs par défaut partagées sous
templating: defaults:pour éviter de répéter des variables communes entre les configurations. Voir Configurations de la modélisation du projet pour plus de détails.Écrasez des variables spécifiques avec des valeurs uniques au moment de l’exécution en utilisant l’indicateur
--variabledansCLI.
Les variables sont résolues avec une hiérarchie à trois niveaux : valeurs par défaut globales < variables de configuration < variables d’exécution du runtime.
Dictionnaires¶
La modélisation DCM Projects prend en charge les dictionnaires sous forme de valeurs variables, ce qui permet une configuration structurée pour des déploiements complexes à plusieurs locataires ou à plusieurs ressources.
En regroupant les détails de configuration associés dans des dictionnaires, vous obtenez :
Contrôle granulaire : Appliquez des paramètres spécifiques, tels que la taille des entrepôts, les politiques de conservation et les autorisations, aux ressources individuelles sans écrire une logique unique pour chaque variation.
Bases de code plus claires : Remplacez les scripts répétitifs codés en dur par des boucles dynamiques qui s’adaptent en fonction de la configuration.
Évolutivité : Intégrez de nouvelles équipes ou ressources en ajoutant des entrées à votre configuration, plutôt qu’en refactorisant les pipelines de déploiement.
Note
Les dictionnaires peuvent être définis dans le manifeste, mais ne peuvent pas être remplacés au moment de l’exécution par l’indicateur --variable ou les remplacements SQL``USING CONFIGURATION (…)``. Seules les valeurs et les listes scalaires peuvent être remplacées lors de l’exécution.
Exemple de cas d’utilisation pour les dictionnaires : Approvisionnement d’environnement à plusieurs locataires¶
Considérez une plateforme partagée par plusieurs départements, comme le marketing, les finances et les HR, chacun ayant des exigences différentes en matière de conformité et de calcul. Avec les dictionnaires, vous définissez une configuration unique qui prend en compte les besoins de chaque équipe.
Exemple de manifeste :
Exemple de définition :
Votre modèle SQL effectue parcourt ce dictionnaire. Il crée automatiquement des schémas, attribue la politique de conservation correcte et crée conditionnellement des ressources supplémentaires uniquement pour les équipes qui en font la demande.
