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 wohldefinierte, getestete und dokumentierte Suite von Datentabellen umwandeln.

Mit Dataform können Sie die folgenden Datentransformationsvorgänge ausführen:

  • Workflows für die Datentransformation entwickeln und ausführen.
  • Mit Teammitgliedern über Git an der Workflowentwicklung zusammenarbeiten
  • Eine große Anzahl von Tabellen und deren Abhängigkeiten verwalten.
  • Quelldaten deklarieren und Tabellenabhängigkeiten verwalten
  • Sie können sich eine Visualisierung des Abhängigkeitsbaums Ihres Workflows ansehen.
  • Daten mit SQL-Code in einem zentralen Repository verwalten
  • Code mit JavaScript wiederverwenden
  • Testen Sie die Richtigkeit der Daten mit Qualitätstests für Quell- und Ausgabetabellen.
  • SQL-Code unter Versionskontrolle stellen.
  • Dokumentieren Sie Datentabellen im SQL-Code.

Datentransformationsprozesse in Dataform

Der Workflow für die Datentransformation für Dataform sieht so aus:

  1. Mit Dataform können Sie Repositories zum Verwalten Ihres Codes erstellen.
  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 zum Verwalten Ihres Codes erstellen.

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-Drittanbieter 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 Entwicklerarbeitsbereich 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 Boilerplate-SQL-Anweisungen wie CREATE TABLE oder INSERT inline in den Code ein, der Ihrer Abfragekonfiguration entspricht.
  • Transpiliert (kompiliert Source-to-Source) 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 gewährleisten. 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 verfügbar.

Um in Echtzeit zu debuggen, können Sie den kompilierten Workflow Ihres Projekts in einem interaktiven Diagramm in Ihrem Entwicklerarbeitsbereich ansehen.

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 Assertionsabfragen für Ihre Tabellen und Ansichten aus, um die Richtigkeit der Daten zu prüfen.
  • Führt andere von Ihnen definierte SQL-Vorgänge aus.

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

Sie können Logs ansehen, um zu sehen, welche Tabellen erstellt wurden, ob Zusicherungen bestanden oder fehlgeschlagen sind, wie lange die einzelnen Aktionen gedauert haben und andere 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 Webumgebung für die folgenden Aktivitäten:

  • Workflow-Entwicklung
  • 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 Dateitypen:

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

  • Umfasst

    Includes sind JavaScript-Dateien, in denen Sie Variablen und Funktionen definieren können, die Sie in Ihrem Projekt verwenden möchten.

Jedes Dataform-Repository ist mit einem Dienstkonto verbunden. Sie können ein Dienstkonto auswählen, wenn Sie ein Repository erstellen oder das Dienstkonto später bearbeiten.

Standardmäßig verwendet Dataform ein Dienstkonto, das von Ihrer Projektnummer abgeleitet ist und das folgende Format hat:

service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

Versionsverwaltung

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

Nutzer können Versionsverwaltung für ihren Workflow-Code in Dataform-Arbeitsbereichen verwenden. In einem Dataform-Arbeitsbereich können Sie Änderungen aus dem Repository abrufen, alle oder ausgewählte Änderungen committen und in Git-Branches des Repositorys übertragen.

Workflow-Entwicklung

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 SQL-Workflowaktionen mit Dataform-Core mit SQLX und JavaScript oder ausschließlich mit JavaScript entwickeln. Sie können Ihren Dataform-Core- oder JavaScript-Code automatisch formatieren lassen.

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 Workflow-Aktionen entwickeln:

Sie können JavaScript verwenden, um Ihren Dataform-Workflow-Code auf folgende Arten wiederzuverwenden:

Dataform kompiliert den Workflow-Code in Ihrem Arbeitsbereich in Echtzeit. In Ihrem Arbeitsbereich können Sie die kompilierten Anfragen und Details zu Aktionen in jeder Datei aufrufen. Sie können den Kompilierungsstatus und Fehler auch 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 in Ihrem Dataform-Arbeitsbereich eine Vorschau der Abfrage ausführen.

Wenn Sie den gesamten in Ihrem Arbeitsbereich definierten Workflow untersuchen möchten, können Sie sich ein interaktives kompiliertes Diagramm ansehen, in dem alle kompilierten Aktionen in Ihrem Workflow und die Beziehungen zwischen ihnen dargestellt sind.

Workflow-Kompilierung

Dataform verwendet Standardeinstellungen für die Kompilierung, die in der Datei mit den Workflow-Einstellungen konfiguriert sind, um den Workflow-Code in Ihrem Arbeitsbereich in Echtzeit in SQL zu kompilieren. So wird ein Kompilierungsergebnis des Arbeitsbereichs erstellt.

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

