Aller au contenu principal

Utiliser les transformations dbt dans les Lakeflow Jobs

Vous pouvez exécuter vos projets dbt Core en tant que tâche dans un Job. En exécutant votre projet dbt Core en tant que tâche de Job, vous pouvez bénéficier des fonctionnalités Lakeflow Jobs suivantes :

  • Automatisez vos tâches dbt et planifiez des workflows qui incluent des tâches dbt.
  • Surveillez vos Transformations dbt et envoyez des notifications sur l'état des Transformations.
  • Incluez votre projet dbt dans un workflow avec d'autres tâches. Par exemple, votre workflow peut ingérer des données avec Auto Loader, transformer les données avec dbt et analyser les données avec une tâche de Notebook.
  • Archivage automatique des artefacts des exécutions de Job, y compris les Logs, les résultats, les manifestes et la configuration.

Pour en savoir plus sur dbt Core, consultez la documentation dbt.

Flux de travail de développement et de production

Databricks recommande de développer vos projets dbt sur un Databricks SQL warehouse. En utilisant un Databricks SQL warehouse, vous pouvez tester le SQL généré par dbt et utiliser l'historique des requêtes du SQL Warehouse pour déboguer les requêtes générées par dbt.

Pour exécuter vos Transformations dbt en production, Databricks recommande d'utiliser la tâche dbt dans un Job Databricks. Par default, la tâche dbt exécute le processus Python dbt à l'aide de Databricks compute et le SQL généré par dbt sur le SQL warehouse sélectionné.

Vous pouvez exécuter des transformations dbt sur un SQL Warehouse Serverless ou un SQL Warehouse Pro, sur le compute Databricks, ou sur tout autre warehouse pris en charge par dbt. Cet article aborde les deux premières options avec des exemples.

Si votre Workspace est compatible Unity Catalog et que les Jobs Serverless sont activés, le Job s'exécute par default sur un compute Serverless.

remarque

Le développement de modèles dbt sur un SQL Warehouse et leur exécution en production sur le compute Databricks peuvent entraîner de subtiles différences de performances et de prise en charge du langage SQL. Databricks recommande d'utiliser la même version de Databricks Runtime pour le compute et le SQL Warehouse.

Exigences

  • Pour savoir comment utiliser dbt Core et le dbt-databricks package afin de créer et d’exécuter des projets dbt dans votre environnement de développement, consultez Se connecter à dbt Core.

    Databricks recommande le package dbt-databricks, et non le package dbt-spark. Le package dbt-databricks est un fork de dbt-spark optimisé pour Databricks.

  • Pour utiliser des projets dbt dans un job Databricks, vous devez configurer les dossiers Git Databricks. Vous ne pouvez pas exécuter un projet dbt depuis DBFS.

  • Vous devez avoir des SQL warehouses Serverless ou Pro activés.

  • Vous devez disposer du droit d'accès Databricks SQL.

Créez et exécutez votre premier job dbt

L'exemple suivant utilise le projet jaffle_shop, un exemple de projet qui illustre les concepts clés de dbt. Pour créer un job qui exécute le projet jaffle shop, effectuez les étapes suivantes.

  1. Dans votre Workspace, cliquez Icône Workflows. sur **Tâches et pipelines** dans la barre latérale.

  2. Cliquez sur Créer , puis sur Job .

  3. Cliquez sur la vignette **dbt** pour configurer la première tâche. Si la tuile **dbt** n'est pas disponible, cliquez sur **Ajouter un autre type de tâche** et recherchez **dbt**.

  4. En option, remplacez le nom du Job, qui est par default New Job <date-time> , par le nom de votre Job.

  5. Sous **Nom de la tâche**, saisissez un nom pour la tâche.

  6. Dans le menu déroulant Source , choisissez fournisseur Git car cet exemple utilise le projet jaffle shop situé dans un repository Git.

  7. Dans Répertoire du projet , saisissez l’URL du Git repository : https://github.com/dbt-labs/jaffle_shop.git.

    Configurez le dépôt de projet dbt

  8. Dans les zones de texte des commandes dbt , spécifiez les commandes dbt à exécuter ( deps , seed et run ). Celles-ci devraient être les default. Vous devez faire précéder chaque commande de dbt. Les commandes sont exécutées dans l'ordre spécifié.

    Configurer les commandes dbt

  9. Dans SQL Warehouse , sélectionnez un SQL Warehouse pour exécuter le SQL généré par dbt. Le menu déroulant SQL Warehouse n'affiche que les SQL Warehouses serverless et Pro.

  10. (Facultatif) Vous pouvez spécifier un catalogue et un schéma pour la sortie de la tâche. Le default catalogue et le schéma default sont utilisés.

  11. (Facultatif) Si vous souhaitez modifier la configuration de compute qui exécute dbt Core, cliquez sur dbt CLI compute . Choisissez une option de compute existante ou cliquez sur Ajouter un nouveau Job cluster pour créer un nouveau Job cluster.

  12. Dans le menu déroulant Environnement et bibliothèques , laissezdbt-default sélectionné.

  13. Cliquez sur Enregistrer la tâche .

  14. Pour exécuter le job maintenant, cliquez sur Bouton Exécuter maintenant.

