Dataform – Übersicht

In diesem Dokument werden Dataform-Konzepte und -Prozesse vorgestellt.

Dataform ist ein Dienst, mit dem Datenanalysten komplexe Workflows für die Datentransformation in BigQuery entwickeln, testen und planen sowie eine Versionsverwaltung dafür ausführen können.

Mit Dataform können Sie die Datentransformation im ELT-Prozess (Extrahieren, Laden und Transformieren) für die Datenintegration verwalten. Nachdem Rohdaten aus Quellsystemen extrahiert und in BigQuery geladen wurden, können Sie sie mit Dataform in eine genau definierte, getestete und dokumentierte Suite von Datentabellen umwandeln.

Mit Dataform können Sie die folgenden Datentransformationsaktionen ausführen:

  • Workflows für die Datentransformation entwickeln und ausführen
  • Über Git mit Teammitgliedern an der Workflowentwicklung zusammenarbeiten
  • Eine große Anzahl von Tabellen und deren Abhängigkeiten verwalten
  • Quelldaten deklarieren und Tabellenabhängigkeiten verwalten
  • Eine Visualisierung des Abhängigkeitsbaums Ihres Workflows ansehen
  • Daten mit SQL-Code in einem zentralen Repository verwalten
  • Code mit JavaScript wiederverwenden
  • Datenrichtigkeit mit Qualitätstests für Quell- und Ausgabetabellen testen
  • Versionsverwaltung für SQL-Code
  • Datentabellen im SQL-Code dokumentieren

Datentransformationsprozesse in Dataform

Der Datentransformationsworkflow für Dataform sieht so aus:

  1. Mit Dataform können Sie Repositories erstellen, um Ihren Code zu verwalten.
  2. Mit Dataform können Sie Arbeitsbereiche für die Entwicklung erstellen.
  3. Mit Dataform können Sie Workflows in einem Entwicklungsarbeitsbereich entwickeln.
  4. Dataform kompiliert Dataform-Core in SQL.
  5. Dataform führt den Abhängigkeitsbaum aus.

Mit Dataform können Sie Repositories erstellen, um Ihren Code zu verwalten

In einem Dataform-Repository verwenden Sie Dataform-Core, eine Erweiterung von SQL, um SQLX-Dateien zu schreiben, in denen Sie Ihren Workflow definieren. Dataform-Repositories unterstützen die Versionsverwaltung. Sie können ein Dataform Repository mit einem Git-Anbieter eines Drittanbieters verknüpfen.

Mit Dataform können Sie Arbeitsbereiche für die Entwicklung erstellen

Sie können Entwicklungsarbeitsbereiche in einem Dataform-Repository für die Dataform-Core-Entwicklung erstellen. In einem Entwicklungsarbeitsbereich können Sie Änderungen am Repository vornehmen, es kompilieren, testen und über Git in das Haupt-Repository übertragen.

Mit Dataform können Sie Dataform-Core in einem Entwicklungsarbeitsbereich entwickeln

In einem Entwicklungsarbeitsbereich können Sie Tabellen, ihre Abhängigkeiten und die Transformationslogik definieren und dokumentieren, um Ihren Workflow zu erstellen. Sie können auch Aktionen in JavaScript konfigurieren.

Dataform kompiliert Dataform-Core

Während der Kompilierung führt Dataform die folgenden Aufgaben aus:

  • Kompiliert Dataform-Core in einen Workflow aus Standard-SQL.
  • Fügt dem Code Boilerplate-SQL-Anweisungen wie CREATE TABLE oder INSERT inline mit Ihrer Abfragekonfiguration hinzu.
  • Transpiliert (kompiliert Quellcode zu Quellcode) JavaScript in SQL.
  • Löst Abhängigkeiten auf und sucht nach Fehlern, einschließlich fehlender oder zirkulärer Abhängigkeiten.
  • Erstellt den Abhängigkeitsbaum aller Aktionen, die in BigQuery ausgeführt werden sollen.

