Utiliser JavaScript dans Dataform

Ce document vous explique comment utiliser JavaScript pour développer des workflows dans Dataform. Ce document vous explique également comment utiliser JavaScript pour créer des actions de workflow et comment créer des inclusions JavaScript pour réutiliser du code dans Dataform.

Dataform Core vous permet de créer des actions de workflow avec SQLX et JavaScript. Bien que cela soit facultatif, vous pouvez utiliser JavaScript avec SQLX pour créer des éléments similaires de manière répétée dans votre workflow. Par exemple, avec JavaScript, vous pouvez créer une vue de chaque tableau de votre workflow en supprimant certains ID utilisateur. Vous pouvez également développer des actions de workflow exclusivement avec JavaScript.

Avant de commencer

  1. Dans la console Google Cloud , accédez à la page Dataform.

    Accéder à Dataform

  2. Sélectionnez ou créez un dépôt.

  3. Sélectionnez ou créez un espace de travail de développement.

De plus, vous devez connaître la syntaxe JavaScript et les concepts JavaScript suivants :

  • Variables
  • Tableaux
  • Instructions conditionnelles
  • Boucles For
  • Maps
  • Fonctions
  • Objets
  • Exporter et importer des modules

Rôles requis

Pour obtenir les autorisations nécessaires pour développer un workflow avec JavaScript et réutiliser du code avec les inclusions JavaScript, demandez à votre administrateur de vous accorder le rôle IAM Éditeur Dataform (roles/dataform.editor) sur les espaces de travail. Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Ajouter du code JavaScript à un fichier SQLX

Vous pouvez ajouter du code JavaScript à un fichier SQLX de deux manières : en ligne ou dans un bloc JavaScript.

Vous pouvez utiliser un bloc JavaScript pour définir des fonctions ou des constantes dans un fichier SQLX. Vous pouvez utiliser JavaScript intégré pour modifier dynamiquement une requête SQLX ou SQL.

L'exemple de code suivant montre la fonction JavaScript intégrée self Dataform Core ajoutée en ligne au bloc post_operations dans un fichier SQLX :

config {type: "table"}

SELECT * FROM ...

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

L'exemple de code suivant montre une constante définie dans un bloc JavaScript et utilisée de manière intégrée dans une requête d'un fichier SQLX :

js {
  const columnName = "foo";
}

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

Réutiliser du code dans un même fichier SQLX avec l'encapsulation JavaScript

Vous pouvez réutiliser le code JavaScript pour simplifier le développement dans Dataform. Pour réutiliser des constantes et des fonctions JavaScript dans un même fichier SQLX, vous pouvez les encapsuler dans un bloc JavaScript. Pour réutiliser du code JavaScript dans un même dépôt Dataform, vous pouvez créer des inclusions. Pour réutiliser du code JavaScript dans plusieurs dépôts Dataform, vous pouvez créer ou importer un package.

Pour créer des parties répétitives de code SQL que vous pouvez réutiliser dans un même fichier SQLX, vous pouvez encapsuler des fonctions et des constantes dans un bloc JavaScript. Vous ne pouvez réutiliser le code défini dans un bloc JavaScript que dans le fichier SQLX où le bloc est défini. Pour en savoir plus, consultez Dataform Core.

L'exemple de code suivant montre une constante et une fonction définies dans un bloc JavaScript et utilisées de manière intégrée dans une requête d'un fichier SQLX :

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

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

Réutiliser du code dans un même dépôt avec les inclusions

Les inclusions sont des constantes ou des fonctions JavaScript globales à votre dépôt. Vous définissez les inclusions dans le répertoire includes de votre dépôt. Vous pouvez ensuite les réutiliser dans votre dépôt dans des fichiers JavaScript et SQLX.

L'exemple de code suivant montre la définition de la constante launch_date dans le fichier includes/constants.js :

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

L'exemple de code suivant montre la constante launch_date référencée dans une requête de définition de table dans un fichier SQLX :

config {type: "table"}

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

Créer un fichier JavaScript pour les inclusions

Pour créer un fichier JavaScript dans le répertoire includes/, procédez comme suit :

  1. Dans le volet Fichiers, à côté de includes/, cliquez sur  Plus.

  2. Cliquez sur Créer un fichier.

  3. Dans le volet Créer un fichier, procédez comme suit :

    1. Dans le champ Ajouter un chemin d'accès au fichier, après includes/, saisissez le nom du fichier suivi de .js. Par exemple, includes/constants.js.

      Les noms de fichiers ne peuvent contenir que des chiffres, des lettres, des traits d'union et des traits de soulignement.

    2. Cliquez sur Créer un fichier.

Créer une constante JavaScript

Pour créer une constante que vous pourrez réutiliser dans votre projet, procédez comme suit :

  1. Accédez à votre espace de travail de développement.

  2. Dans le volet Fichiers, développez includes/.

  3. Créez ou sélectionnez un fichier JavaScript avec l'extension .js.

  4. Dans le fichier, saisissez l'extrait de code suivant :

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

    Remplacez les éléments suivants :

    • CONSTANT_NAME : nom de votre constante
    • CONSTANT_VALUE : valeur de votre constante
  5. Facultatif : Cliquez sur Format.

L'exemple de code suivant définit la constante PROJECT_ID dans le fichier includes/constants.js :

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

L'exemple de code suivant fait référence à la constante PROJECT_ID dans une requête de définition de table dans un fichier SQLX :

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

L'exemple de code suivant montre la requête de définition de table Dataform Core précédente compilée en SQL :

  SELECT * FROM my_project_name.my_schema_name.my_table_name

Créer une fonction JavaScript personnalisée

Pour créer une fonction JavaScript personnalisée que vous pouvez réutiliser dans votre projet, procédez comme suit :

  1. Accédez à votre espace de travail de développement.

  2. Dans le volet Fichiers, développez includes/.

  3. Créez ou sélectionnez un fichier JavaScript avec l'extension .js.

  4. Dans le fichier, écrivez votre fonction JavaScript personnalisée.

  5. Dans le fichier, saisissez l'extrait de code suivant :

     module.exports = { FUNCTION_NAME }
    

    Remplacez FUNCTION_NAME par le nom de votre fonction.

  6. Facultatif : Cliquez sur Format.

L'exemple de code suivant montre une fonction JavaScript personnalisée appelée renderScript et stockée dans le fichier includes/functions.js. La fonction génère un script SQL :

  function renderScript(table,