Affichez les résultats de votre tâche de job dbt

Lorsque le job est terminé, vous pouvez tester les résultats en exécutant des requêtes SQL à partir d'un notebook ou en exécutant des requêtes dans votre SQL Warehouse. Par exemple, consultez les exemples de requêtes suivants :

SQL
 SHOW tables IN <schema>;
SQL
SELECT * from <schema>.customers LIMIT 10;

Remplacez <schema> par le nom du schéma configuré dans la configuration de la tâche.

Exemple d'API

Vous pouvez également utiliser l'API Jobs pour créer et gérer des Jobs qui incluent des tâches dbt. L'exemple suivant crée un Job avec une seule tâche dbt :

JSON
{
"name": "jaffle_shop dbt job",
"max_concurrent_runs": 1,
"git_source": {
"git_url": "https://github.com/dbt-labs/jaffle_shop",
"git_provider": "gitHub",
"git_branch": "main",
"sparse_checkout": {
"patterns": ["models", "seeds"]
}
},
"job_clusters": [
{
"job_cluster_key": "dbt_CLI",
"new_cluster": {
"spark_version": "10.4.x-photon-scala2.12",
"node_type_id": "i3.xlarge",
"num_workers": 0,
"spark_conf": {
"spark.master": "local[*, 4]",
"spark.databricks.cluster.profile": "singleNode"
},
"custom_tags": {
"ResourceClass": "SingleNode"
}
}
}
],
"tasks": [
{
"task_key": "transform",
"job_cluster_key": "dbt_CLI",
"dbt_task": {
"commands": ["dbt deps", "dbt seed", "dbt run"],
"warehouse_id": "1a234b567c8de912"
},
"libraries": [
{
"pypi": {
"package": "dbt-databricks>=1.0.0,<2.0.0"
}
}
]
}
]
}

Accéder au résultat de la tâche dbt et aux artefacts

Une fois qu'une tâche dbt est exécutée, vous pouvez récupérer la sortie de la tâche par programme à l'aide de la CLI Databricks ou de l'API Jobs. La réponse inclut les logs en ligne et un link de download pour les artefacts archivés.

important

Pour les Jobs multitâches, utilisez l'ID d'exécution de la tâche dbt individuelle, et non l'ID d'exécution du Job parent. L'utilisation de l'ID d'exécution parent renvoie l'erreur suivante :

Retrieving the output of runs with multiple tasks is not supported. Please retrieve the output of each individual task run instead.

La réponse comprend les champs suivants pour les tâches dbt :

Champ

Description

dbt_output.artifacts_link

URL de download pour les artefacts de sortie dbt packagés, tels que dbt-output.tar.gz.

logs

Logs dbt intégrés de l'exécution de la tâche.

logs_truncated

Indique si la valeur logs renvoyée a été tronquée en raison des limites de taille de la réponse. Si true, les logs sont toujours renvoyés en tant que préfixe de la sortie complète.

metadata

Métadonnées d'exécution de tâche incluant l'état, la synchronisation, les ID et la configuration de la tâche.

Champ

Description

dbt_output.artifacts_link

URL de download pour les artefacts de sortie dbt packagés, tels que dbt-output.tar.gz.

logs

Logs dbt intégrés de l'exécution de la tâche.

logs_truncated

Indique si la valeur logs renvoyée a été tronquée en raison des limites de taille de la réponse. Si true, les logs sont toujours renvoyés en tant que préfixe de la sortie complète.

metadata

Métadonnées d'exécution de tâche incluant l'état, la synchronisation, les ID et la configuration de la tâche.

Databricks CLI

Utilisez la commande databricks jobs get-run-output pour récupérer le résultat de la tâche. Remplacez <task_run_id> par l'ID d'exécution de votre tâche dbt.

Bash
databricks jobs get-run-output <task_run_id> --output JSON

API Jobs

Envoyez une requête GET à l'Endpoint runs/get-output. Remplacez <task_run_id> par l'ID d'exécution de votre tâche dbt.

GET /api/2.0/jobs/runs/get-output?run_id=<task_run_id>

(Avancé) Exécuter dbt avec un profil personnalisé

Pour exécuter votre tâche dbt avec un SQL Warehouse (recommandé) ou un calcul multifonction, utilisez un profiles.yml personnalisé définissant le warehouse ou le compute Databricks auquel se connecter. Pour créer un Job qui exécute le projet jaffle shop avec un warehouse ou un compute multifonction, suivez les étapes suivantes.

remarque