Die Dataform-Kompilierung ist hermetisch, um die Konsistenz der Kompilierung zu überprüfen. Das bedeutet, dass derselbe Code jedes Mal zum selben SQL-Kompilierungsergebnis kompiliert wird. Dataform kompiliert Ihren Code in einer Sandbox-Umgebung ohne Internetzugriff. Während der Kompilierung sind keine zusätzlichen Aktionen wie das Aufrufen externer APIs möglich.

Wenn Sie in Echtzeit debuggen möchten, können Sie den kompilierten Workflow Ihres Projekts in einem interaktiven Diagramm in Ihrem Entwicklungsarbeitsbereich prüfen.

Dataform führt den Abhängigkeitsbaum aus

In BigQuery führt Dataform die folgenden Aufgaben aus:

  • Führt SQL-Befehle in der Reihenfolge des Abhängigkeitsbaums aus.
  • Führt Assertion-Abfragen für Ihre Tabellen und Ansichten aus, um die Richtigkeit der Daten zu überprüfen.
  • Führt andere von Ihnen definierte SQL-Vorgänge aus.
  • Aktualisiert Metadaten in Knowledge Catalog.

Nach der Ausführung können Sie Ihre Tabellen und Ansichten für alle Ihre Analysezwecke verwenden.

In den Logs können Sie sehen, welche Tabellen erstellt wurden, ob Assertions bestanden oder fehlgeschlagen sind, wie lange die Ausführung der einzelnen Aktionen gedauert hat und weitere Informationen. Sie können auch den genauen SQL-Code sehen, der in BigQuery ausgeführt wurde.

Dataform-Funktionen

Mit Dataform können Sie Tabellen, inkrementelle Tabellen oder Ansichten entwickeln und in BigQuery bereitstellen. Dataform bietet eine Weboberfläche für die folgenden Aktivitäten:

  • Workflowentwicklung
  • Verbindung mit GitHub, GitLab, Azure DevOps Services und Bitbucket
  • Continuous Integration und Continuous Deployment
  • Workflowausführung

In den folgenden Abschnitten werden die Hauptfunktionen von Dataform beschrieben.

Repositories

Jedes Dataform-Projekt wird in einem Repository gespeichert. Ein Dataform-Repository enthält eine Sammlung von JSON-Konfigurationsdateien, SQLX-Dateien und JavaScript-Dateien.

Dataform-Repositories enthalten die folgenden Arten von Dateien:

  • Konfigurationsdateien

    Mit JSON- oder SQLX-Konfigurationsdateien können Sie Ihre Workflows konfigurieren. Sie enthalten die allgemeine Konfiguration, Ausführungszeitpläne oder Schemas zum Erstellen neuer Tabellen und Ansichten.

  • Definitionen

    Definitionen sind SQLX- und JavaScript-Dateien, die neue Tabellen, Ansichten, und zusätzliche SQL-Vorgänge definieren, die in BigQuery ausgeführt werden sollen.

  • Einschlüsse

    Einschlüsse sind JavaScript-Dateien, in denen Sie Variablen und Funktionen definieren können, die in Ihrem Projekt verwendet werden sollen.

Jedes Dataform-Repository muss mit einem benutzerdefinierten Dienstkonto verbunden sein. Sie wählen ein benutzerdefiniertes Dienstkonto aus, wenn Sie ein Repository erstellen. Sie können das Dienstkonto später bearbeiten.

Versionsverwaltung

Dataform verwendet das Git-Versionsverwaltungssystem, um jede Änderung an Projektdateien aufzuzeichnen und Dateiversionen zu verwalten.

Jedes Dataform-Repository kann sein eigenes Git-Repository verwalten oder mit einem Remote-Git-Repository verbunden sein. Sie können ein Dataform-Repository mit einem Repository von GitHub, GitLab, Azure DevOps Services, Bitbucket oder Secure Source Manager verbinden (Secure Source Manager-Unterstützung ist in der Vorschauphase).

