Usa JavaScript en Dataform

En este documento, se explica cómo puedes usar JavaScript para desarrollar flujos de trabajo en Dataform. En este documento, también se muestra cómo usar JavaScript para crear acciones de flujo de trabajo y cómo crear inclusiones de JavaScript para reutilizar código en Dataform.

Dataform core te permite crear acciones de flujo de trabajo con SQLX y JavaScript. Si bien es opcional, usar JavaScript junto con SQLX para crear elementos similares de forma repetida en tu flujo de trabajo Por ejemplo, con JavaScript, puedes crear una vista de cada tabla de tu flujo de trabajo con ciertos IDs de usuario quitados. También puedes desarrollar acciones de flujo de trabajo exclusivamente con JavaScript.

Antes de comenzar

  1. En la consola de Google Cloud , ve a la página Dataform.

    Ir a Dataform

  2. Selecciona o crea un repositorio.

  3. Selecciona o crea un lugar de trabajo de desarrollo.

Además, debes conocer la sintaxis de JavaScript y los siguientes conceptos de JavaScript:

  • Variables
  • Arrays
  • Instrucciones condicionales
  • Bucles for
  • Maps
  • Funciones
  • Objetos
  • Cómo importar y exportar módulos

Roles obligatorios

Para obtener los permisos que necesitas para desarrollar un flujo de trabajo con JavaScript y reutilizar código con JavaScript includes, pídele a tu administrador que te otorgue el rol de IAM de Editor de Dataform (roles/dataform.editor) en los espacios de trabajo. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Agrega código JavaScript a un archivo SQLX

Puedes agregar código JavaScript a un archivo SQLX de dos maneras: de forma intercalada o dentro de un bloque JavaScript.

Puedes usar un bloque de JavaScript para definir funciones o constantes en un archivo SQLX. Puedes usar JavaScript intercalado para modificar de forma dinámica una consulta en SQLX o en SQL.

En el siguiente muestra de código, se muestra la función self integrada de JavaScript de Dataform Core agregada de forma intercalada al bloque post_operations en un archivo SQLX:

config {type: "table"}

SELECT * FROM ...

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

En la siguiente muestra de código, se muestra una constante definida en un bloque de JavaScript y se usa de forma intercalada dentro de una consulta en un archivo SQLX:

js {
  const columnName = "foo";
}

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

Cómo reutilizar código en un solo archivo SQLX con encapsulación de JavaScript

Puedes reutilizar el código de JavaScript para optimizar el desarrollo en Dataform. Para reutilizar constantes y funciones de JavaScript en un solo archivo SQLX, puedes encapsularlas en un bloque de JavaScript. Para reutilizar código de JavaScript en un solo repositorio de Dataform, puedes crear archivos de inclusión. Para reutilizar código de JavaScript en varios repositorios de Dataform, puedes crear o importar un paquete.

Para crear partes repetitivas de código SQL que puedas reutilizar en un solo archivo SQLX, puedes encapsular funciones y constantes en un bloque de JavaScript. Solo puedes reutilizar el código definido en un bloque de JavaScript dentro del archivo SQLX en el que se define el bloque. Para obtener más información, consulta Dataform Core.

En la siguiente muestra de código, se muestran una constante y una función definidas en un bloque de JavaScript y que se usan de forma intercalada dentro de una consulta en un archivo SQLX:

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

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

Cómo reutilizar código en un solo repositorio con la función de inclusión

Las inclusiones son constantes o funciones de JavaScript globales para tu repositorio. Defines las inclusiones en el directorio includes de tu repositorio. Luego, puedes reutilizarlos en todo tu repositorio en archivos JavaScript y SQLX.

En el siguiente muestra de código, se muestra la definición de la constante launch_date en el archivo includes/constants.js:

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

En la siguiente muestra de código, se muestra la constante launch_date a la que se hace referencia en una consulta de definición de tabla en un archivo SQLX:

config {type: "table"}

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

Crea un archivo JavaScript para las inclusiones

Para crear un archivo JavaScript nuevo en el directorio includes/, sigue estos pasos:

  1. En el panel Archivos, junto a includes/, haz clic en Más.

  2. Haz clic en Crear archivo.

  3. En el panel Crear un archivo nuevo, haz lo siguiente:

    1. En el campo Agregar una ruta de archivo, después de includes/, ingresa el nombre del archivo seguido de .js. Por ejemplo, includes/constants.js.

      Los nombres de archivo solo pueden incluir números, letras, guiones y guiones bajos.

    2. Haz clic en Crear archivo.

Crea una constante de JavaScript

Para crear una constante que puedas reutilizar en todo tu proyecto, sigue estos pasos:

  1. Ve a tu espacio de trabajo de desarrollo.

  2. En el panel Archivos, expande includes/.

  3. Crea o selecciona un archivo JavaScript con la extensión .js.

  4. En el archivo, ingresa el siguiente fragmento de código:

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

    Reemplaza lo siguiente:

    • CONSTANT_NAME: El nombre de tu constante
    • CONSTANT_VALUE: El valor de tu constante
  5. Opcional: Haz clic en Formato.

En la siguiente muestra de código, se define la constante PROJECT_ID en el archivo includes/constants.js:

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

En la siguiente muestra de código, se hace referencia a la constante PROJECT_ID en una consulta de definición de tabla en un archivo SQLX: