CREATE DBT PROJECT

Crée un nouvel objet de projet dbt ou remplace un objet de projet dbt existant. L’exécution de CREATE DBT PROJECT avec l’option OR REPLACE réinitialise l’identificateur de version à version$1 et supprime tous les alias de nom de version. Pour plus d’informations, voir Versions for dbt project objects and files.

Voir aussi :

ALTER DBT PROJECT, DESCRIBE DBT PROJECT, EXECUTE DBT PROJECT, SHOW DBT PROJECTS, DROP DBT PROJECT

Syntaxe

CREATE [ OR REPLACE ] DBT PROJECT [ IF NOT EXISTS ] <name>
  [ FROM '<source_location>' ]
  [ COMMENT = '<string_literal>' ]
  [ DBT_VERSION = <version_number> ]
  [ DEFAULT_TARGET = <default_target> ]
  [ EXTERNAL_ACCESS_INTEGRATIONS = ( <integration_name> [ , ... ] ) ]

Paramètres

name

Chaîne qui spécifie le nom de l’objet de projet dbt. Doit être unique dans le schéma dans lequel l’objet de projet dbt est créé.

De plus, l’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (par exemple, "My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.

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

FROM 'source_location'

Requis. Chaîne spécifiant l’emplacement des fichiers sources du projet dbt.

L’emplacement source doit pointer vers un répertoire qui contient un seul fichier dbt_project.yml à sa racine. Bien que les espaces de travail prennent en charge le travail avec des référentiels contenant plusieurs projets dbt, vous devez sélectionner un répertoire de projet spécifique lors du déploiement d’un objet de projet dbt.

Les fichiers sources de l’objet de projet dbt peuvent se trouver à l’un des emplacements suivants :

  • Une zone de préparation de référentiel Git, par exemple :

    '@my_db.my_schema.my_git_repository_stage/branches/my_branch/path/to/dbt_project_or_projects_parent'

    Pour plus d’informations sur la création d’un objet de référentiel Git dans Snowflake qui connecte un référentiel Git à un espace de travail pour dbt Projects on Snowflake, voir Créer un espace de travail connecté à votre dépôt Git. Pour plus d’informations sur la création et la gestion d’un objet de référentiel Git et d’une zone de préparation sans utiliser d’espace de travail, voir Utilisation d’un référentiel Git dans Snowflake et CREATE GIT REPOSITORY.

  • Une zone de préparation de projet dbt existante, par exemple :

    'snow://dbt/my_db.my_schema.my_existing_dbt_project_object/versions/last'

    Le spécificateur de version est obligatoire et peut être last (comme dans l’exemple précédent), first ou le spécificateur de toute version existante sous la forme version$<num>. Pour plus d’informations, voir Versions for dbt project objects and files.

  • Une zone de préparation interne nommée, par exemple :

    '@my_db.my_schema.my_internal_named_stage/path/to/dbt_projects_or_projects_parent'

    Les zones de préparation d’utilisateur internes et les zones de préparation de table ne sont pas prises en charge.

  • Un espace de travail pour dbt sur Snowflake, par exemple :

    'snow://workspace/user$.public."my_workspace_name"/versions/live/path/to/dbt_projects_or_projects_parent'

    Il est recommandé de mettre le nom de l’espace de travail entre guillemets doubles, car les noms d’espace de travail sont sensibles à la casse et peuvent contenir des caractères spéciaux.

    Le spécificateur de version est obligatoire et peut être last, first, live ou le spécificateur de toute version existante sous la forme version$<num>. Pour plus d’informations, voir Versions for dbt project objects and files.

COMMENT = 'string_literal'

Spécifie un commentaire pour l’objet de projet dbt.

Par défaut : aucune valeur

DBT_VERSION = version_number

Spécifie une version pour l’objet de projet dbt.

Si aucune valeur n’est spécifiée, le système utilise par défaut la version définie par le paramètre de compte DEFAULT_DBT_VERSION. Pour plus d’informations, voir Définir la version par défaut au niveau du compte.

DEFAULT_TARGET = default_target

Spécifie le profil utilisé pour la compilation et les exécutions suivantes (par exemple, prod) de l’objet de projet dbt. Vous pouvez remplacer ce paramètre en utilisant la commande EXECUTE DBT PROJECT avec ARGS = '--target <other_target>'.

Par défaut : aucune valeur

EXTERNAL_ACCESS_INTEGRATIONS = ( integration_name [ , ... ] )

Spécifie l’intégration d’accès externe utilisée pour accorder des autorisations afin d’extraire des dépendances distantes du hub de paquets dbt ou de GitHub. Lorsqu’elle est déclarée sur un objet, dbt deps s’exécutera automatiquement pendant le déploiement. Pour plus d’informations, voir Comprendre les dépendances des projets dbt sur Snowflake.

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

CREATE DBT PROJECT

Schéma

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.

Notes sur l’utilisation

  • Les clauses OR REPLACE et IF NOT EXISTS s’excluent mutuellement. Elles ne peuvent pas toutes les deux être utilisées dans la même instruction.

  • Les instructions CREATE OR REPLACE <objet> sont atomiques. En d’autres termes, lorsqu’un objet est remplacé, l’ancien objet est supprimé et le nouvel objet est créé dans une seule transaction.

  • Concernant les métadonnées :

    Attention

    Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.

Exemples

Créer un objet de projet dbt à partir d’une zone de préparation du référentiel Git dans Snowflake

Créer un objet de projet dbt nommé sales_dbt_model depuis les fichiers de projet dbt dans une zone de préparation du référentiel Git. L’exemple fait référence à la branche main d’une zone de préparation de dépôt Git nommée sales_dbt_git_stage dans Snowflake, où le fichier de projet dbt_project.yml est enregistré à la racine du répertoire. La commande définit également la cible par défaut utilisée lors de l’exécution de commandes dbt et spécifie les intégrations d’accès externes requises par le projet.

CREATE DBT PROJECT sales_db.dbt_projects_schema.sales_model
  FROM '@sales_db.integrations_schema.sales_dbt_git_stage/branches/main'
  DEFAULT_TARGET = 'prod'
  EXTERNAL_ACCESS_INTEGRATIONS = 'my_external_access_integration'
  COMMENT = 'Generates sales data models.';

Créer un objet de projet dbt à partir d’un sous-répertoire au sein d’une zone de préparation de référentiel Git dans Snowflake

Créer un objet de projet dbt nommé sw_region_sales_model depuis un sous-répertoire à l’intérieur d’une zone de préparation de dépôt Git contenant plusieurs projets dbt. L’exemple fait référence à la branche main d’une zone de préparation de dépôt Git nommée sales_dbt_git_stage dans Snowflake, où le fichier de projet dbt_project.yml est enregistré dans le sous-répertoire sw_region_dbt_project du répertoire sales_dbt_projects_parent.

Cet exemple définit également les propriétés suivantes :

  • version dbt

  • Cible d’exécution par défaut (par exemple, prod ou dev) utilisée par les commandes dbt exécutées via Snowflake.

  • Intégrations d’accès externes que l’objet de projet dbt est autorisé à utiliser pour extraire des dépendances distantes du hub de paquets dbt ou de Github.

CREATE DBT PROJECT sales_db.dbt_projects_schema.sw_region_sales_model
  FROM '@sales_db.integrations_schema.sales_dbt_git_stage/branches/main/sales_dbt_projects_parent/sw_region_dbt_project'
  DBT_VERSION = '1.10.15'
  DEFAULT_TARGET = 'prod'
  EXTERNAL_ACCESS_INTEGRATIONS = 'my_external_access_integration'
  COMMENT = 'Generates data models for SW sales region.';

Créer un objet de projet dbt à partir d’une version spécifique d’un objet de projet dbt existant

Créer un nouvel objet de projet dbt nommé sales_model_nw_region depuis la version$2 de l’objet de projet dbt sales_model existant.

Cet exemple définit également une cible d’exécution par défaut à l’aide de DEFAULT_TARGET, et spécifie les intégrations d’accès externes autorisées à l’aide de EXTERNAL_ACCESS_INTEGRATIONS.

CREATE DBT PROJECT sales_db.dbt_projects_schema.sales_model_nw_region
  FROM 'snow://dbt/sales_db.dbt_projects_schema.sales_model/versions/version$2'
  DEFAULT_TARGET = 'prod'
  EXTERNAL_ACCESS_INTEGRATIONS = (my_ext_integration_1, my_ext_integration_2)
  COMMENT = 'Generates data models for the NW sales region.';

Créer un objet de projet dbt à partir d’un espace de travail contenant plusieurs projets dbt

Créer un nouvel objet de projet dbt nommé sales_model_from_workspace depuis la version en direct d’un espace de travail contenant plusieurs répertoires de projets dbt. « Mon espace de travail de projets dbt » dans la base de données personnelle de l’utilisateur. Cela est utile lorsque l’espace de travail comporte plusieurs sous-projets et que vous souhaitez créer un objet de projet dbt à partir d’un sous-répertoire spécifique. Les espaces de travail sont sensibles à la casse et peuvent contenir des caractères spéciaux, de sorte que nous recommandons de mettre le nom de l’espace de travail entre guillemets doubles.

CREATE DBT PROJECT sales_db.dbt_projects_schema.sales_model_from_workspace
  FROM 'snow://workspace/user$.public."My dbt Project Workspace"/versions/live/project2'

EXECUTE DBT PROJECT sales_db.dbt_projects_schema.sales_model_from_workspace
  ARGS = 'run --target prod';