Seul un SQL Warehouse ou un compute multifonction peut être utilisé comme cible pour une tâche dbt. Vous ne pouvez pas utiliser le compute de job comme cible pour dbt.

  1. Créez un fork du repository jaffle_shop.

  2. Clonez le repository forké sur votre bureau. Par exemple, vous pourriez exécuter une commande comme celle qui suit :

    Bash
    git clone https://github.com/<username>/jaffle_shop.git

    Remplacez <username> par votre identifiant GitHub.

  3. Créez un nouveau fichier appelé profiles.yml dans le répertoire jaffle_shop avec le contenu suivant :

    YAML
    jaffle_shop:
    target: databricks_job
    outputs:
    databricks_job:
    type: databricks
    method: http
    schema: '<schema>'
    host: '<http-host>'
    http_path: '<http-path>'
    token: "{{ env_var('DBT_ACCESS_TOKEN') }}"
    • Remplacez <schema> par un nom de schéma pour les tables du projet Unity Catalog.
    • Pour exécuter votre tâche dbt avec un SQL Warehouse, remplacez <http-host> par la valeur Nom d'hôte du serveur de l'onglet Détails de la connexion de votre SQL Warehouse. Pour exécuter votre tâche dbt avec un compute polyvalent, remplacez <http-host> par la valeur **Hostname du serveur** de l'onglet Options avancées, JDBC/ODBC de votre compute Databricks.
    • Pour exécuter votre tâche dbt avec un SQL Warehouse, remplacez <http-path> par la valeur HTTP Path de l'onglet Détails de la connexion pour votre SQL Warehouse. Pour exécuter votre tâche dbt avec un compute polyvalent, remplacez <http-path> par la valeur du chemin HTTP de l'onglet Options avancées, JDBC/ODBC de votre compute Databricks.

    Vous ne spécifiez pas de secrets, tels que des jetons d'accès, dans le fichier, car vous archivez ce fichier dans le contrôle de code source. Au lieu de cela, ce fichier utilise la fonctionnalité de templating dbt pour insérer les identifiants dynamiquement au moment de l'exécution. Pour plus d'informations sur l'accès aux variables d'environnement dans dbt, consultez Variables d'environnement dans la documentation dbt.

remarque

Les identifiants générés sont valides pour la durée de l'exécution, jusqu'à un maximum de 30 jours, et sont automatiquement révoqués après la fin.

  1. Intégrez ce fichier à Git et poussez-le vers votre repository forké. Par exemple, vous pouvez exécuter des commandes comme les suivantes :

    Bash
    git add profiles.yml
    git commit -m "adding profiles.yml for my Databricks job"
    git push
  2. Cliquez sur Icône Workflows. Jobs et pipelines dans la barre latérale de l'interface utilisateur de Databricks.

  3. Sélectionnez le job dbt et cliquez sur l'onglet tab .

  4. Dans Source , cliquez sur Modifier et saisissez les détails de votre repository GitHub forké jaffle shop.

    Configurez le dépôt de projet forké

  5. Dans **SQL Warehouse**, sélectionnez **Aucun (Manuel)**.

remarque

Si vous avez défini un catalogue ou un schéma dans la configuration de tâche standard, effacez les deux avant de passer le SQL warehouse à Aucun (Manuel) . Un catalogue ou un schéma ne peut être défini que lorsqu'un SQL Warehouse est sélectionné ; laisser l'un ou l'autre défini entraîne l'échec de la validation de la tâche avec l'erreur. Catalog can only be defined if the warehouseId is defined.

  1. Dans **Profiles Directory**, saisissez le chemin relatif du profiles.yml répertoire contenant le fichier. Laissez le champ du chemin vide pour utiliser la valeur par défaut de la racine du repository.

(Avancé) Utiliser des modèles Python dbt dans un workflow

remarque

La prise en charge de dbt pour les modèles Python est en version bêta et nécessite dbt 1.3 ou une version ultérieure.

dbt prend désormais en charge les modèles Python sur des data warehouses spécifiques, y compris Databricks. Avec les modèles dbt Python, vous pouvez utiliser les outils de l'écosystème Python pour implémenter des transformations difficiles à réaliser avec SQL. Vous pouvez créer un Job Databricks pour exécuter une tâche unique avec votre modèle Python dbt, ou vous pouvez inclure la tâche dbt dans un workflow qui inclut plusieurs tâches.

Vous ne pouvez pas exécuter de modèles Python dans une tâche dbt à l'aide d'un SQL Warehouse. Pour plus d'informations sur l'utilisation des modèles Python dbt avec Databricks, consultez la section Data warehouses spécifiques dans la documentation dbt.

Erreurs et dépannage

Erreur : le fichier de profil n'existe pas

**Message d'erreur** :

dbt looked for a profiles.yml file in /tmp/.../profiles.yml but did not find one.

**Causes possibles** :

Le fichier profiles.yml n’a pas été trouvé dans le $PATH spécifié. Assurez-vous que la racine de votre projet dbt contient le fichier profiles.yml.