JavaScript in Dataform verwenden

In diesem Dokument erfahren Sie, wie Sie mit JavaScript Workflows in Dataform entwickeln können. In diesem Dokument erfahren Sie auch, wie Sie mit JavaScript Workflowaktionen und JavaScript-Includes erstellen, um Code in Dataform wiederzuverwenden.

Mit Dataform-Core können Sie Workflow-Aktionen mit SQLX und JavaScript erstellen. Die Verwendung von JavaScript zusammen mit SQLX zum wiederholten Erstellen ähnlicher Elemente in Ihrem Workflow ist zwar optional, kann aber hilfreich sein. Mit JavaScript können Sie beispielsweise eine Ansicht jeder Tabelle in Ihrem Workflow erstellen, in der bestimmte Nutzer-IDs entfernt wurden. Sie können Workflow-Aktionen auch ausschließlich mit JavaScript entwickeln.

Hinweis

  1. Rufen Sie in der Google Cloud Console die Seite Dataform auf.

    Zu Dataform

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

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

Außerdem müssen Sie mit der JavaScript-Syntax und den folgenden JavaScript-Konzepten vertraut sein:

  • Variablen
  • Arrays
  • Bedingte Anweisungen
  • For-Schleifen
  • Maps
  • Funktionen
  • Objekte
  • Module exportieren und importieren

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Dataform Editor (roles/dataform.editor) für Arbeitsbereiche zuzuweisen, damit Sie die Berechtigungen erhalten, die Sie zum Entwickeln eines Workflows mit JavaScript und zum Wiederverwenden von Code mit JavaScript-Includes benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

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

JavaScript-Code in eine SQLX-Datei einfügen

Sie können einer SQLX-Datei auf zwei Arten JavaScript-Code hinzufügen: inline oder in einem JavaScript-Block.

Sie können einen JavaScript-Block verwenden, um Funktionen oder Konstanten in einer SQLX-Datei zu definieren. Sie können Inline-JavaScript verwenden, um eine SQLX- oder SQL-Abfrage dynamisch zu ändern.

Das folgende Codebeispiel zeigt die integrierte Dataform Core-JavaScript-Funktion self, die inline zum post_operations-Block in einer SQLX-Datei hinzugefügt wurde:

config {type: "table"}

SELECT * FROM ...

post_operations {
  GRANT `roles/bigquery.dataViewer`
  ON
  TABLE ${self()}
  TO "group:allusers@example.com", "user:otheruser@example.com"
}

Im folgenden Codebeispiel wird eine Konstante gezeigt, die in einem JavaScript-Block definiert und inline in einer Abfrage in einer SQLX-Datei verwendet wird:

js {
  const columnName = "foo";
}

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

Code in einer einzelnen SQLX-Datei mit JavaScript-Kapselung wiederverwenden

Sie können JavaScript-Code wiederverwenden, um die Entwicklung in Dataform zu optimieren. Wenn Sie JavaScript-Konstanten und -Funktionen in einer einzelnen SQLX-Datei wiederverwenden möchten, können Sie sie in einem JavaScript-Block kapseln. Wenn Sie JavaScript-Code in einem einzelnen Dataform-Repository wiederverwenden möchten, können Sie Includes erstellen. Wenn Sie JavaScript-Code in mehreren Dataform-Repositories wiederverwenden möchten, können Sie ein Paket erstellen oder importieren.

Um sich wiederholende Teile von SQL-Code zu erstellen, die Sie in einer einzelnen SQLX-Datei wiederverwenden können, können Sie Funktionen und Konstanten in einem JavaScript-Block kapseln. Sie können Code, der in einem JavaScript-Block definiert ist, nur in der SQLX-Datei wiederverwenden, in der der Block definiert ist. Weitere Informationen finden Sie unter Dataform Core.

Im folgenden Codebeispiel werden eine Konstante und eine Funktion gezeigt, die in einem JavaScript-Block definiert und inline in einer Abfrage in einer SQLX-Datei verwendet werden:

