Ce document explique comment créer des instructions JavaScript pour réutiliser du code dans Dataform.
Dans le dossier includes/
de votre dépôt, vous pouvez définir des inclusions JavaScript. Les inclusions sont des constantes ou des fonctions globales que vous pouvez réutiliser dans l'ensemble de votre dépôt.
Avant de commencer
Dans la console Google Cloud, accédez à la page Dataform.
Sélectionnez ou créez un dépôt Dataform.
Sélectionnez ou créez un espace de travail de développement Dataform.
Rôles requis
Pour obtenir les autorisations dont vous avez besoin pour réutiliser du code avec JavaScript, demandez à votre administrateur de vous attribuer 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 la section Gérer les accès.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Créer un fichier JavaScript pour les inclusions dans Dataform
Pour créer un fichier JavaScript dans le répertoire includes/
, procédez comme suit:
Dans le volet Fichiers, à côté de
includes/
, cliquez sur le menu Plus.Cliquez sur Créer un fichier.
Dans le volet Create new file (Créer un fichier), procédez comme suit:
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.
Cliquez sur Créer un fichier.
Créer une constante JavaScript
Pour créer une constante que vous pouvez réutiliser dans votre projet, procédez comme suit:
Accédez à votre espace de travail de développement.
Dans le volet Fichiers, développez
includes/
.Créez ou sélectionnez un fichier JavaScript avec l'extension
.js
.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
(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 ci-dessus, 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:
Accédez à votre espace de travail de développement.
Dans le volet Fichiers, développez
includes/
.Créez ou sélectionnez un fichier JavaScript avec l'extension
.js
.Écrivez votre fonction JavaScript personnalisée dans le fichier.
Dans le fichier, saisissez l'extrait de code suivant :
module.exports = { FUNCTION_NAME }
Remplacez
FUNCTION_NAME
par le nom de votre fonction.(Facultatif) Cliquez sur Format.
L'exemple de code suivant montre une fonction JavaScript personnalisée, appelée renderScript
, dans le fichier includes/functions.js
, qui génère un script SQL:
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 };
L'exemple de code suivant illustre l'utilisation de la fonction JavaScript renderScript
personnalisée dans une requête de définition de table Dataform:
config {
type: "table",
tags: ["advanced", "hourly"],
disabled: true
}
${functions.renderScript(ref("source_table"),
["country", "device_type"],
["revenue", "pageviews", "sessions"]
)}
L'exemple de code suivant montre la requête de définition de table Dataform ci-dessus, compilée en SQL:
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
Référencer une inclusion dans un fichier SQLX
Vous pouvez référencer n'importe quelle fonction ou constante d'inclusion dans un fichier SQLX. La syntaxe de référencement des inclusions dépend de l'emplacement du fichier d'inclusion.
Un fichier d'inclusion de premier niveau se trouve directement dans le répertoire includes/
.
Un fichier d'inclusion imbriqué se trouve dans un sous-répertoire de includes/
.
Référencer une inclusion de niveau supérieur dans un fichier SQLX
- Pour référencer une fonction d'inclusion ou une constante de niveau supérieur dans une requête de base Dataform, saisissez le nom du fichier de définition d'inclusion sans l'extension
.js
, suivie du nom de l'objet exporté.
L'exemple de code suivant fait référence à la constante firstDate
, définie dans le fichier includes/constants.js
, dans un fichier SQLX de définition de table:
config {type: "table"}
select * from source_table where date > ${constants.firstDate}
Référencer une inclusion imbriquée dans un fichier SQLX
Pour référencer des inclusions situées dans les sous-répertoires de definitions
, importez les inclusions à l'aide de la fonction JavaScript require
et d'un bloc js {}
.
Pour référencer une inclusion imbriquée avec la fonction JavaScript require
, procédez comme suit:
Accédez à votre espace de travail de développement.
Dans le volet Fichiers, développez
definitions/
.Sélectionnez un fichier SQLX.
Dans le bloc
config
, saisissez l'extrait de code suivant:js { var { VARIABLE_NAME } = require("SUBDIRECTORY_INCLUDE"); }
Remplacez les éléments suivants :
- VARIABLE_NAME: nom de la constante ou de la fonction que vous souhaitez importer
- SUBDIRECTORY_INCLUDE: chemin d'accès au fichier
includes
imbriqué
(Facultatif) Cliquez sur Format.
L'exemple de code suivant fait référence à la constante firstDate
, définie dans le fichier includes/allConstants/constants.js
imbriqué, dans un fichier SQLX de définition de table:
config {type: "table"}
js {
var { firstDate } = require("includes/allConstants/constants");
}
select * from source_table where date > ${firstDate}
Utiliser une fonction d'inclusion JavaScript avec la fonction ref
de base de Dataform
Pour utiliser une fonction d'inclusion JavaScript avec la fonction principale ref
de Dataform, vous devez transmettre ref
en tant qu'argument de la fonction d'inclusion JavaScript dans un fichier SQLX.
L'exemple de code suivant montre le fichier includes/script_builder.js
avec la fonction JavaScript renderScript
qui agrège les métriques à l'aide de SUM
, puis les regroupe par dimension:
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 };
L'exemple de code suivant montre la fonction JavaScript renderScript
utilisée dans le fichier definitions/stats_per_country_and_device.sqlx
avec la fonction ref
de base Dataform transmise en tant qu'argument:
${script_builder.renderScript(
ref("source_table"),
["country", "device_type"],
["revenue", "pageviews", "sessions"])}
L'exemple de code suivant montre la requête definitions/stats_per_country_and_device.sqlx
compilée en SQL:
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
Pour en savoir plus sur la fonction ref
principale de Dataform, consultez la page Présentation de Dataform Core.
Étapes suivantes
Pour savoir comment référencer des inclusions dans des fichiers JavaScript, consultez la page Créer des workflows SQL avec JavaScript.
Pour savoir comment réutiliser du code avec le code JavaScript intégré et bloquer le bloc dans les fichiers principaux Dataform, consultez la page Présentation de Dataform Core.