Dataform-SQL-Workflows mit JavaScript erstellen

In diesem Dokument erfahren Sie, wie Sie mit JavaScript SQL-Workflow-Elemente in Dataform erstellen. Sie könnten JavaScript statt Dataform Core verwenden, um ähnliche Elemente in Ihrem Workflow wiederholt zu erstellen.

Workflows in Dataform mit JavaScript entwickeln

Mit Dataform Core können Sie SQL-Workflowaktionen mit SQLX und JavaScript erstellen. Mit JavaScript können Sie ähnliche Aktionen in Ihrem Workflow wiederholt erstellen. Beispielsweise haben Sie die Möglichkeit, für jede Tabelle in Ihrem Workflow eine Ansicht zu erstellen, in der bestimmte Nutzer-IDs entfernt werden.

Mit dem folgenden JavaScript-Codebeispiel können Sie eine Ansicht jeder Tabelle erstellen, in der der Wert des Felds user_id keinem der Werte in der Liste blocked_user_ids entspricht:

  const tableNames = ["user_events", "user_settings", "user_logs"];

  tableNames.forEach(tableName => {
    publish(tableName + "_blocked_removed").query(
      ctx => `
        SELECT * FROM ${ctx.ref(tableName)}
        WHERE user_id NOT IN (
          SELECT user_id
          FROM ${ctx.ref("blocked_user_ids")}
        )`
    );
  });

In diesem Codebeispiel werden drei Ansichten mit den Namen user_events_blocked_removed, user_settings_blocked_removed und user_logs_blocked_removed erstellt, die keine der blockierten Nutzer-IDs enthalten.

Sie können in einer JavaScript-Datei mit globalen Dataform-Methoden und beliebigem JavaScript ES5-Code, z. B. Schleifen und Konstanten, mehrere Aktionen erstellen.

In Dataform können Sie mit JavaScript die folgenden Aktionen definieren:

Hinweise

  1. Öffnen Sie in der Google Cloud Console die Seite Dataform.

    Zu Dataform

  2. Wählen Sie ein Repository aus oder erstellen Sie ein Repository.

  3. Wählen Sie einen Entwicklungsarbeitsbereich aus oder erstellen Sie einen.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Dataform Editor (roles/dataform.editor) für Arbeitsbereiche zu gewähren, damit Sie die Berechtigungen erhalten, die Sie zum Entwickeln eines SQL-Workflows mit JavaScript benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Möglicherweise können Sie die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

JavaScript-Datei in Dataform erstellen

Speichern Sie JavaScript-Dateien für Definitionen und Datenquellendeklarationen im Verzeichnis definitions/. So erstellen Sie eine neue JavaScript-Datei im Verzeichnis definitions/:

  1. Klicken Sie im Bereich Dateien neben definitions/ auf das -Menü Mehr.

  2. Klicken Sie auf Datei erstellen.

  3. Führen Sie im Bereich Neue Datei erstellen die folgenden Schritte aus:

    1. Geben Sie im Feld Dateipfad hinzufügen nach definitions/ den Namen der Datei gefolgt von .js ein. Beispiel: definitions/definitions.js.

      Dateinamen dürfen nur Ziffern, Buchstaben, Bindestriche und Unterstriche enthalten.

    2. Klicken Sie auf Datei erstellen.

Objekteigenschaften des Dataform-SQL-Workflows mit JavaScript festlegen

Sie können die folgenden globalen Dataform-Methoden verwenden, um SQL-Workflow-Objekte mit Dataform zu erstellen:

  • declare wird zum Deklarieren einer Datenquelle verwendet.
  • publish. Wird zum Definieren einer Tabelle verwendet.
  • assert. Wird zum Erstellen einer Assertion verwendet.
  • operate: Wird zum Definieren eines benutzerdefinierten SQL-Vorgangs verwendet.

Jede der globalen Methoden enthält Attribute, mit denen Sie das erstellte Objekt konfigurieren können. Weitere Informationen zu globalen Methoden und ihren Eigenschaften finden Sie in der Dataform Core-Referenz.

In der Methode publish(), mit der eine Tabelle erstellt wird, können Sie Tabellenattribute festlegen, indem Sie sie als zweites Methodenargument übergeben.

So übergeben Sie Tabellenattribute als zweites Argument von publish():

  1. Maximieren Sie im Entwicklungsarbeitsbereich im Bereich Dateien definitions/.

  2. Wählen Sie eine JavaScript-Datei aus.

  3. Fügen Sie in der Datei der Methode publish() Tabellenattribute im folgenden Format hinzu:

     method("first_method_argument", {
       property1: "property1_value",
       property2: "property2_value",
       property3: "property3_value",
     });
    
  4. Optional: Klicken Sie auf Format.