Nutzer verwalten die Versionen ihres Workflowcodes in Dataform-Arbeitsbereichen. In einem Dataform-Arbeitsbereich können Sie Änderungen aus dem Repository abrufen, alle oder ausgewählte Änderungen übernehmen und sie in Git-Zweige des Repositorys übertragen.

Workflowentwicklung

In Dataform nehmen Sie Änderungen an Dateien und Verzeichnissen in einem Entwicklungsarbeitsbereich vor. Ein Entwicklungsarbeitsbereich ist eine virtuelle, bearbeitbare Kopie des Inhalts eines Git-Repositorys. Dataform behält den Status von Dateien in Ihrem Entwicklungsarbeitsbereich zwischen Sitzungen bei.

In einem Entwicklungsarbeitsbereich können Sie Workflowaktionen entwickeln mit Dataform-Core mit SQLX und JavaScript oder ausschließlich mit JavaScript. Sie können Ihren Dataform-Core- oder JavaScript-Code automatisch formatieren.

Jedes Element eines Dataform-Workflows, z. B. eine Tabelle oder eine Assertion, entspricht einer Aktion, die Dataform in BigQuery ausführt. Eine Tabellendefinitionsdatei ist beispielsweise eine Aktion zum Erstellen oder Aktualisieren der Tabelle in BigQuery.

In einem Dataform-Arbeitsbereich können Sie die folgenden Workflowaktionen entwickeln:

Sie können JavaScript verwenden, um Ihren Dataform-Workflowcode auf folgende Weise wiederzuverwenden:

Dataform kompiliert den Workflowcode in Ihrem Arbeitsbereich in Echtzeit. In Ihrem Arbeitsbereich können Sie die kompilierten Abfragen und Details der Aktionen in jeder Datei ansehen. Sie können auch den Kompilierungsstatus und Fehler in der bearbeiteten Datei oder im Repository ansehen.

Wenn Sie die Ausgabe einer kompilierten SQL-Abfrage testen möchten, bevor Sie sie in BigQuery ausführen, können Sie eine Vorschau der Abfrage in Ihrem Dataform-Arbeitsbereich ausführen.

Wenn Sie den gesamten in Ihrem Arbeitsbereich definierten Workflow prüfen möchten, können Sie ein interaktives kompiliertes Diagramm ansehen das alle kompilierten Aktionen in Ihrem Workflow und die Beziehungen zwischen ihnen zeigt.

Workflowkompilierung

Dataform verwendet Standardkompilierungseinstellungen, die in der Datei mit den Workfloweinstellungen konfiguriert sind, um den Workflowcode in Ihrem Arbeitsbereich in Echtzeit in SQL zu kompilieren, und ein Kompilierungsergebnis des Arbeitsbereichs zu erstellen.

Sie können die Kompilierungseinstellungen überschreiben, um anzupassen, wie Dataform Ihren Workflow in ein Kompilierungsergebnis kompiliert.

Mit Überschreibungen der Arbeitsbereichskompilierung, können Sie Kompilierungsüberschreibungen für alle Arbeitsbereiche in einem Repository konfigurieren. Sie können dynamische Arbeitsbereichsüberschreibungen festlegen, um Kompilierungsergebnisse zu erstellen, die für jeden Arbeitsbereich angepasst sind. So werden Arbeitsbereiche zu isolierten Entwicklungsumgebungen. Sie können das Google Cloud Projekt überschreiben, in dem Dataform den Inhalt eines Arbeitsbereichs ausführt, allen kompilierten Tabellen ein Präfix hinzufügen und dem Standardschema ein Suffix hinzufügen.

Mit Releasekonfigurationen, können Sie Vorlagen für Kompilierungseinstellungen konfigurieren, um Kompilierungsergebnisse eines Dataform-Repositorys zu erstellen. In einer Releasekonfiguration können Sie das Google Cloud Projekt überschreiben, in dem Dataform die Kompilierungsergebnisse ausführt, allen kompilierten Tabellen ein Präfix hinzufügen, dem Standardschema ein Suffix hinzufügen und Kompilierungsvariablen hinzufügen. Sie können auch die Häufigkeit der Erstellung von Kompilierungsergebnissen festlegen. Wenn Sie Ausführungen von Kompilierungsergebnissen planen möchten, die in einer ausgewählten Releasekonfiguration erstellt wurden, können Sie eine Workflowkonfiguration erstellen.

