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 serverlose Workflows aktiviert sind, wird der Auftrag standardmäßig über serverloses 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

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.

  1. Wechseln Sie zu Ihrer Azure Databricks-Zielseite, und führen Sie einen der folgenden Schritte aus:

    • Klicken Sie in der Seitenleiste auf Symbol „Aufträge“Workflows und dann auf die Schaltfläche Auftrag erstellen.
    • Klicken Sie auf der Seitenleiste auf Neues SymbolNeu, und wählen Sie Auftrag aus.
  2. Ersetzen Sie im Aufgabentextfeld auf der Registerkarte Aufgaben den Text Namen für Ihren Auftrag hinzufügen… durch den Namen Ihres Auftrags.

  3. Geben Sie unter Aufgabenname einen Namen für die Aufgabe ein.

  4. Wählen Sie unter Typ den Aufgabentyp dbt aus.

    Hinzufügen einer dbt-Aufgabe

  5. 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.

    Konfigurieren von dbt project repo

    • 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.
  6. Klicken Sie auf Confirm (Bestätigen).

  7. 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.

    Konfigurieren von dbt-Befehlen

  8. 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.

  9. (Optional) Sie können ein Schema für die Aufgabenausgabe angeben. Standardmäßig wird das Schema default verwendet.

  10. (Optional:) Wenn Sie die Computekonfiguration ändern möchten, die dbt Core ausführt, wählen Sie dbt CLI-Compute aus.

  11. (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 Löschen-Symbol 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.

    Konfigurieren Sie die dbt-databricks Version

    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.

  12. Klicken Sie auf Erstellen.

  13. Um den Auftrag sofort auszuführen, klicken sie auf die Jetzt ausführen-Schaltfläche.

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.

  1. Erstellen Sie einen Fork des jaffle_shop-Repositorys.

  2. 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.

  3. Erstellen Sie im Verzeichnis jaffle_shop eine neue Datei namens profiles.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.

  4. Ü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
    
  5. Klicken Sie in der Seitenleiste der Databricks-Benutzeroberfläche auf AuftragssymbolWorkflows.

  6. Wählen Sie den dbt-Auftrag aus und klicken Sie auf die Registerkarte Aufgaben.

  7. Klicken Sie unter Quelle auf Bearbeiten und geben Sie die Details für das GitHub-Repository von jaffle shop ein.

    Konfigurieren Sie das verzweigte Projekt-Repository

  8. Wählen Sie in SQL-Warehouse die Option Keine (Manuell) aus.

  9. 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.