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.
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-databrickspackage 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.
-
Dans votre Workspace, cliquez
sur **Tâches et pipelines** dans la barre latérale.
-
Cliquez sur Créer , puis sur Job .
-
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**.
-
En option, remplacez le nom du Job, qui est par default
New Job <date-time>, par le nom de votre Job. -
Sous **Nom de la tâche**, saisissez un nom pour la tâche.
-
Dans le menu déroulant Source , choisissez fournisseur Git car cet exemple utilise le projet jaffle shop situé dans un repository Git.
-
Dans Répertoire du projet , saisissez l’URL du Git repository :
https://github.com/dbt-labs/jaffle_shop.git.
-
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é.
-
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.
-
(Facultatif) Vous pouvez spécifier un catalogue et un schéma pour la sortie de la tâche. Le
defaultcatalogue et le schéma default sont utilisés. -
(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.
-
Dans le menu déroulant Environnement et bibliothèques , laissez
dbt-defaultsélectionné. -
Cliquez sur Enregistrer la tâche .
-
Pour exécuter le job maintenant, cliquez sur
.
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 :
SHOW tables IN <schema>;
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 :
{
"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.
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 |
|---|---|
| URL de download pour les artefacts de sortie dbt packagés, tels que |
| Logs dbt intégrés de l'exécution de la tâche. |
| Indique si la valeur |
| 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.
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.
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.
-
Créez un fork du repository jaffle_shop.
-
Clonez le repository forké sur votre bureau. Par exemple, vous pourriez exécuter une commande comme celle qui suit :
Bashgit clone https://github.com/<username>/jaffle_shop.gitRemplacez
<username>par votre identifiant GitHub. -
Créez un nouveau fichier appelé
profiles.ymldans le répertoirejaffle_shopavec le contenu suivant :YAMLjaffle_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.
- Remplacez
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.
-
Intégrez ce fichier à Git et poussez-le vers votre repository forké. Par exemple, vous pouvez exécuter des commandes comme les suivantes :
Bashgit add profiles.yml
git commit -m "adding profiles.yml for my Databricks job"
git push -
Cliquez sur
Jobs et pipelines dans la barre latérale de l'interface utilisateur de Databricks.
-
Sélectionnez le job dbt et cliquez sur l'onglet tab .
-
Dans Source , cliquez sur Modifier et saisissez les détails de votre repository GitHub forké jaffle shop.

-
Dans **SQL Warehouse**, sélectionnez **Aucun (Manuel)**.
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.
- Dans **Profiles Directory**, saisissez le chemin relatif du
profiles.ymlré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
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.