js {
 const foo = 1;
 function bar(number){
     return number+1;
 }
}

select
 ${foo} as one,
 ${bar(foo)} as two

Code in einem einzelnen Repository mit „Includes“ wiederverwenden

„Includes“ sind JavaScript-Konstanten oder -Funktionen, die für Ihr Repository global sind. Sie definieren Includes im Verzeichnis includes Ihres Repositorys. Sie können sie dann in JavaScript- und SQLX-Dateien in Ihrem Repository wiederverwenden.

Das folgende Codebeispiel zeigt die Definition der Konstante launch_date in der Datei includes/constants.js:

// filename is includes/constants.js
const launch_date = "11.11.2011";
module.exports = { launch_date };

Im folgenden Codebeispiel wird die Konstante launch_date in einer Abfrage zur Tabellendefinition in einer SQLX-Datei referenziert:

config {type: "table"}

SELECT * FROM source_table WHERE date > ${constants.launch_date}

JavaScript-Datei für Includes erstellen

So erstellen Sie eine neue JavaScript-Datei im Verzeichnis includes/:

  1. Klicken Sie im Bereich Dateien neben includes/ auf das Dreipunkt-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 includes/ den Namen der Datei gefolgt von .js ein. Beispiel: includes/constants.js

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

    2. Klicken Sie auf Datei erstellen.

JavaScript-Konstante erstellen

So erstellen Sie eine Konstante, die Sie in Ihrem Projekt wiederverwenden können:

  1. Rufen Sie Ihren Entwicklungsarbeitsbereich auf.

  2. Maximieren Sie im Bereich Dateien die Option includes/.

  3. Erstellen oder wählen Sie eine JavaScript-Datei mit der Endung .js aus.

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

     const CONSTANT_NAME = CONSTANT_VALUE;
     module.exports = { CONSTANT_NAME };
    

    Ersetzen Sie Folgendes:

    • CONSTANT_NAME: der Name Ihrer Konstanten
    • CONSTANT_VALUE: der Wert Ihrer Konstanten
  5. Optional: Klicken Sie auf Formatieren.

Im folgenden Codebeispiel wird die Konstante PROJECT_ID in der Datei includes/constants.js definiert:

  // filename is includes/constants.js
  const PROJECT_ID = "my_project_name";
  module.exports = { PROJECT_ID };

Im folgenden Codebeispiel wird in einer Abfrage zur Tabellendefinition in einer SQLX-Datei auf die Konstante PROJECT_ID verwiesen:

  config { type: "table" }
  SELECT * FROM ${constants.PROJECT_ID}.my_schema_name.my_table_name

Das folgende Codebeispiel zeigt die vorherige Dataform Core-Tabellendefinitionsabfrage, die in SQL kompiliert wurde:

  SELECT * FROM my_project_name.my_schema_name.my_table_name

Benutzerdefinierte JavaScript-Funktion erstellen

So erstellen Sie eine benutzerdefinierte JavaScript-Funktion, die Sie in Ihrem gesamten Projekt wiederverwenden können:

  1. Rufen Sie Ihren Entwicklungsarbeitsbereich auf.

  2. Maximieren Sie im Bereich Dateien die Option includes/.

  3. Erstellen oder wählen Sie eine JavaScript-Datei mit der Endung .js aus.

  4. Schreiben Sie Ihre benutzerdefinierte JavaScript-Funktion in die Datei.

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

     module.exports = { FUNCTION_NAME }
    

    Ersetzen Sie FUNCTION_NAME durch den Namen Ihrer Funktion.

  6. Optional: Klicken Sie auf Formatieren.

Das folgende Codebeispiel zeigt eine benutzerdefinierte JavaScript-Funktion mit dem Namen renderScript, die in der Datei includes/functions.js gespeichert ist. Die Funktion generiert ein SQL-Script: