Comprendre les dépendances des projets dbt sur Snowflake¶
Dans dbt Projects on Snowflake, les dépendances dbt sont les paquets que vous déclarez dans votre fichier packages.yml (par exemple, dbt-labs/dbt_utils du Tutoriel de démarrage). Ils sont installés dans un dossier dbt_packages lorsque vous exécutez dbt deps, comme dans dbt Core.
Vous devez exécuter la commande dbt deps dans un espace de travail Snowflake pour renseigner le dossier dbt_packages de votre projet dbt. Vous pouvez également exécuter dbt deps sur votre machine locale ou votre orchestrateur Git (par exemple, GitHub Actions) et procéder au déploiement en utilisant snow dbt deploy.
Une fois qu’une version d’un projet dbt est créée, considérez-la comme du code en lecture seule. Vous ne modifiez pas ses fichiers avec dbt deps ; vous créez une nouvelle version si vous avez besoin de mettre à jour ses dépendances.
À propos de l’exécution de la commande dbt deps¶
Vous pouvez exécuter la commande dbt deps de l’une des manières suivantes :
Dans un espace de travail Snowflake : (recommandé pour les environnements de développement) Vous pouvez exécuter la commande
dbt depsà l’intérieur de votre espace de travail dans l’Snowsight pour remplirdbt_packagesavant de déployer votre projet dbt en tant qu’objet DBT PROJECT.Cela nécessite un accès au réseau externe afin que Snowflake puisse accéder aux référentiels pour les dépendances. Pour plus d’informations, voir Créer une intégration d’accès externe dans Snowflake pour les dépendances dbt.
En dehors de Snowflake : (par exemple, lors de l’étape de création de votre pipeline de déploiement) Vous pouvez exécuter la commande
dbt depssur votre machine locale ou dans votre intégration continue (CI), qui télécharge les paquets dansdbt_packages, puis déployer l’ensemble du projet (y compris ce dossier) dans Snowflake.Cela ne nécessite pas d’intégration d’accès au réseau externe, car toutes les dépendances sont déjà incluses dans le projet dbt.
Étant donné que les fichiers d’une version d’un projet dbt sont immuables, si vous essayez d’exécuter
dbt depssur un objet déployé, cela n’aura aucun effet sur le dossierdbt_packagesau sein de l’objet.
Dépendances de projets dbt croisées¶
Afin de référencer un autre projet dbt dans votre projet dbt, le projet dbt référencé doit être copié au niveau de la racine de votre projet dbt.
Bien que les dépendances locales ne nécessitent pas d’intégration d’accès externe, si vous avez besoin d’une combinaison de paquets locaux et de paquets distants (par exemple, provenant du hub dbt Packages ou de Git), vous devez configurer une véritable intégration d’accès externe.
Prenons, par exemple, les deux projets dbt suivants. Vous souhaitez que core_project inclue metrics_project localement, de sorte que tout soit autonome lorsque vous déployez sur Snowflake (aucun accès externe nécessaire).
/Projects
├─ core_project/
│ ├─ dbt_project.yml
│ ├─ packages.yml
│ ├─ models/
│ └─ ...
└─ metrics_project/
├─ dbt_project.yml
├─ models/
└─ ...
core_project: Il s’agit de votre projet principal (celui que vous allez déployer).metrics_project: Il s’agit du projet que vous souhaitez utiliser comme dépendance locale.
Pour référencer metrics_project à l’intérieur de core_project, suivez les étapes suivantes :
À l’intérieur de
core_project, créez un dossier nommélocal_packages. Copiezmetrics_projectdans ce dossier.Assurez-vous que
metrics_projectpossède un autre nom quecore_projectdans sondbt_project.yml. Les noms doivent être uniques.cd /Projects/core_project mkdir local_packages cp -R ../metrics_project ./local_packages/metrics_project
À présent, votre disposition ressemble à ceci :
core_project/ ├─ dbt_project.yml ├─ packages.yml ├─ models/ ├─ local_packages/ │ └─ metrics_project/ │ ├─ dbt_project.yml │ ├─ models/ │ └─ ...
Dans
core_project/packages.yml, déclarez la dépendance locale en utilisant le chemin relatif.packages: - local: local_packages/metrics_project
Depuis l’intérieur de
core_project, exécutezdbt deps.dbt traitera désormais
metrics_projectcomme un paquet, et les macros demetrics_projectseront disponibles pourcore_project.
Exécuter automatiquement dbt deps lors de la compilation¶
Lorsque vous déployez ou mettez à jour un objet de projet dbt et que vous lui donnez une intégration d’accès externe, Snowflake peut automatiquement exécuter dbt deps pendant la compilation, afin que les dépendances soient installées dans le cadre de cette étape. Cela signifie que vous n’avez plus besoin d’inclure /dbt_packages lors du déploiement de projets avec des dépendances externes.
Lorsque vous déployez votre objet de projet dbt depuis l’espace de travail vers une base de données et un schéma Snowflake, vous pouvez créer ou remplacer un objet que vous avez précédemment créé.
Connectez-vous à Snowsight.
Dans le menu de navigation, sélectionnez Projects » Workspaces.
Dans le menu Workspaces, sélectionnez l’espace de travail qui contient votre projet dbt.
Sur le côté droit de l’éditeur d’espace de travail, sélectionnez. Connect » Deploy dbt project.
Dans la fenêtre contextuelle Deploy dbt project, sélectionnez les éléments suivants :
Sous Select location, sélectionnez votre base de données et votre schéma.
Sous Select or Create dbt project, sélectionnez Create dbt project.
Saisissez un nom et une description.
En option, saisissez une cible par défaut pour choisir le profil qui sera utilisé pour la compilation et les exécutions suivantes (par exemple, prod). La cible d‘une exécution de projet dbt peut toujours être remplacée par
--targetdansARGS.En option, sélectionnez Run dbt deps, puis sélectionnez votre intégration d’accès externe pour exécuter
dbt depsautomatiquement pendant le déploiement.
Sélectionnez Deploy.
L’onglet Output affiche la commande s’exécutant sur Snowflake, qui est similaire à l’exemple suivant :
CREATE DBT PROJECT mydb.my_dbt_projects_schema.my_dbt_project
FROM 'snow://workspace/mydb.my_dbt_projects_schema.sales_model/versions/version$2'
EXTERNAL_ACCESS_INTEGRATIONS = (my_dbt_ext_access);
my_dbt_project successfully created.
Le menu Connect affiche maintenant le nom de l’objet de projet dbt que vous avez créé, avec les options suivantes :
Redeploy dbt project : Met à jour l’objet de projet dbt avec la version actuelle de l’espace de travail du projet en utilisant ALTER. Cela incrémente la version de l’objet de projet dbt par un. Pour plus d’informations, voir Gestion des versions pour les objets et fichiers de projet dbt.
Disconnect : Déconnecte l’espace de travail de l’objet de projet dbt, mais ne supprime pas l’objet de projet dbt.
Edit project : Met à jour le commentaire, la cible par défaut et l’intégration d’accès externe pour l‘objet de projet dbt.
View project : Ouvre l’objet de projet dbt dans l’explorateur d’objets, où vous pouvez voir la commande CREATE DBT PROJECT pour l’objet de projet dbt et l’historique d’exécution du projet.
Create schedule : Fournit des options pour vous permettre de créer une tâche qui exécute l’objet de projet dbt selon une planification. Pour plus d’informations, voir Créer une tâche pour planifier l’exécution d’un projet dbt.
View schedules : Ouvre une liste de planifications (tâches) qui exécutent l’objet de projet dbt, avec la possibilité d’afficher les détails des tâches dans l’explorateur d’objets.
Pour exécuter automatiquement dbt deps pendant la compilation, exécutez la commande CREATE DBT PROJECT ou ALTER DBT PROJECT avec le paramètre EXTERNAL_ACCESS_INTEGRATIONS, comme indiqué dans l’exemple suivant.
Vous pouvez transmettre un tableau vide dans le paramètre EXTERNAL_ACCESS_INTEGRATIONS ou vous pouvez spécifier une ou plusieurs intégrations d’accès externe, en fonction de votre cas d’utilisation. Les dépendances locales ne nécessitent pas d’intégration d’accès externe, mais si vous avez besoin d’une combinaison de paquets locaux et de paquets distants (par exemple, provenant du hub dbt Packages ou de Git), vous devez configurer une véritable intégration d’accès externe.
-- Create a dbt project object that runs dbt deps on compile for remote packages
CREATE DBT PROJECT mydb.my_dbt_projects_schema.my_dbt_project
FROM 'snow://workspace/mydb.my_dbt_projects_schema.sales_model/versions/version$2'
EXTERNAL_ACCESS_INTEGRATIONS = (my_dbt_ext_access);
-- Create a dbt project object that runs dbt deps on compile for only local dependencies
CREATE DBT PROJECT mydb.my_dbt_projects_schema.my_dbt_project
FROM 'snow://workspace/mydb.my_dbt_projects_schema.sales_model/versions/version$2'
EXTERNAL_ACCESS_INTEGRATIONS = ();
-- Update the Git repository object to fetch the latest code
ALTER GIT REPOSITORY mydb.dev_schema.my_dbt_git_stage FETCH;
-- Set external access integrations
ALTER DBT PROJECT mydb.my_dbt_projects_schema.my_dbt_project
SET EXTERNAL_ACCESS_INTEGRATIONS = ();
-- Add a new version to the dbt project object based on the updated Git repository object
-- After an external access integration is set, the next ALTER DBT PROJECT ... ADD VERSION will call dbt deps during compile
ALTER DBT PROJECT mydb.my_dbt_projects_schema.my_dbt_project
ADD VERSION
FROM '@mydb.dev_schema.my_dbt_git_stage/branches/main/sales_dbt_project';
Pour exécuter automatiquement dbt deps pendant la compilation, exécutez la commande snow dbt deploy avec l’indicateur --external-access-integrations ou --install-local-deps, comme indiqué dans l’exemple suivant.
L’indicateur --install-local-deps crée un objet dont l’intégration d’accès externe est vide. Sur une compilation régulière, il exécute dbt deps et remplace l’état précédent du dossier dbt_packages.
L’indicateur --external-access-integrations ajoute une intégration d’accès externe, qui prime sur l’indicateur --install-local-deps.
snow dbt deploy my_dbt_project --install-local-deps;
Créer une intégration d’accès externe dans Snowflake pour les dépendances dbt¶
Lorsque vous exécutez des commandes dbt dans un espace de travail, dbt peut avoir besoin d’accéder à des URLs distantes pour télécharger les dépendances. Par exemple, dbt peut avoir besoin de télécharger des paquets à partir du hub de paquets dbt ou à partir de GitHub.
La plupart des projets dbt spécifient les dépendances dans leur fichier:file:packages.yml. Vous devez installer ces dépendances dans l’espace de travail du projet dbt.
Vous ne pouvez pas mettre à jour un objet de projet dbt déployé avec des dépendances. Pour mettre à jour un objet de projet dbt avec de nouvelles dépendances, vous devez ajouter une nouvelle version à l’objet. Pour plus d’informations, voir Comment les objets du projet dbt sont mis à jour.
Pour obtenir un packet dbt à partir d’URLs distantes, Snowflake a besoin d’une intégration d’accès externe qui s’appuie sur une règle réseau, comme montré dans l’exemple suivant :
-- Create NETWORK RULE for external access integration
CREATE OR REPLACE NETWORK RULE my_dbt_network_rule
MODE = EGRESS
TYPE = HOST_PORT
-- Minimal URL allowlist that is required for dbt deps
VALUE_LIST = (
'hub.getdbt.com',
'codeload.github.com'
);
-- Create EXTERNAL ACCESS INTEGRATION for dbt access to external dbt package locations
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION my_dbt_ext_access
ALLOWED_NETWORK_RULES = (my_dbt_network_rule)
ENABLED = TRUE;
Pour plus d’informations sur les intégrations d’accès externe dans Snowflake, voir Création et utilisation d’une intégration d’accès externe.
Limitations, exigences et considérations pour les dépendances dbt¶
Les exigences, considérations et limitations suivantes s’appliquent aux dépendances dbt pour les projets dbt dans dbt Projects on Snowflake :
Vous devez exécuter la commande
dbt depsdans un espace de travail Snowflake pour renseigner le dossierdbt_packagesde votre projet dbt. Vous pouvez également exécuterdbt depssur votre machine locale ou votre orchestrateur Git et procéder au déploiement en utilisantsnow dbt deploy.Un objet de projet dbt est un instantané versionné, donc exécuter
dbt depsavec EXECUTE DBT PROJECT ouexécuter snow dbtne modifie aucun fichier ; cela vérifie principalement que votre accès externe est configuré correctement.Vous pouvez spécifier des paquets Git publics dans le fichier
packages.yml, mais les paquets Git privés ne sont pas pris en charge.Une règle réseau et une intégration d’accès externe sont nécessaires pour permettre à Snowflake d’accéder aux référentiels des dépendances. Pour plus d’informations, voir Créer une intégration d’accès externe dans Snowflake pour les dépendances dbt.
Un objet de projet dbt est un instantané versionné de votre projet. L’exécution de la commande
depsne modifie aucun fichier ; elle est principalement utilisée pour vérifier que votre configuration d’accès externe est correcte. Lorsqu’un objet de projet dbt est créé avec une intégration d’accès externe,dbt depsest exécutée avantdbt compilepour empaqueter toutes les dépendances et les fichiers de projet.