Mit Überschreibungen von Arbeitsbereichskompilierungen können Sie Kompilierungsüberschreibungen für alle Arbeitsbereiche in einem Repository konfigurieren. Sie können dynamische Arbeitsbereichsüberschreibungen festlegen, um Kompilierungsergebnisse für jeden Arbeitsbereich anzupassen und Arbeitsbereiche so in isolierte Entwicklungsumgebungen zu verwandeln. Sie können das Google Cloud -Projekt überschreiben, in dem Dataform den Inhalt eines Arbeitsbereichs ausführt, allen kompilierten Tabellen einen Präfix und dem Standardschema ein Suffix hinzufügen.

Mit Releasekonfigurationen können Sie Vorlagen für Kompilierungseinstellungen erstellen, um Kompilierungsergebnisse eines Dataform-Repositorys zu erstellen. In einer Releasekonfiguration können Sie das Google Cloud -Projekt überschreiben, in dem Dataform Kompilierungsergebnisse ausführt, allen kompilierten Tabellen einen Präfix hinzufügen, dem Standardschema ein Suffix hinzufügen und Kompilierungsvariablen hinzufügen. Sie können auch die Häufigkeit festlegen, mit der Kompilierungsergebnisse erstellt werden. 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 der Workflowausführung werden die Kompilierungsergebnisse von Workflows in Dataform ausgeführt, 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 Workflow-Ausführung manuell in einem Entwicklungsarbeitsbereich starten oder Ausführungen planen.

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

So können Sie Fehler beheben:

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 in 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, müssen Sie SQLX-Dateien schreiben. Jede SQLX-Datei enthält eine Abfrage, mit der eine Datenbankbeziehung definiert wird, die von Dataform in BigQuery erstellt und aktualisiert wird.

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 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 verfügbar.

Konfigurationsblock für 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 haben Sie folgende Möglichkeiten:

Metadaten für Abfrage angeben

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

Dokumentdaten

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

Datenqualitätstests definieren

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

Das folgende Codebeispiel zeigt, wie Sie den Ausgabetabellentyps definieren, die Tabelle dokumentieren und einen Qualitätstest in einem Konfigurationsblock einer SQLX-Datei definieren.

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 e.g. sent, delivered",
    customer_id: "Unique customer ID",
    payment_status: "The status of a payment e.g. 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"
  },
    assertions: {
    uniqueKey: ["id"]
  }
}

SQLX-Dateibereich

Im Text einer SQLX-Datei haben Sie folgende Möglichkeiten:

Tabelle definieren

Zum Definieren einer neuen Tabelle können Sie SQL-SELECT-Anweisungen und die ref-Funktion 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 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 auf eine Tabelle in einer SQLX-Datei 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 oder 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 Pre-Query- und Post-Query-Vorgänge angeben.

Das folgende Codebeispiel zeigt, wie Sie Berechtigungen für den Tabellen- oder Ansichtszugriff in einem Post-Query-Vorgang konfigurieren.

SELECT * FROM ...

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

SQL-Code kapseln

Mit JavaScript-Blöcken können Sie wiederverwendbare Funktionen definieren, um sich wiederholende Teile von SQL-Code zu generieren. Code, der in einem JavaScript-Block definiert ist, kann nur in der SLQX-Datei wiederverwendet werden, in der der Block definiert ist. Wenn Sie Code im 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.

Im folgenden Codebeispiel wird gezeigt, wie Sie einen JavaScript-Block in einer SQLX-Datei definieren und 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 Google Cloud wird in einer einfachen V8-Laufzeitumgebung ausgeführt und unterstützt keine zusätzlichen Funktionen und Module, die von Node.js bereitgestellt werden. Wenn für Ihre vorhandene Codebasis Node.js-Module erforderlich sind, müssen Sie diese Abhängigkeiten entfernen.

    Bei Projekten ohne das Feld „name“ in package.json werden bei jeder Installation von Paketen Unterschiede in package-lock.json generiert. Um das 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, z. B. git+https://github.com/dataform-co/dataform-segment.git#1.5 in https://github.com/dataform-co/dataform-segment/archive/1.5.tar.gz.

  • Einheitentests können nicht manuell ausgeführt werden.

  • Die Suche nach Dateiinhalten in Entwicklerarbeitsbereichen ist nicht verfügbar.

    ausgefüllt werden.
  • Ab Dataform Core 3.0.0. wird kein Docker-Image mehr von Dataform bereitgestellt. 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 Anwendung containerisieren.

  • Die folgenden Dataform API-Methoden entsprechen nicht den AIP.134-Richtlinien, da der Platzhalter * als fehlerhafte Anfrage behandelt und alle Felder anstelle von festgelegten Feldern aktualisiert werden, wenn field_mask ausgelassen wird:

Nächste Schritte