Das folgende Codebeispiel zeigt, wie Sie Attribute für die Methode publish() festlegen, indem Sie die Attribute als zweites Argument der Methode übergeben:

  publish("table1", {
    type: "table",
    dependencies: ["other_table"],
    description: {
      "Value is 1"
    }
  }).query(ctx => "SELECT 1 AS test");

Referenz-Includes in einer JavaScript-Datei

Sie können in einer JavaScript-Datei auf beliebige einzuschließende Funktionen, Makros oder Konstanten verweisen. Weitere Informationen zu Einbindungen in Dataform finden Sie unter Variablen und Funktionen mit JavaScript-Includes wiederverwenden.

Die Syntax für Verweis-Includes in einer JavaScript-Datei hängt vom Speicherort der include-Datei ab. Dataform speichert solche Dateien im Verzeichnis „Includes“.

Referenz-Includes der obersten Ebene

  • Verweisen Sie beim Deklarieren der Variablen auf den Dateinamen, um auf eine Einbindungsdatei der obersten Ebene zu verweisen.

Im folgenden Codebeispiel wird auf die Variablen serviceName und serviceId aus der Datei includes/service.js verwiesen:

  const {serviceName, serviceId} = service;

Verschachtelte Referenz-Includes

Geben Sie den Dateinamen in der JavaScript-require-Funktion ein, um auf eine verschachtelte include-Datei zu verweisen.

Im folgenden Codebeispiel wird auf die Variablen serviceName und serviceId aus der Datei includes/allServices/service.js verwiesen:

  const {serviceName, serviceId} = require("includes/allServices/service.js");

Dataform-Abfragefunktionen in JavaScript-Methoden verwenden

Dataform bietet eine Reihe von integrierten Funktionen, die Sie in Abfragen verwenden können, z. B. ref und self. Weitere Informationen zu den integrierten Dataform-Funktionen finden Sie in der Referenz zur Dataform API.

So verwenden Sie eine integrierte Abfragefunktion in einer JavaScript-Methode:

  1. Maximieren Sie im Entwicklungsarbeitsbereich im Bereich Dateien definitions/.

  2. Wählen Sie eine JavaScript-Datei aus.

  3. Geben Sie in der Datei eine globale Dataform-JavaScript-Methode ein.

  4. Geben Sie in der Methode ein kontextlesbares ctx-Argument ein.

  5. Optional: Wenn Sie JavaScript-Vorlagenstrings verwenden, umschließen Sie das kontextfähige Argument in Graviszeichen ``.

  6. Geben Sie im kontextfähigen Argument die Abfragefunktion mit ihrem Parameter als Kontextobjekt ein.

  7. Optional: Klicken Sie auf Format.

Das folgende Codebeispiel zeigt die Abfragefunktion ref, die in ein kontextlesbares Argument der Veröffentlichungsmethode eingebettet ist:

  publish("example").query(ctx => `SELECT * FROM ${ctx.ref("other_table")}`);

SQL-Workflow-Datenquelle mit JavaScript deklarieren

Mit der Dataform-Methode zur Deklaration von JavaScript können Sie mehrere Datenquellen in einer JavaScript-Deklarationsdatei angeben. Weitere Informationen zur Deklarationsmethode finden Sie in der Dataform Core-Referenz. Weitere Informationen zu Datenquellen in Dataform finden Sie unter Datenquellen deklarieren.

So deklarieren Sie eine Datenquelle in einer JavaScript-Datei:

  1. Maximieren Sie im Entwicklungsarbeitsbereich im Bereich Dateien die Definitionen/.

  2. Wählen Sie eine JavaScript-Datei aus.

  3. Geben Sie in die Datei das folgende Code-Snippet ein:

     declare({
       database: "DATABASE_PROJECT_ID",
       schema: "BIGQUERY_SCHEMA",
       name: "RELATION_NAME",
     });
    

    Ersetzen Sie Folgendes:

    • DATABASE_PROJECT_ID: die Projekt-ID des Projekts, das die Datenquelle enthält
    • BIGQUERY_SCHEMA: das BigQuery-Dataset, in dem die externe Beziehung besteht
    • RELATION_NAME: der Name der Beziehung, mit der Sie später auf die Datenquelle in Dataform verweisen können
  4. Wenn Sie eine weitere Datenquelle in derselben Datei deklarieren möchten, fügen Sie der Datei einen zusätzlichen declare-Block hinzu.

  5. Optional: Klicken Sie auf Format.

Tabelle mit JavaScript definieren

Sie können eine Tabelle mit der Dataform-JavaScript-Methode publish erstellen. Weitere Informationen zur Veröffentlichungsmethode finden Sie in der Dataform Core-Referenz.

