Übersicht über Dataform Core

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

Übersicht über Dataform Core

Dataform Core ist eine Open-Source-Metasprache zum Erstellen von SQL-Tabellen und -Workflows. Dataform Core erweitert SQL durch die Bereitstellung eines Abhängigkeitsmanagementsystems, automatisierter 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 in Code dokumentieren
  • Wiederverwendung von Funktionen und Variablen in verschiedenen Abfragen
  • Schreiben von Daten-Assertions zur Gewährleistung der Datenkonsistenz

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 CLI enthält. Sie können Dataform Core über die Dataform-Befehlszeile außerhalb von Google Cloud lokal kompilieren 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 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 sicherzustellen. 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.

SQLX-Dateikonfigurationsblock

Eine SQLX-Datei besteht aus einem Konfigurationsblock und einem Textkörper. Alle Konfigurationsattribute und der Konfigurationsblock selbst sind optional. Daher ist jede reine SQL-Datei eine gültige SQLX-Datei, die Dataform unverändert ausführt.

Im Konfigurationsblock können Sie die folgenden Aktionen ausführen:

Metadaten der Abfrage angeben

Mithilfe der 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 übertragen. Sie können diese Dokumentation parsen und in andere Tools übertragen.

Datenqualitätstests definieren

Sie können Datenqualitätstests, sogenannte Assertions, definieren, um die Eindeutigkeit, Nullwerte oder eine benutzerdefinierte Bedingung zu prüfen. Dataform fügt nach der Tabellenerstellung im Konfigurationsblock definierte Assertions zu Ihrer Workflow-Abhängigkeitsstruktur 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 SELECT-SQL-Anweisungen und die Funktion ref verwenden.

Die Funktion ref ist eine in SQLX integrierte 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 hartzucodieren.

Dataform verwendet die Funktion ref, um eine Abhängigkeitsstruktur aller Tabellen zu erstellen, die erstellt oder aktualisiert werden soll. 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 mithilfe anderer integrierter Dataform Core-Funktionen, finden Sie in der Referenz zu Dataform Core.

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.

Im folgenden Codebeispiel wird gezeigt, wie Sie Tabellen- oder Anzeigezugriffsberechtigungen in einem Post-Abfragevorgang konfigurieren.

SELECT * FROM ...

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

SQL-Code kapseln

Um wiederverwendbare Funktionen zum Generieren sich wiederholender Teile von SQL-Code zu definieren, 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. Sie können Includes erstellen, um Code in Ihrem gesamten Repository wiederzuverwenden.

Wenn Sie eine Abfrage dynamisch ändern möchten, können Sie an beliebiger Stelle im Text Inline-JavaScript verwenden.

Das folgende Codebeispiel zeigt, 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 "..."

Nächste Schritte