Workflowausführung

Während einer Workflowausführung führt Dataform die Kompilierungsergebnisse von Workflows aus, um Assets in BigQuery zu erstellen oder zu aktualisieren.

Wenn Sie die in Ihrem Workflow definierten Tabellen und Ansichten in BigQuery erstellen oder aktualisieren möchten, können Sie eine Workflowausführung manuell in einem Entwicklungsarbeitsbereich starten oder Ausführungen planen.

Wenn Sie eine Workflowausführung auslösen, führt Dataform die Aktionen in der Reihenfolge aus, die durch ihre Abhängigkeiten definiert ist. Für jede Aktion führt Dataform die folgenden Schritte aus:

  1. Führt die kompilierte SQL-Abfrage in BigQuery aus.
  2. Aktualisiert den Aktionsstatus im Ausführungslog.
  3. Nach erfolgreichem Abschluss einer Aktion initiiert Dataform automatisch eine Metadatensynchronisierung mit Knowledge Catalog. Bei diesem Anreicherungsprozess wird Knowledge Catalog mit den semantischen Metadaten aktualisiert, die in Ihrer SQLX-Konfiguration definiert sind. Die Synchronisierung erfolgt asynchron und verwendet einen Wiederholungsmechanismus. So wird sichergestellt, dass sich Metadatenaktualisierungen nicht auf die Latenz Ihrer Pipeline auswirken oder zu Workflowfehlern führen, wenn die Dataplex API vorübergehend nicht verfügbar ist.

Sie können Dataform-Ausführungen in BigQuery auf folgende Weise planen:

Sie können Ausführungen auch mit Cloud Build-Triggern automatisieren.

Wenn Sie Fehler debuggen möchten, können Sie Ausführungen auf folgende Weise beobachten:

Dataform-Core

Dataform-Core ist eine Open-Source-Metasprache zum Erstellen von SQL-Tabellen und -Workflows. Dataform-Core erweitert SQL um ein System zur Verwaltung von Abhängigkeiten, automatisierte Datenqualitätstests und Datendokumentation.

Sie können Dataform-Core für die folgenden Zwecke verwenden:

  • Tabellen, Ansichten, materialisierte Ansichten oder inkrementelle Tabellen definieren.
  • Datentransformationslogik definieren.
  • Quelldaten deklarieren und Tabellenabhängigkeiten verwalten.
  • Tabellen- und Spaltenbeschreibungen im Code dokumentieren.
  • Funktionen und Variablen in verschiedenen Abfragen wiederverwenden.
  • Datenassertions schreiben, um die Datenkonsistenz zu überprüfen.

In Dataform verwenden Sie Dataform-Core, um Workflows zu entwickeln und Assets in BigQuery bereitzustellen.

Dataform-Core ist Teil des Open-Source-Dataform-Datenmodellierungsframeworks , das auch die Dataform CLI enthält. Sie können Dataform-Core lokal über die Dataform CLI außerhalb von Google Cloudkompilieren und ausführen.

Wenn Sie Dataform-Core verwenden möchten, schreiben Sie SQLX-Dateien. Jede SQLX-Datei enthält eine Abfrage, die eine Datenbankbeziehung definiert, die Dataform in BigQuery erstellt und aktualisiert.

Dataform kompiliert Ihren Dataform-Core-Code in Echtzeit, um ein SQL-Kompilierungsergebnis zu erstellen, das Sie in BigQuery ausführen können.

Die Dataform-Kompilierung ist hermetisch, um die Konsistenz der Kompilierung zu überprüfen. Das bedeutet, dass derselbe Code jedes Mal zum selben SQL-Kompilierungsergebnis kompiliert wird. Dataform kompiliert Ihren Code in einer Sandbox-Umgebung ohne Internetzugang. Während der Kompilierung sind keine zusätzlichen Aktionen wie das Aufrufen externer APIs möglich.

