In diesem Dokument werden die Konzepte und Prozesse von Dataform vorgestellt.
Dataform ist ein Dienst, mit dem Datenanalysten komplexe Workflows für die Datentransformation in BigQuery entwickeln, testen, Versionen verwalten und planen können.
Mit Dataform können Sie die Datentransformation im ETL-Prozess (Extract, Transform, Load) für die Datenintegration verwalten. Nachdem Rohdaten aus Quellsystemen extrahiert und in BigQuery geladen wurden, können Sie sie mit Dataform in eine klar definierte, getestete und dokumentierte Suite von Datentabellen umwandeln.
Mit Dataform können Sie die folgenden Datentransformationen 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
- Eine Visualisierung des Abhängigkeitsbaums Ihres Workflows ansehen.
- Daten mit SQL-Code in einem zentralen Repository verwalten.
- Code mit JavaScript wiederverwenden
- Prüfen Sie die Richtigkeit der Daten mit Qualitätstests an den Quell- und Ausgabetabellen.
- SQL-Code mit Versionskontrolle verwalten
- Datentabellen im SQL-Code dokumentieren
Datentransformationsprozesse in Dataform
Der Datentransformationsablauf für Dataform sieht so aus:
- Mit Dataform können Sie Repositories zum Verwalten Ihres Codes erstellen.
- Mit Dataform können Sie Arbeitsbereiche für die Entwicklung erstellen.
- Mit Dataform können Sie Workflows in einem Entwicklungsbereich entwickeln.
- Dataform kompiliert den Dataform-Core in SQL.
- Dataform führt die Abhängigkeitsstruktur aus.
Mit Dataform können Sie Repositories zum Verwalten Ihres Codes erstellen
In einem Dataform-Repository verwenden Sie den Dataform-Kern, eine Erweiterung von SQL, um SQLX-Dateien zu schreiben, in denen Sie Ihren Workflow definieren. Dataform-Repositories unterstützen die Versionskontrolle. Sie können ein Dataform-Repository mit einem Git-Anbieter von Drittanbietern verknüpfen.
Mit Dataform können Sie Arbeitsbereiche für die Entwicklung erstellen
Sie können Entwicklungsarbeitsbereiche in einem Dataform-Repository für die Entwicklung von Dataform-Core erstellen. In einem Entwicklungsarbeitsbereich können Sie Änderungen am Repository vornehmen, sie kompilieren, testen und über Git an das Haupt-Repository übertragen.
Mit Dataform können Sie den Dataform-Kern in einem Entwicklungsbereich entwickeln
In einem Entwicklungsbereich können Sie Tabellen, ihre Abhängigkeiten und die Transformationslogik definieren und dokumentieren, um Ihren Workflow zu erstellen. Sie können Aktionen auch in JavaScript konfigurieren.
Dataform kompiliert den Dataform-Kern
Während der Kompilierung führt Dataform die folgenden Aufgaben aus:
- Der Dataform-Kern wird in einen Standard-SQL-Workflow kompiliert.
- Fügen Sie dem Code gemäß Ihrer Abfragekonfiguration SQL-Standardanweisungen wie
CREATE TABLE
oderINSERT
hinzu. - JavaScript in SQL transpiliert (von einer Quelle in eine andere kompiliert).
- Abhängigkeiten werden aufgelöst und auf Fehler geprüft, einschließlich fehlender oder zirkulärer Abhängigkeiten.
- Erstellt das Abhängigkeitsbaumdiagramm aller Aktionen, die in BigQuery ausgeführt werden sollen.
Die Datenform-Kompilierung ist hermetisch, um für eine einheitliche Kompilierung zu sorgen. Das bedeutet, dass derselbe Code jedes Mal zum selben SQL-Kompilierungsergebnis führt. Dataform kompiliert Ihren Code in einer Sandbox-Umgebung ohne Internetzugriff. Während der Kompilierung sind keine zusätzlichen Aktionen wie der Aufruf externer APIs verfügbar.
Wenn Sie in Echtzeit debuggen möchten, können Sie den kompilierten Workflow Ihres Projekts in einem interaktiven Diagramm in Ihrem Entwicklungsbereich 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 Bestätigungsanfragen an Ihren Tabellen und Ansichten aus, um die Datenrichtigkeit 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 Analysezwecke verwenden.
In den Protokollen sehen Sie, welche Tabellen erstellt wurden, ob die Behauptungen bestanden oder fehlgeschlagen sind, wie lange jede Aktion gedauert hat und weitere Informationen. Sie können sich auch den genauen SQL-Code ansehen, 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-Diensten 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 Konfigurations-JSON- oder SQLX-Dateien können Sie Ihre Workflows konfigurieren. Sie enthalten allgemeine Konfigurationen, Ausführungsplä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 für BigQuery definiert werden.
Umfasst
Includes sind JavaScript-Dateien, in denen Sie Variablen und Funktionen für Ihr Projekt definieren können.
Jedes Dataform-Repository ist mit einem Dienstkonto verknüpft. Sie können ein Dienstkonto auswählen, wenn Sie ein Repository erstellen, oder es 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
In Dataform wird das Git-Versionskontrollsystem verwendet, um alle Änderungen an Projektdateien zu erfassen 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- oder Bitbucket-Repository verbinden.
Nutzer führen die Versionskontrolle für ihren Workflowcode in Dataform-Arbeitsbereichen durch. In einem Dataform-Arbeitsbereich können Sie Änderungen aus dem Repository abrufen, alle oder ausgewählte Änderungen committen und in Git-Branches des Repositorys pushen.
Workflow-Entwicklung
In Dataform nehmen Sie Änderungen an Dateien und Verzeichnissen in einem Entwicklungsbereich vor. Ein Entwicklungsarbeitsbereich ist eine virtuelle, bearbeitbare Kopie des Inhalts eines Git-Repositorys. Dataform bewahrt den Status der Dateien in Ihrem Entwicklungsbereich zwischen den Sitzungen auf.
In einem Entwicklungsbereich können Sie SQL-Workflow-Aktionen entwickeln, indem Sie Dataform Core mit SQLX und JavaScript oder ausschließlich mit JavaScript verwenden. Sie können Ihren Dataform-Core- oder JavaScript-Code automatisch formatieren.
Jedes Element eines Dataform-Workflows, z. B. eine Tabelle oder eine Behauptung, entspricht einer Aktion, die Dataform in BigQuery ausführt. Eine Tabellendefinitionsdatei kann beispielsweise eine Aktion zum Erstellen oder Aktualisieren der Tabelle in BigQuery sein.
In einem Dataform-Arbeitsbereich können Sie die folgenden Workflow-Aktionen entwickeln:
- Deklarationen zu Quelldaten
- Tabellen und Ansichten
- Inkrementelle Tabellen
- Tabellenpartitionen und Cluster
- Abhängigkeiten zwischen Aktionen
- Tabellendokumentation
- Benutzerdefinierte SQL-Vorgänge
- BigQuery-Labels
- BigQuery-Richtlinien-Tags
- Dataform-Tags
- Datenqualitätstests, sogenannte Behauptungen
Sie können den Dataform-Workflow-Code mit JavaScript auf folgende Arten wiederverwenden:
Dataform kompiliert den Workflow-Code in Ihrem Arbeitsbereich in Echtzeit. In Ihrem Arbeitsbereich können Sie sich die kompilierten Abfragen und Details zu Aktionen in jeder Datei ansehen. Sie können den Kompilierungsstatus und die Fehler auch in der bearbeiteten Datei oder im Repository einsehen.
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 sich den gesamten in Ihrem Arbeitsbereich definierten Workflow ansehen möchten, können Sie sich eine interaktive kompilierte Grafik ansehen, in der alle kompilierten Aktionen in Ihrem Workflow und die Beziehungen zwischen ihnen dargestellt sind.
Workflow-Kompilierung
Dataform verwendet die Standardkompilierungseinstellungen, die in der Workflow-Konfigurationsdatei konfiguriert wurden, um den Workflowcode in Ihrem Arbeitsbereich in Echtzeit in SQL zu kompilieren und ein Kompilierungsergebnis für den Arbeitsbereich 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 für jeden Arbeitsbereich benutzerdefinierte Kompilierungsergebnisse zu erstellen und Arbeitsbereiche in isolierte Entwicklungsumgebungen umzuwandeln. Sie können das Google Cloud -Projekt überschreiben, in dem Dataform den Inhalt eines Arbeitsbereichs ausführt, den Namen aller 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 für ein Dataform-Repository zu erstellen. In einer Release-Konfiguration können Sie das Google Cloud -Projekt überschreiben, in dem Dataform die Kompilierungsergebnisse ausführt, den Namen aller kompilierten Tabellen ein Präfix hinzufügen, dem Standardschema ein Suffix hinzufügen und Kompilierungsvariablen hinzufügen. Sie können auch festlegen, wie oft Zusammenstellungsergebnisse erstellt werden sollen. Wenn Sie die Ausführung 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 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 die Workflowausführung manuell in einem Entwicklungsarbeitsbereich starten oder Ausführungspläne erstellen.
So können Sie Dataform-Ausführungen in BigQuery planen:
- Workflowkonfigurationen erstellen, um die Ausführung von Kompilierungsergebnissen zu planen, die in Releasekonfigurationen erstellt wurden
- Ausführungen mit Cloud Composer planen
- Ausführungen mit Workflows und Cloud Scheduler planen
Sie haben folgende Möglichkeiten, um Fehler zu beheben:
- Detaillierte Dataform-Ausführungsprotokolle ansehen
- Audit-Logs für Dataform ansehen
- Cloud Logging-Logs für Dataform ansehen
Dataform-Kern
Dataform Core ist eine Open-Source-Metasprache zum Erstellen von SQL-Tabellen und Workflows. Dataform Core erweitert SQL um ein Abhängigkeitsverwaltungssystem, 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
- Datenaussagen schreiben, um die Datenkonsistenz zu gewährleisten
In Dataform verwenden Sie den Dataform-Kern, um Workflows zu entwickeln und Assets in BigQuery bereitzustellen.
Dataform Core ist Teil des Open-Source-Datenmodellierungs-Frameworks Dataform, das auch die Dataform CLI umfasst. Sie können den Dataform-Kern lokal über die Dataform-Befehlszeile 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, die eine Datenbankbeziehung definiert, die von Dataform in BigQuery erstellt und aktualisiert wird.
Dataform kompiliert Ihren Dataform-Kerncode in Echtzeit, um ein SQL-Kompilierungsergebnis zu erstellen, das Sie in BigQuery ausführen können.
Die Datenform-Kompilierung ist hermetisch, um für eine einheitliche Kompilierung zu sorgen. Das bedeutet, dass derselbe Code jedes Mal zum selben SQL-Kompilierungsergebnis führt. Dataform kompiliert Ihren Code in einer Sandbox-Umgebung ohne Internetzugriff. Während der Kompilierung sind keine zusätzlichen Aktionen wie der Aufruf externer APIs verfügbar.
Konfigurationsblock der SQLX-Datei
Eine SQLX-Datei besteht aus einem Konfigurationsblock und einem Body. Alle Konfigurationseigenschaften und der Konfigurationsblock selbst sind optional. Daher ist jede SQL-Datei eine gültige SQLX-Datei, die von Dataform unverändert ausgeführt wird.
Im config-Block können Sie die folgenden Aktionen ausführen:
Abfragemetadaten angeben
Mithilfe der Konfigurationsmetadaten können Sie festlegen, wie Dataform Abfragen in BigQuery materialisiert, z. B. den Typ der Ausgabetabelle, 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 an andere Tools weitergeben.
Datenqualitätstests definieren
Sie können Datenqualitätstests, sogenannte Behauptungen, definieren, um auf Eindeutigkeit, Nullwerte oder eine benutzerdefinierte Bedingung zu prüfen. Dataform fügt dem Workflow-Abhängigkeitsbaum nach dem Erstellen der Tabelle im Konfigurationsblock definierte Behauptungen hinzu. Sie können auch außerhalb des Konfigurationsblocks in einer separaten SQLX-Datei Definitionen für Behauptungen vornehmen.
Im folgenden Codebeispiel wird gezeigt, wie Sie den Typ der Ausgabetabelle 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-Dateikörper
Im Body einer SQLX-Datei können Sie folgende Aktionen ausführen:
- Definieren Sie eine Tabelle und ihre Abhängigkeiten.
- Definieren Sie zusätzliche SQL-Vorgänge, die in BigQuery ausgeführt werden sollen.
- SQL-Code mit JavaScript generieren
Tabelle definieren
Sie können SQL-SELECT
-Anweisungen und die Funktion ref
verwenden, um eine neue Tabelle zu definieren.
Die Funktion ref
ist eine integrierte SQLX-Funktion, die für das Abhängigkeitsmanagement 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 hartzucodieren.
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.
Im folgenden Codebeispiel wird gezeigt, 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 in 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. zur bedingten Ausführung von Code mithilfe anderer integrierter Dataform-Kernfunktionen, finden Sie in der Dataform-Kernreferenz.
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 Vor- und Nachabfragen angeben.
Im folgenden Codebeispiel wird gezeigt, wie Sie Berechtigungen für den Zugriff auf Tabellen oder Ansichten in einem Vorgang nach der Abfrage konfigurieren.
SELECT * FROM ...
post_operations {
GRANT `roles/bigquery.dataViewer` ON TABLE ${self()} TO "group:someusers@dataform.co"
}
SQL-Code einkapseln
Mit JavaScript-Blöcken können Sie wiederverwendbare Funktionen definieren, um sich wiederholende Teile von SQL-Code zu generieren. Sie können Code, der in einem JavaScript-Block definiert ist, nur innerhalb der SLQX-Datei wiederverwenden, in der der Block definiert ist. Wenn Sie Code in Ihrem gesamten Repository wiederverwenden möchten, können Sie Includes erstellen.
Wenn Sie eine Abfrage dynamisch ändern möchten, können Sie überall im Body Inline-JavaScript 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 in Google Cloud wird in einer einfachen V8-Laufzeit ausgeführt und unterstützt keine zusätzlichen Funktionen und Module von Node.js. Wenn für Ihre vorhandene Codebasis Node.js-Module erforderlich sind, müssen Sie diese Abhängigkeiten entfernen.
Bei Projekten ohne Namensfeld in
package.json
werden jedes Mal, wenn Pakete installiert werden, Differenzen inpackage-lock.json
generiert. Um dies zu vermeiden, müssen Sie inpackage.json
einename
-Property hinzufügen.git
+https://
-URLs für Abhängigkeiten inpackage.json
werden nicht unterstützt.Konvertieren Sie solche URLs in normale
https://
-Archiv-URLs. Konvertieren Sie beispielsweisegit+https://github.com/dataform-co/dataform-segment.git#1.5
inhttps://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 Entwicklungsbereichen ist nicht verfügbar.
Ab Dataform Core
3.0.0.
wird von Dataform kein Docker-Image mehr bereitgestellt. Sie können ein eigenes Docker-Image von Dataform erstellen, mit dem Sie die entsprechenden Befehle der Dataform-Befehlszeile 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 verstoßen gegen die AIP.134-Richtlinien, da der Platzhaltereintrag
*
als fehlerhafte Anfrage behandelt und alle Felder aktualisiert werden, anstatt Felder festzulegen, wennfield_mask
weggelassen wird:
Nächste Schritte
- Weitere Informationen zum Codelebenszyklus in Dataform finden Sie unter Einführung in den Codelebenszyklus in Dataform.
- Weitere Informationen zu Dataform-Repositories finden Sie unter Einführung in Repositories.
- Weitere Informationen zu Dataform-Arbeitsbereichen finden Sie unter Einführung in die Entwicklung in einem Arbeitsbereich.
- Weitere Informationen zum Entwickeln von Workflows in Dataform finden Sie unter Einführung in SQL-Workflows.
- Weitere Informationen zur Dataform-Befehlszeile finden Sie unter Dataform-Befehlszeile verwenden.