Verwenden von dbt-Transformationen in einem Azure Databricks-Auftrag
Sie können Ihre dbt Core-Projekte als Aufgabe in einem Azure Databricks-Auftrag ausführen. Indem Sie Ihr dbt Core-Projekt als Auftragsaufgabe ausführen, können Sie von den folgenden Funktionen von Azure Databricks-Jobs profitieren:
- Automatisieren Sie Ihre dbt-Aufgaben und planen Sie Workflows, die dbt-Aufgaben enthalten.
- Überwachen Sie Ihre dbt-Transformationen und senden Sie Benachrichtigungen über den Status der Transformationen.
- Binden Sie Ihr dbt-Projekt in einen Workflow mit anderen Aufgaben ein. Ihr Workflow kann beispielsweise Daten mit Auto Loader aufnehmen, die Daten mit dbt transformieren und die Daten mit einer Notebook-Aufgabe analysieren.
- Automatische Archivierung der Artefakte aus Auftragsausführungen, einschließlich Protokolle, Ergebnisse, Manifeste und Konfiguration.
Weitere Informationen zu dbt Core finden Sie in der dbt-Dokumentation.
Entwicklungs- und Produktionsworkflow
Databricks empfiehlt, Ihre dbt-Projekte gegen ein Databricks SQL-Warehouse zu entwickeln. Mithilfe eines Databricks-SQL-Warehouses können Sie das von dbt generierte SQL testen und den SQL-Warehouse-Abfrageverlauf verwenden, um die von dbt generierten Abfragen zu debuggen.
Um Ihre dbt-Transformationen in der Produktion auszuführen, empfiehlt Databricks die Verwendung der dbt-Aufgabe in einem Databricks-Auftrag. Standardmäßig führt die dbt-Aufgabe den dbt-Python-Prozess mit Azure Databricks-Computeressourcen und den mit dbt generierten SQL-Code mit dem ausgewählten SQL-Warehouse aus.
Sie können dbt-Transformationen in einem SQL-Warehouse der Ebene „Serverlos“ oder „Pro“, einer Azure Databricks-Computeressource und in jedem anderen Warehouse mit dbt-Unterstützung ausführen. In diesem Artikel werden die ersten beiden Optionen mit Beispielen erläutert.
Wenn Ihr Arbeitsbereich für Unity Catalog aktiviert ist und auch serverlose Aufträge aktiviert sind, wird der Auftrag standardmäßig mit serverlosem Computing ausgeführt.
Hinweis
Die Entwicklung von dbt-Modellen für ein SQL-Warehouse und deren Ausführung in der Produktion auf Azure Databricks-Computeressourcen kann zu geringfügigen Unterschieden in der Leistung und der Unterstützung der SQL-Sprache führen. Databricks empfiehlt die Verwendung derselben Databricks Runtime-Version für die Computeressource und das SQL-Warehouse.
Anforderungen
Informationen zur Verwendung von dbt Core und dem
dbt-databricks
Paket zum Erstellen und Ausführen von dbt-Projekten in Ihrer Entwicklungsumgebung finden Sie unter Verbinden mit dbt Core.Databricks empfiehlt das dbt-databricks-Paket , nicht das dbt-spark-Paket. Das dbt-databricks-Paket ist ein für Databricks optimierter Fork von dbt-spark.
Um dbt-Projekte in einem Azure Databricks-Auftrag zu verwenden, müssen Sie die Git-Integration für Databricks-Git-Ordner einrichten. Sie können ein dbt-Projekt nicht von DBFS aus ausführen.
Sie müssen SQL-Warehouses der Ebenen „Serverless“ oder „Pro“ aktiviert haben.
Sie müssen über die Databricks SQL-Berechtigung verfügen.
Erstellen Sie Ihren ersten dbt-Auftrag und führen Sie ihn aus
Das folgende Beispiel verwendet das Projekt jaffle_shop, ein Beispielprojekt, das Kernkonzepte von dbt demonstriert. Führen Sie die folgenden Schritte aus, um einen Job zu erstellen, der das Jaffle-Shop-Projekt ausführt.
Wechseln Sie zu Ihrer Azure Databricks-Zielseite, und führen Sie einen der folgenden Schritte aus:
- Klicken Sie auf der Randleiste auf Workflows und dann auf .
- Klicken Sie auf der Seitenleiste auf Neu, und wählen Sie Auftrag aus.
Ersetzen Sie im Aufgabentextfeld auf der Registerkarte Aufgaben den Text Namen für Ihren Auftrag hinzufügen… durch den Namen Ihres Auftrags.
Geben Sie unter Aufgabenname einen Namen für die Aufgabe ein.
Wählen Sie unter Typ den Aufgabentyp dbt aus.
Im Dropdownmenü Quelle können Sie die Option Arbeitsbereich auswählen, um ein dbt-Projekt zu verwenden, das sich in einem Azure Databricks-Arbeitsbereichsordner befindet, oder Git-Anbieter für ein Projekt, das sich in einem Git-Remoterepository befindet. Da in diesem Beispiel das jaffle shop-Projekt in einem Git-Repository verwendet wird, wählen Sie Git-Anbieter aus, klicken Sie auf Bearbeiten, und geben Sie die Details für das GitHub-Repository „jaffle shop“ ein.
- Geben Sie unter Git-Repository-URL die URL für das Jaffle-Shop-Projekt ein.
- In Git-Referenz (branch / tag / commit),
main
eingeben. Sie können auch ein Tag oder SHA verwenden.
Klicken Sie auf Confirm (Bestätigen).
Geben Sie in den Textfeldern dbt-Befehle die auszuführenden dbt-Befehle an (deps, seed, und run). Sie müssen jedem Befehl ein
dbt
voranstellen. Befehle werden in der angegebenen Reihenfolge ausgeführt.Wählen Sie in SQL-Warehouse ein SQL-Warehouse aus, um das von dbt generierte SQL auszuführen. Das Dropdownmenü SQL-Warehouse zeigt nur SQL-Warehouses der Ebenen „Serverless“ oder „Pro“ an.
(Optional) Sie können ein Schema für die Aufgabenausgabe angeben. Standardmäßig wird das Schema
default
verwendet.(Optional:) Wenn Sie die Computekonfiguration ändern möchten, die dbt Core ausführt, wählen Sie dbt CLI-Compute aus.
(Optional) Sie können eine dbt-databricks-Version für die Aufgabe angeben. Um beispielsweise Ihre dbt-Aufgabe an eine bestimmte Version für Entwicklung und Produktion anzuheften:
- Unter Abhängige Bibliotheken klicken Sie auf das neben der aktuellen dbt-databricks-Version.
- Klicken Sie auf Hinzufügen.
- Wählen Sie im Dialogfeld Abhängige Bibliothek hinzufügen die Option PyPI aus, und geben Sie die dbt-Paketversion im Textfeld Paket ein (etwa
dbt-databricks==1.6.0
). - Klicken Sie auf Hinzufügen.
Hinweis
Databricks empfiehlt, Ihre dbt-Aufgaben an eine bestimmte Version des dbt-databricks-Pakets anzuheften, um sicherzustellen, dass dieselbe Version für Entwicklungs- und Produktionsausführungen verwendet wird. Databricks empfiehlt Version 1.6.0 oder höher des dbt-databricks-Pakets.
Klicken Sie auf Erstellen.
Um den Auftrag sofort auszuführen, klicken sie auf die .
Zeigen Sie die Ergebnisse Ihrer dbt-Auftragsaufgabe an
Wenn der Auftrag abgeschlossen ist, können Sie die Ergebnisse testen, indem Sie SQL-Abfragen von einem Notebook aus ausführen oder Abfragen in Ihrem Databricks-Warehouse ausführen. Weitere Informationen finden Sie beispielsweise in den folgenden Beispielabfragen:
SHOW tables IN <schema>;
SELECT * from <schema>.customers LIMIT 10;
Ersetzen Sie <schema>
durch den in der Aufgabenkonfiguration konfigurierten Schemanamen.
API-Beispiel
Sie können auch die Auftrags-API verwenden, um Aufträge zu erstellen und zu verwalten, die dbt-Aufgaben enthalten. Das folgende Beispiel erstellt einen Auftrag mit einer einzelnen dbt-Aufgabe:
{
"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"
},
"job_clusters": [
{
"job_cluster_key": "dbt_CLI",
"new_cluster": {
"spark_version": "10.4.x-photon-scala2.12",
"node_type_id": "Standard_DS3_v2",
"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"
}
}
]
}
]
}
(Erweitert) Ausführen von dbt mit einem benutzerdefinierten Profil
Verwenden Sie zum Ausführen Ihrer dbt-Aufgabe mit einem SQL-Warehouse (empfohlen) oder einer universellen Computeressource eine benutzerdefinierte Datei vom Typ profiles.yml
, die das Warehouse oder die Azure Databricks-Computeressource definiert, mit dem bzw. der Sie eine Verbindung herstellen möchten. Führen Sie die folgenden Schritte aus, um einen Auftrag zu erstellen, der das Jaffle-Shop-Projekt mit einem Warehouse oder einer universellen Computeressource ausführt.
Hinweis
Nur ein SQL-Warehouse oder eine universelle Computeressource können als Ziel für eine dbt-Aufgabe verwendet werden. Sie können keine Auftragscomputeressource als Ziel für dbt verwenden.
Erstellen Sie einen Fork des jaffle_shop-Repositorys.
Klonen Sie das Fork-Repository auf Ihren Desktop. Sie könnten beispielsweise einen Befehl wie den folgenden ausführen:
git clone https://github.com/<username>/jaffle_shop.git
Ersetzen Sie
<username>
durch Ihr GitHub-Handle.Erstellen Sie im Verzeichnis
jaffle_shop
eine neue Datei namensprofiles.yml
mit folgendem Inhalt: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') }}"
- Ersetzen Sie
<schema>
durch einen Schemanamen für die Projekttabellen. - Ersetzen Sie zum Ausführen Ihrer dbt-Aufgabe mit einem SQL-Warehouse
<http-host>
durch den Wert Serverhostname von der Registerkarte Verbindungsdetails für Ihr SQL-Warehouse. Ersetzen Sie zum Ausführen Ihrer dbt-Aufgabe mit einer universellen Computeressource<http-host>
durch den Serverhostnamen auf der Registerkarte Erweiterte Optionen, JDBC/ODBC für Ihre Azure Databricks-Computeressource. - Ersetzen Sie zum Ausführen Ihrer dbt-Aufgabe mit einem SQL-Warehouse
<http-path>
durch den Wert HTTP-Pfad von der Registerkarte Verbindungsdetails für Ihr SQL-Warehouse. Ersetzen Sie zum Ausführen Ihrer dbt-Aufgabe mit einer universellen Computeressource<http-path>
durch den HTTP-Pfad auf der Registerkarte Erweiterte Optionen, JDBC/ODBC für Ihre Azure Databricks-Computeressource.
Sie geben in der Datei keine Geheimnisse wie Zugriffstoken an, da Sie diese Datei in die Quellcodeverwaltung einchecken werden. Stattdessen verwendet diese Datei die dbt-Templating-Funktionalität, um Anmeldeinformationen dynamisch zur Laufzeit einzufügen.
Hinweis
Die generierten Anmeldeinformationen sind für die Dauer der Ausführung bis maximal 30 Tage lang gültig und werden nach Abschluss automatisch widerrufen.
- Ersetzen Sie
Überprüfen Sie diese Datei in Git ein und schieben Sie sie in Ihr Fork-Repository. Sie könnten beispielsweise einen Befehl wie den folgenden ausführen:
git add profiles.yml git commit -m "adding profiles.yml for my Databricks job" git push
Klicken Sie auf der Seitenleiste der Databricks-Benutzeroberfläche auf Workflows.
Wählen Sie den dbt-Auftrag aus und klicken Sie auf die Registerkarte Aufgaben.
Klicken Sie unter Quelle auf Bearbeiten und geben Sie die Details für das GitHub-Repository von jaffle shop ein.
Wählen Sie in SQL-Warehouse die Option Keine (Manuell) aus.
Geben Sie im Profile-Verzeichnis den relativen Pfad zum Verzeichnis ein, das die
profiles.yml
Datei enthält. Lassen Sie den Pfadwert leer, um den Standard des Repositorystamms zu verwenden.
(Erweitert) Verwenden von dbt-Python-Modellen in einem Workflow
Hinweis
Die dbt-Unterstützung für Python-Modelle befindet sich im Betastadium und erfordert dbt 1.3 oder höher.
dbt unterstützt jetzt Python-Modelle für bestimmte Data Warehouses, einschließlich Databricks. Mit dbt-Python-Modellen können Sie Tools aus dem Python-Ökosystem verwenden, um Transformationen zu implementieren, deren Implementierung mit SQL schwierig ist. Sie können einen Azure Databricks-Auftrag erstellen, um eine einzelne Aufgabe mit Ihrem dbt-Python-Modell auszuführen, oder Sie können die dbt-Aufgabe als Teil eines Workflows einschließen, der mehrere Aufgaben enthält.
Sie können keine Python-Modelle in einer dbt-Aufgabe mithilfe eines SQL-Warehouse ausführen. Weitere Informationen zur Verwendung von dbt-Python-Modellen mit Azure Databricks finden Sie in der dbt-Dokumentation unter Spezifische Data Warehouses.
Fehler und Troubleshooting
Profildatei existiert nicht Fehler
Fehlermeldung:
dbt looked for a profiles.yml file in /tmp/.../profiles.yml but did not find one.
Mögliche Ursachen:
Die profiles.yml
-Datei wurde im angegebenen $PATH nicht gefunden. Stellen Sie sicher, dass das Stammverzeichnis Ihres dbt-Projekts die Datei profiles.yml enthält.