Konfigurationsblock der SQLX-Datei

Eine SQLX-Datei besteht aus einem Konfigurationsblock und einem Hauptteil. Alle Konfigurationseigenschaften und der Konfigurationsblock selbst sind optional. Daher ist jede einfache SQL-Datei eine gültige SQLX-Datei, die von Dataform unverändert ausgeführt wird.

Im Konfigurationsblock können Sie die folgenden Aktionen ausführen:

Abfragemetadaten angeben

Mit den Konfigurationsmetadaten können Sie konfigurieren, wie Dataform Abfragen in BigQuery materialisiert, z. B. den Ausgabetabellentyp, die Zieldatenbank oder Labels.

Daten dokumentieren

Sie können Ihre Tabellen und ihre Felder direkt im Konfigurationsblock dokumentieren. Die Dokumentation Ihrer Tabellen wird direkt an BigQuery und Knowledge Catalog gesendet. Sie können diese Dokumentation parsen und an andere Tools senden.

Das folgende Codebeispiel zeigt, wie Sie den Ausgabetabellentyp definieren, die Tabelle dokumentieren und Metadaten für Knowledge Catalog in einem Konfigurationsblock einer SQLX-Datei hinzufügen:

config {
  type: "table",
  description: "This table joins orders information from OnlineStore & payment information from PaymentApp",
  columns: {
    order_date: "The date when a customer placed their order",
    id: "Order ID as defined by OnlineStore",
    order_status: "The status of an order, for example, sent, delivered",
    customer_id: "Unique customer ID",
    payment_status: "The status of a payment, for example, pending, paid",
    payment_method: "How the customer chose to pay",
    item_count: "The number of items the customer ordered",
    amount: "The amount the customer paid"
  },
  metadata: {
    overview: "This table provides joined orders and payment data.",
    extraProperties: {
      generic: {
        system: "BigQuery",
        type: "table"
      }
    }
  }
}

Datenqualitätstests definieren

Sie können Datenqualitätstests, sogenannte Assertions, definieren, um auf Eindeutigkeit, Nullwerte oder eine benutzerdefinierte Bedingung zu prüfen. Dataform fügt dem Abhängigkeitsbaum Ihres Workflows nach der Tabellenerstellung Assertions hinzu, die im Konfigurationsblock definiert sind. Sie können Assertions auch außerhalb des Konfigurationsblocks in einer separaten SQLX-Datei definieren.

Das folgende Codebeispiel zeigt, wie Sie einen Qualitätstest in einem Konfigurationsblock einer SQLX-Datei definieren:

config {
  assertions: {
    uniqueKey: ["id"]
  }
}

Hauptteil der SQLX-Datei

Im Hauptteil einer SQLX-Datei können Sie die folgenden Aktionen ausführen:

Tabelle definieren

Zum Definieren einer neuen Tabelle können Sie SQL-SELECT-Anweisungen und die Funktion ref verwenden.

Die Funktion ref ist eine integrierte SQLX-Funktion, die für die Abhängigkeitsverwaltung in Dataform entscheidend ist. Mit der Funktion ref können Sie auf Tabellen verweisen, die in Ihrem Dataform-Projekt definiert sind, anstatt das Schema und die Tabellennamen Ihrer Datentabelle fest zu codieren.

Dataform verwendet die Funktion ref, um einen Abhängigkeitsbaum aller Tabellen zu erstellen, die erstellt oder aktualisiert werden sollen. Nach der Kompilierung fügt Dataform Boilerplate-Anweisungen wie CREATE, REPLACE oder INSERT hinzu.

Das folgende Codebeispiel zeigt, wie Sie mit der Funktion ref in einer SQLX-Datei auf eine Tabelle verweisen:

config { type: "table" }

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM ${ref("store_clean")}

GROUP BY 1, 2, 3

Die Ausgabe sieht etwa so aus:

CREATE OR REPLACE TABLE Dataform.orders AS

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM Dataform_stg.store_clean

