Übersicht über Dataform Core

In diesem Dokument wird Dataform Core vorgestellt und Sie erfahren, wie Sie es in Dataform verwenden können.

Übersicht über Dataform Core

Dataform Core ist eine Open-Source-Metasprache zum Erstellen von SQL-Tabellen und -Workflows. Dataform Core erweitert SQL um ein Abhängigkeitsmanagementsystem, 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.
  • Wiederverwendung von Funktionen und Variablen in verschiedenen Abfragen
  • Schreiben von Daten-Assertions, um Datenkonsistenz sicherzustellen.

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

Dataform Core ist Teil des Open-Source-Dataform-Datenmodellierungs-Frameworks, das auch die Dataform-Befehlszeile enthält. Sie können Dataform Core über Dataform CLI außerhalb von Google Cloud lokal kompilieren und ausführen, um Assets in den folgenden Data Warehouses bereitzustellen:

  • BigQuery
  • Snowflake
  • Redshift
  • Azure SQL Data Warehouse
  • Postgres

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 Ihrem Data Warehouse erstellt und aktualisiert.

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

Die Dataform-Kompilierung ist hermetisch, um die Kompilierungskonsistenz 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 weiteren Aktionen wie das Aufrufen externer APIs verfügbar.

SQLX-Dateikonfigurationsblock

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

Sie können konfigurieren, wie Dataform Abfragen in Ihrem Warehouse materialisiert, z. B. den Ausgabetabellentyp, die Zieldatenbank oder Labels mithilfe der Konfigurationsmetadaten.

Dokumentdaten

Sie können Ihre Tabellen und die zugehörigen Felder direkt im Konfigurationsblock dokumentieren. Die Dokumentation Ihrer Tabellen wird direkt an BigQuery übertragen. 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, Nullwerte oder eine benutzerdefinierte Bedingung zu prüfen. Dataform fügt Ihrer Workflow-Abhängigkeitsstruktur nach der Tabellenerstellung die im Konfigurationsblock definierten Assertions hinzu. Sie können Assertions auch außerhalb des Konfigurationsblocks in einer separaten SQLX-Datei definieren.

Das folgende Codebeispiel zeigt, wie Sie den Ausgabetabellentyp 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"]
  }
}

Text 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 ref-Funktion ist eine in SQLX integrierte Funktion, die für die Abhängigkeitsverwaltung in Dataform von entscheidender Bedeutung 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 eine Abhängigkeitsstruktur aller zu erstellenden oder zu aktualisierenden Tabellen zu erstellen. 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 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. zum bedingten Ausführen von Code mit anderen integrierten 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 festlegen.

Im folgenden Codebeispiel wird gezeigt, 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

Sie können JavaScript-Blöcke verwenden, um wiederverwendbare Funktionen zum Generieren sich wiederholender Teile von SQL-Code zu definieren. Sie können den in einem JavaScript-Block definierten Code nur in 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 an einer beliebigen Stelle im Text Inline-JavaScript verwenden.

Das folgende Codebeispiel zeigt, wie ein JavaScript-Block in einer SQLX-Datei definiert und inline in einer Abfrage verwendet wird:

js {
  const columnName = "foo";
}

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

Nächste Schritte