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 der Abhängigkeitsstruktur Ihres Workflows ansehen.
  • Daten mit SQL-Code in einem zentralen Repository verwalten.
  • Code mit JavaScript wiederverwenden.
  • Die Richtigkeit von Daten mit Qualitätstests für Quell- und Ausgabetabellen prüfen.
  • SQL-Code einer Versionsverwaltung unterziehen.
  • Datentabellen in SQL-Code dokumentieren.

Datentransformationsprozesse in Dataform

Der Workflow für die Datentransformation in 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 die Abhängigkeitsstruktur 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, diese 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:

  • Dataform-Core in einen Workflow aus Standard-SQL kompilieren.
  • Boilerplate-SQL-Anweisungen wie CREATE TABLE oder INSERT inline mit Ihrer Abfragekonfiguration zum Code hinzufügen.
  • JavaScript in SQL transpilen (Quell-zu-Quell-Kompilierung).
  • Abhängigkeiten auflösen und nach Fehlern suchen, einschließlich fehlender oder zirkulärer Abhängigkeiten.
  • Die Abhängigkeitsstruktur aller Aktionen erstellen, die in BigQuery ausgeführt werden sollen.

Die Dataform-Kompilierung ist hermetisch, um die Konsistenz der Kompilierung zu gewährleisten. Das bedeutet, dass derselbe Code jedes Mal zum selben SQL-Kompilierungsergebnis führt. 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.

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 die Abhängigkeitsstruktur aus

In BigQuery führt Dataform die folgenden Aufgaben aus:

  • SQL-Befehle in der Reihenfolge der Abhängigkeitsstruktur ausführen.
  • Assertionsabfragen für Ihre Tabellen und Ansichten ausführen, um die Richtigkeit der Daten zu prüfen.
  • Andere von Ihnen definierte SQL-Vorgänge ausführen.
  • Metadaten in Knowledge Catalog (Vorschau) aktualisieren.

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 erfolgreich waren 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 in BigQuery entwickeln und 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 wichtigsten Funktionen 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 allgemeine Konfigurationen, Ausführungszeitpläne oder Schemas zum Erstellen neuer Tabellen und Ansichten.

  • Definitionen

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

  • Includes

    Includes 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 ein eigenes Git-Repository verwalten oder mit einem Remote-Git-Repository eines Drittanbieters verbunden werden. Sie können ein Dataform-Repository mit einem GitHub-, GitLab-, Azure DevOps Services- oder Bitbucket-Repository verbinden.

Nutzer unterziehen ihren Workflowcode in Dataform-Arbeitsbereichen einer Versionsverwaltung. 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 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:

Mit JavaScript können Sie Ihren Dataform-Workflowcode auf folgende Weise wiederverwenden:

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 , in dem alle kompilierten Aktionen in Ihrem Workflow und die Beziehungen zwischen ihnen dargestellt sind.

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, ein Präfix zu den Namen aller kompilierten Tabellen hinzufügen, und ein Suffix zum Standardschema 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 Projekt überschreiben, in dem Dataform die Kompilierungsergebnisse ausführt, ein Präfix zu den Namen aller kompilierten Tabellen hinzufügen, ein Suffix zum Standardschema hinzufügen und Kompilierungsvariablen hinzufügen. Google Cloud 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. Den kompilierten SQL-Code in BigQuery ausführen.
  2. Den Status der Aktion im Ausführungslog aktualisieren.
  3. Nach erfolgreichem Abschluss einer Aktion initiiert Dataform automatisch eine Metadatensynchronisierung mit Knowledge Catalog (Vorschau). 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 Abhängigkeitsverwaltung, 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 prüfen.

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

Dataform-Core ist Teil des Open-Source-Frameworks für die Datenmodellierung von Dataform , das auch die Dataform CLI umfasst. 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 gewährleisten. Das bedeutet, dass derselbe Code jedes Mal zum selben SQL-Kompilierungsergebnis führt. 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 Textkörper. 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 folgende Aktionen ausführen:

Abfragemetadaten angeben

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

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 (Vorschau) 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 die im Konfigurationsblock definierten Assertions nach der Tabellenerstellung der Abhängigkeitsstruktur Ihres Workflows hinzu. 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"]
  }
}

Textkörper der SQLX-Datei

Im Textkörper einer SQLX-Datei können Sie folgende 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 unerlässlich 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 eine Abhängigkeitsstruktur 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 Includes erstellen.

Wenn Sie eine Abfrage dynamisch ändern möchten, können Sie Inline-JavaScript an einer beliebigen Stelle im Textkörper 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 einer einfachen V8-Laufzeit ausgeführt und unterstützt keine zusätzlichen Funktionen und Module, die von Node.js bereitgestellt werden. Google Cloud 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-Eigenschaft 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 Einheitentests 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-Images finden Sie in der Docker-Dokumentation unter Containerisierung einer Anwendung.

  • Die folgenden Dataform API-Methoden entsprechen nicht den AIP.134-Richtlinien, da der Platzhalter * 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 markiert.

Nächste Schritte