GROUP BY 1, 2, 3

Weitere Informationen zur zusätzlichen Abhängigkeitsverwaltung, z. B. zum bedingten Ausführen von Code und zur Verwendung anderer integrierter Dataform-Core- Funktionen, finden Sie in der Dataform-Core-Referenz.

Zusätzliche SQL-Vorgänge definieren

Wenn Sie Dataform so konfigurieren möchten, dass eine oder mehrere SQL-Anweisungen vor oder nach dem Erstellen einer Tabelle oder Ansicht ausgeführt werden, können Sie Vorgänge vor und nach der Abfrage angeben.

Das folgende Codebeispiel zeigt, wie Sie in einem Vorgang nach der Abfrage Zugriffsberechtigungen für Tabellen oder Ansichten konfigurieren:

SELECT * FROM ...

post_operations {
  GRANT `roles/bigquery.dataViewer` ON TABLE ${self()} TO "group:someusers@dataform.co"
}

SQL-Code kapseln

Wenn Sie wiederverwendbare Funktionen definieren möchten, um sich wiederholende Teile von SQL-Code zu generieren, können Sie JavaScript-Blöcke verwenden. Code, der in einem JavaScript-Block definiert ist, kann nur in der SQLX-Datei wiederverwendet werden, in der der Block definiert ist. Wenn Sie Code im gesamten gesamten Repository wiederverwenden möchten, können Sie Einschlüsse erstellen.

Wenn Sie eine Abfrage dynamisch ändern möchten, können Sie Inline-JavaScript an einer beliebigen Stelle im Hauptteil verwenden.

Das folgende Codebeispiel zeigt, wie Sie einen JavaScript-Block in einer SQLX-Datei definieren und ihn inline in einer Abfrage verwenden:

js {
  const columnName = "foo";
}

SELECT 1 AS ${columnName} FROM "..."

Beschränkungen

Für Dataform gelten die folgenden bekannten Einschränkungen:

  • Dataform wird in Google Cloud einer einfachen V8-Laufzeitumgebung ausgeführt und unterstützt keine zusätzlichen Funktionen und Module, die von Node.js bereitgestellt werden. Wenn Ihre vorhandene Codebasis Node.js-Module erfordert, müssen Sie diese Abhängigkeiten entfernen.

    Bei Projekten ohne ein Namensfeld in package.json werden bei jeder Installation von Paketen Unterschiede in package-lock.json generiert. Um dies zu vermeiden, müssen Sie in package.json eine name-Property hinzufügen.

  • git+https://-URLs für Abhängigkeiten in package.json werden nicht unterstützt.

    Konvertieren Sie solche URLs in einfache https:// Archiv-URLs. Konvertieren Sie beispielsweise git+https://github.com/dataform-co/dataform-segment.git#1.5 in https://github.com/dataform-co/dataform-segment/archive/1.5.tar.gz.

  • Das manuelle Ausführen von Unit-Tests ist nicht möglich.

  • Die Suche nach Dateiinhalten in Entwicklungsarbeitsbereichen ist nicht möglich.

  • Ab Dataform-Core 3.0.0., wird kein Docker-Image von Dataform verteilt. Sie können ein eigenes Docker-Image von Dataform erstellen, mit dem Sie das Äquivalent von Dataform CLI-Befehlen ausführen können. Informationen zum Erstellen eines eigenen Docker-Image finden Sie in der Docker-Dokumentation unter Containerize an application.

  • Die folgenden Dataform API-Methoden entsprechen nicht den AIP.134-Richtlinien, da der Platzhaltereintrag * als ungültige Anfrage behandelt wird und alle Felder anstelle der festgelegten Felder aktualisiert werden, wenn field_mask weggelassen wird:

  • Wenn eine geplante Workflowkonfigurationsausführung nicht vor Beginn der nächsten geplanten Ausführung abgeschlossen ist, wird die nächste geplante Ausführung übersprungen und mit einem Fehler gekennzeichnet.

Nächste Schritte