Sie können die folgenden Tabellentypen definieren: Tabelle, inkrementelle Tabelle und Ansicht. Weitere Informationen zum Definieren von Tabellen in Dataform finden Sie unter Tabelle erstellen.

So definieren Sie eine Tabelle in einer JavaScript-Datei:

  1. Maximieren Sie im Entwicklungsarbeitsbereich im Bereich Dateien definitions/.

  2. Wählen Sie eine JavaScript-Datei aus.

  3. Geben Sie in die Datei das folgende Code-Snippet ein:

     publish("TABLE_NAME").query(ctx => "SELECT_QUERY");
    
    1. Ersetzen Sie TABLE_NAME durch den Namen der Tabelle.

    2. Ersetzen Sie SELECT_QUERY durch eine SQL-SELECT-Anweisung, die die Tabelle definiert.

  4. Legen Sie Objekteigenschaften der publish-Methode fest, um den Tabellentyp festzulegen, Tabellenabhängigkeiten hinzuzufügen und eine Tabellenbeschreibung hinzuzufügen.

  5. Um eine weitere Tabelle in derselben Datei zu definieren, wiederholen Sie Schritt 3 und Schritt 4.

  6. Optional: Klicken Sie auf Format.

Manuelle Dataform-Assertions mit JavaScript definieren

Mit der Dataform-Assertion-JavaScript-Methode können Sie manuelle SQL-Assertions in einer JavaScript-Datei erstellen. Weitere Informationen zur Assertion-Methode finden Sie in der Dataform Core-Referenz.

Eine manuelle Assertion-SQL-Abfrage muss null Zeilen zurückgeben. Wenn die Abfrage bei der Ausführung Zeilen zurückgibt, schlägt die Assertion fehl. Sie können mehrere Assertions in einer JavaScript-Datei erstellen.

Weitere Informationen zu Assertions in Dataform finden Sie unter Tabellen mit Assertions testen.

So erstellen Sie eine manuelle Assertion in einer JavaScript-Datei:

  1. Maximieren Sie im Entwicklungsarbeitsbereich im Bereich Dateien definitions/.

  2. Wählen Sie eine JavaScript-Datei aus.

  3. Geben Sie in die Datei das folgende Code-Snippet ein:

     assert("ASSERTION_NAME").query(ctx => "CUSTOM_ASSERTION_QUERY");
    
    1. Ersetzen Sie ASSERTION_NAME durch den Namen der benutzerdefinierten Assertion.

    2. Ersetzen Sie CUSTOM_ASSERTION_QUERY durch Ihre SQL-Assertion-Abfrage.

  4. Wiederholen Sie Schritt 3, um eine weitere Assertion in derselben Datei zu erstellen.

  5. Optional: Klicken Sie auf Format.

Das folgende Codebeispiel zeigt eine JavaScript-Assertion, die behauptet, dass kein Wert in source_table NULL ist:

  assert("assertion1").query(ctx => "SELECT * FROM source_table WHERE value IS NULL");

Benutzerdefinierte SQL-Vorgänge mit JavaScript definieren

Mit der JavaScript-Methode von Dataform können Sie benutzerdefinierte SQL-Vorgänge in einer JavaScript-Datei definieren. Weitere Informationen zu benutzerdefinierten SQL-Vorgängen in Dataform finden Sie unter Benutzerdefinierte SQL-Vorgänge hinzufügen.

So definieren Sie einen benutzerdefinierten SQL-Vorgang mit JavaScript:

  1. Maximieren Sie im Entwicklungsarbeitsbereich im Bereich Dateien definitions/.

  2. Wählen Sie eine JavaScript-Datei aus.

  3. Geben Sie in die Datei das folgende Code-Snippet ein:

     operate("OPERATION_NAME").queries(ctx => "CUSTOM_SQL_QUERY");
    
    1. Ersetzen Sie OPERATION_NAME durch den Namen des benutzerdefinierten Vorgangs.

    2. Ersetzen Sie CUSTOM_SQL_QUERY durch Ihre benutzerdefinierte SQL-Abfrage.

  4. Um einen weiteren benutzerdefinierten SQL-Vorgang in derselben Datei zu definieren, wiederholen Sie Schritt 3.

  5. Optional: Klicken Sie auf Format.

Das folgende Codebeispiel zeigt einen benutzerdefinierten SQL-Vorgang in einer JavaScript-Datei, der eine einzelne neue Zeile in some_table einfügt und test_column der neuen Zeile auf 2 festlegt:

  operate("operation1").queries("INSERT INTO some_table (test_column) VALUES (2)");

Nächste Schritte