Variablen und Funktionen mit Includes in Dataform wiederverwenden

In diesem Dokument erfahren Sie, wie Sie JavaScript-Includes erstellen, um Code in Dataform wiederzuverwenden.

Im Ordner includes/ Ihres Repositorys können Sie JavaScript-Einschließen definieren. Eingeschlossen sind globale Konstanten oder Funktionen, die Sie im gesamten Repository wiederverwenden können.

Hinweise

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

    Zu Dataform

  2. Wählen Sie ein Dataform-Repository aus oder erstellen Sie eins.

  3. Wählen Sie einen Dataform-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, um die Berechtigungen zu erhalten, die Sie zur Wiederverwendung von Code mit JavaScript-Includes 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 für in Dataform einschließende Dateien erstellen

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

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

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

    2. Klicken Sie auf Datei erstellen.

JavaScript-Konstante erstellen

So erstellen Sie eine Konstante, die Sie im 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 Erweiterung .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 der Konstante
    • CONSTANT_VALUE: Wert Ihrer Konstante
  5. Optional: Klicken Sie auf Format.

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 Tabellendefinitionsabfrage 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 obige Abfrage der Tabellendefinition Dataform Core in SQL kompiliert:

  SELECT * FROM my_project_name.my_schema_name.my_table_name

Benutzerdefinierte JavaScript-Funktion erstellen

So erstellen Sie eine benutzerdefinierte JavaScript-Funktion, die Sie im 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 Erweiterung .js aus.

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

  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 Format.

Das folgende Codebeispiel zeigt eine benutzerdefinierte JavaScript-Funktion namens renderScript in der Datei includes/functions.js, die ein SQL-Skript generiert:

  function renderScript(table, dimensions, metrics) {
    return `
        select
        ${dimensions.map(field => `${field} as ${field}`).join(",")},
        ${metrics.map(field => `sum(${field}) as ${field}`).join(",\n")}
        from ${table}
        group by ${dimensions.map((field, i) => `${i + 1}`).join(", ")}
      `;
  }

  module.exports = { renderScript };

Das folgende Codebeispiel zeigt die Verwendung der benutzerdefinierten JavaScript-Funktion renderScript in einer Dataform-Haupttabellendefinitionsabfrage:

  config {
      type: "table",
      tags: ["advanced", "hourly"],
      disabled: true
  }

  ${functions.renderScript(ref("source_table"),
                                ["country", "device_type"],
                                ["revenue", "pageviews", "sessions"]
                                )}

Das folgende Codebeispiel zeigt die oben in SQL kompilierte Abfrage der Dataform Core-Tabellendefinition:

  select
    country as country,
    device_type as device_type,
    sum(revenue) as revenue,
    sum(pageviews) as pageviews,
    sum(sessions) as sessions

  from "dataform"."source_table"

  group by 1, 2

Einschluss in einer SQLX-Datei referenzieren

Sie können in einer SQLX-Datei auf eine beliebige Include-Funktion oder Konstante verweisen. Die Syntax für Verweise auf „Includes“ hängt vom Speicherort der Include-Datei ab. Eine Include-Datei der obersten Ebene befindet sich direkt im Verzeichnis includes/. Eine verschachtelte Include-Datei befindet sich in einem Unterverzeichnis von includes/.

Verweis auf einen Include in einer SQLX-Datei auf oberster Ebene

  • Wenn Sie in einer Dataform-Kernabfrage auf eine Einschließen-Funktion oder -Konstante auf oberster Ebene verweisen möchten, geben Sie den Namen der Include-Definitionsdatei ohne die Erweiterung .js gefolgt vom Namen des exportierten Objekts ein.

Im folgenden Codebeispiel wird auf die in der Datei includes/constants.js definierte Konstante firstDate in einer SQLX-Tabellendefinitionsdatei verwiesen:

  config {type: "table"}
  select * from source_table where date > ${constants.firstDate}

Verschachtelte Include-Elemente in einer SQLX-Datei referenzieren

Als Referenz werden Einschließen, die sich in Unterverzeichnissen von definitions befinden, mithilfe der JavaScript-Funktion require und eines js {}-Blocks importiert.

So verweisen Sie auf einen verschachtelten Include mit der JavaScript-Funktion require:

  1. Rufen Sie Ihren Entwicklungsarbeitsbereich auf.

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

  3. Wählen Sie eine SQLX-Datei aus.

  4. Geben Sie im config-Block das folgende Code-Snippet ein:

     js {
       var { VARIABLE_NAME } = require("SUBDIRECTORY_INCLUDE");
     }
    

    Ersetzen Sie Folgendes:

    • VARIABLE_NAME: der Name der Konstante oder Funktion, die Sie importieren möchten
    • SUBDIRECTORY_INCLUDE: der Pfad der verschachtelten Datei includes
  5. Optional: Klicken Sie auf Format.

Im folgenden Codebeispiel wird die in der verschachtelten Datei includes/allConstants/constants.js definierte Konstante firstDate in einer SQLX-Tabellendefinitionsdatei referenziert:

  config {type: "table"}
  js {
    var { firstDate } = require("includes/allConstants/constants");
  }
  select * from source_table where date > ${firstDate}

JavaScript-Einschlussfunktion mit der Dataform-Hauptfunktion ref verwenden

Wenn Sie eine JavaScript-Include-Funktion mit der Dataform-Core-ref-Funktion verwenden möchten, müssen Sie ref als Argument der JavaScript-Include-Funktion in einer SQLX-Datei übergeben.

Das folgende Codebeispiel zeigt die Datei includes/script_builder.js mit der JavaScript-Funktion renderScript, die Messwerte mithilfe von SUM aggregiert und dann nach Dimension gruppiert:

function renderScript(table, dimensions, metrics) {
  return `
      SELECT
      ${dimensions.map((field) => `${field} AS ${field}`).join(",\\n")},
      ${metrics.map((field) => `SUM(${field}) AS ${field}`).join(",\\n")}
      FROM ${table}
      GROUP BY ${dimensions.map((field, i) => `${i + 1}`).join(", ")}
    `;
}
module.exports = { renderScript };

Das folgende Codebeispiel zeigt die JavaScript-Funktion renderScript, die in der Datei definitions/stats_per_country_and_device.sqlx verwendet wird, wobei die Dataform-Kernfunktion ref als Argument übergeben wird:

${script_builder.renderScript(
  ref("source_table"),
  ["country", "device_type"],
  ["revenue", "pageviews", "sessions"])}

Das folgende Codebeispiel zeigt die Abfrage definitions/stats_per_country_and_device.sqlx, die in SQL kompiliert wurde:

SELECT country AS country,
       device_type AS device_type,
       SUM(revenue) AS revenue,
       SUM(pageviews) AS pageviews,
       SUM(sessions) AS sessions
FROM my_schema.source_table
GROUP BY 1, 2

Weitere Informationen zur Dataform-Kernfunktion ref finden Sie unter Übersicht über Dataform Core.

Nächste Schritte