Übersicht über Dataform-Kerne
Dataform Core ist eine Open-Source-Metasprache zum Erstellen von SQL-Tabellen und -Workflows. Dataform Core erweitert SQL um ein Abhängigkeitsmanagementsystem, automatisierte Tests von Datenqualitäten und Datendokumentation.
Sie können Dataform Core für folgende Zwecke verwenden:
- Tabellen, Ansichten, materialisierte Ansichten oder inkrementelle Tabellen definieren
- Definieren der Logik zur Datentransformation
- Quelldaten deklarieren und Tabellenabhängigkeiten verwalten
- Tabellen- und Spaltenbeschreibungen im Code
- Funktionen und Variablen für verschiedene Abfragen wiederverwenden
- Datensicherungen schreiben, um die Datenkonsistenz zu gewährleisten
In Dataform verwenden Sie den Dataform Core, um SQL-Workflows zu entwickeln und Assets in BigQuery bereitzustellen.
Dataform-Kern ist Teil des Open-Source-Dataform-Datenmodellierungs-Frameworks, das auch die Dataform-CLI enthält. Sie können Dataform-Kerne lokal über die Dataform-Befehlszeile außerhalb von Google Cloud kompilieren und ausführen, um Assets in den folgenden Data Warehouses bereitzustellen:
- BigQuery
- Snowflake
- Redshift
- Azure SQL Data Warehouse
- Postgres
Zur Verwendung des Dataform-Cores schreiben Sie SQLX-Dateien. Jede SQLX-Datei enthält eine Abfrage, mit der eine Datenbankbeziehung definiert wird, die von Dataform in Ihrem Data Warehouse erstellt und aktualisiert wird.
Konfigurationsblock für SQLX-Datei
Eine SQLX-Datei besteht aus einem Konfigurationsblock und einem Textkörper. Alle Konfigurationsattribute und der Konfigurationsblock selbst sind optional. Daher ist jede einfache SQL-Datei eine gültige SQLX-Datei, die Dataform unverändert ausführt.
Im Konfigurationsblock können Sie die folgenden Aktionen ausführen:
Abfragemetadaten angeben
Mit den Metadaten der Konfiguration können Sie konfigurieren, wie Dataform Abfragen in Ihrem Warehouse ausgibt, z. B. den Ausgabetabellentyp, die Zieldatenbank oder Labels.
Dokumentdaten
Sie können die Tabellen und ihre Felder direkt im Konfigurationsblock dokumentieren. Die Dokumentation Ihrer Tabellen wird direkt an BigQuery gesendet. Sie können diese Dokumentation parsen und sie an andere Tools übertragen.
Datenqualitätstests definieren
Sie können Datenqualitätstests namens Zuweisungen definieren, um nach Eindeutigkeit, Nullwerten oder einer benutzerdefinierten Bedingung zu suchen. Dataform fügt im Workflow der Abhängigkeitsstruktur nach der Tabellenerstellung Assertions Assertions hinzu. Sie können Assertions auch außerhalb des Konfigurationsblocks in einer separaten SQLX-Datei definieren.
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-Dateitext
Im Text 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 Ihrem Data Warehouse ausgeführt werden sollen.
- Generieren Sie SQL-Code mit JavaScript.
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 hart 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 Standardbausteinanweisungen 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 zum zusätzlichen Abhängigkeitsmanagement, z. B. zur Ausführung von Code mit bedingten anderen 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 eines Datasets ausgeführt werden, können Sie Vor- und Nachbereitungsvorgänge angeben.
Im folgenden Codebeispiel wird gezeigt, wie Sie Dataset-Zugriffsberechtigungen 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 kapseln
Wenn Sie wiederverwendbare Funktionen zum Generieren wiederholter Teile von SQL-Code definieren möchten, können Sie JavaScript-Blöcke verwenden. Sie können Code, der in einem JavaScript-Block definiert wurde, nur in der SLQX-Datei wiederverwenden, in der der Block definiert ist. Um Code in Ihrem gesamten Repository wiederzuverwenden, können Sie Includes erstellen.
Um eine Abfrage dynamisch zu ändern, können Sie Inline-JavaScript an beliebiger Stelle im Text verwenden.
Im folgenden Codebeispiel sehen Sie, wie ein JavaScript-Block in einer SQLX-Datei definiert und in einer Abfrage inline verwendet wird:
js {
const columnName = "foo";
}
SELECT 1 AS ${columnName} FROM "..."
Nächste Schritte
- Weitere Informationen zu den integrierten Dataform-Kernfunktionen finden Sie in der Dataform-Kernreferenz.
- Weitere Informationen zur Dataform CLI
- Informationen zum Definieren zusätzlicher SQL-Vorgänge finden Sie unter Benutzerdefinierte SQL-Vorgänge hinzufügen.
- Informationen zum Erstellen von JavaScript-Einschlüssen finden Sie unter Variablen und Funktionen mit Secrets wiederverwenden.
- Informationen zum Definieren einer Tabelle mit Dataform finden Sie unter Tabelle erstellen.