Crea flujos de trabajo de SQL de Dataform con JavaScript

En este documento, se muestra cómo usar JavaScript para crear elementos de flujo de trabajo de SQL en Dataform. Se recomienda usar JavaScript en Dataform Core para crear elementos similares de manera repetida en tu flujo de trabajo.

Acerca del desarrollo de flujos de trabajo en Dataform con JavaScript

Dataform Core te permite crear acciones de flujo de trabajo de SQL con SQLX y JavaScript. Con JavaScript, puedes crear acciones similares repetidamente en tu flujo de trabajo. Por ejemplo, puedes crear una vista de cada tabla en tu flujo de trabajo sin ciertos IDs de usuario.

La siguiente muestra de código JavaScript te permite crear una vista de cada tabla en la que el valor del campo user_id no corresponde a uno de los valores de la lista blocked_user_ids:

  const tableNames = ["user_events", "user_settings", "user_logs"];

  tableNames.forEach(tableName => {
    publish(tableName + "_blocked_removed").query(
      ctx => `
        SELECT * FROM ${ctx.ref(tableName)}
        WHERE user_id NOT IN (
          SELECT user_id
          FROM ${ctx.ref("blocked_user_ids")}
        )`
    );
  });

En esta muestra de código, se crean tres vistas llamadas user_events_blocked_removed, user_settings_blocked_removed y user_logs_blocked_removed que no contienen ninguno de los IDs de usuario bloqueados.

Puedes crear varias acciones dentro de un archivo JavaScript con los métodos globales de Dataform y el código arbitrario ES5 de JavaScript, como bucles y constantes.

Puedes definir las siguientes acciones con JavaScript en Dataform:

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.

Funciones obligatorias

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

Es posible que también puedas obtener los permisos necesarios a través de funciones personalizadas o, también, otras funciones predefinidas.

Crea un archivo JavaScript en Dataform

Almacena archivos JavaScript para definiciones y declaraciones de fuente de datos en el directorio definitions/. Para crear un nuevo archivo JavaScript en el directorio definitions/, sigue estos pasos:

  1. En el panel Files, junto a definitions/, haz clic en el menú More.

  2. Haz clic en Crear archivo.

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

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

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

    2. Haz clic en Crear archivo.

Configura propiedades del objeto de flujo de trabajo de SQL de Dataform con JavaScript

Puedes usar los siguientes métodos globales de Dataform para crear objetos de flujo de trabajo de SQL con Dataform:

  • declare. Se usa para declarar una fuente de datos.
  • publish. Se usa para definir una tabla.
  • assert: Se usa para crear una aserción.
  • operate. Se usa para definir una operación de SQL personalizada.

Cada uno de los métodos globales contiene propiedades que puedes usar para configurar el objeto creado. Para obtener más información sobre los métodos globales y sus propiedades, consulta la Referencia principal de Dataform.

En el método publish() que crea una tabla, puedes configurar las propiedades de la tabla si las pasas como el segundo argumento del método.

Para pasar las propiedades de la tabla como el segundo argumento de publish(), sigue estos pasos:

  1. En el lugar de trabajo de desarrollo, en el panel Files, expande definitions/.

  2. Selecciona un archivo JavaScript.

  3. En el archivo, agrega las propiedades de la tabla al método publish() en el siguiente formato:

     method("first_method_argument", {
       property1: "property1_value",
       property2: "property2_value",
       property3: "property3_value",
     });
    
  4. Opcional: Haz clic en Formato.

En la siguiente muestra de código, se indica cómo establecer propiedades en el método publish() pasando las propiedades como un segundo argumento del método:

  publish("table1", {
    type: "table",
    dependencies: ["other_table"],
    description: {
      "Value is 1"
    }
  }).query(ctx => "SELECT 1 AS test");

Inclusiones de referencia en un archivo JavaScript

Puedes hacer referencia a cualquier función de inclusión, macro o constante dentro de un archivo JavaScript. Para obtener más información sobre inclusiones en Dataform, consulta Vuelve a usar variables y funciones con inclusiones de JavaScript.

La sintaxis para hacer referencia a inclusiones dentro de un archivo JavaScript depende de la ubicación de este. Dataform almacena esos archivos en el directorio inclusiones.

La referencia de nivel superior incluye

  • Para hacer referencia a un archivo de inclusiones de nivel superior, haz referencia al nombre de archivo cuando declares tus variables.

En la siguiente muestra de código, se hace referencia a las variables serviceName y serviceId del archivo includes/service.js:

  const {serviceName, serviceId} = service;

Inclusiones anidadas de referencias

Para hacer referencia a un archivo de inclusiones anidados, ingresa el nombre del archivo en la función de requisitos de JavaScript.

En la siguiente muestra de código, se hace referencia a las variables serviceName y serviceId del archivo includes/allServices/service.js:

  const {serviceName, serviceId} = require("includes/allServices/service.js");

Usa funciones de consulta de Dataform en métodos de JavaScript

Dataform proporciona una serie de funciones integradas que puedes usar dentro de las consultas, como ref y self. Para obtener más información sobre las funciones integradas de Dataform, consulta la referencia de la API de Dataform.

Para usar una función de consulta integrada en un método de JavaScript, sigue estos pasos:

  1. En el lugar de trabajo de desarrollo, en el panel Files, expande definitions/.

  2. Selecciona un archivo JavaScript.

  3. En el archivo, ingresa un método global de Dataform para JavaScript.

  4. En el método, ingresa un argumento ctx contextual.

  5. Opcional: Si usas strings de plantilla de JavaScript, une el argumento contextual entre acentos graves ``.

  6. En el argumento contextual, ingresa la función de consulta con su parámetro como un objeto de contexto.

  7. Opcional: Haz clic en Formato.

En la siguiente muestra de código, se observa la función de consulta ref unida dentro de un argumento contextual del método de publicación:

  publish("example").query(ctx => `SELECT * FROM ${ctx.ref("other_table")}`);

Declara una fuente de datos de flujo de trabajo de SQL con JavaScript

Puedes declarar varias fuentes de datos en un archivo de declaración de JavaScript con el método de declaración de JavaScript de Dataform. Para obtener más información sobre el método de declaración, consulta la referencia principal de Dataform. Para obtener más información sobre las fuentes de datos en Dataform, consulta Cómo declarar una fuente de datos.

Para declarar una fuente de datos en un archivo JavaScript, sigue estos pasos:

  1. En el lugar de trabajo de desarrollo, en el panel Files, expande definiciones/.

  2. Selecciona un archivo JavaScript.

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

     declare({
       database: "DATABASE_PROJECT_ID",
       schema: "BIGQUERY_SCHEMA",
       name: "RELATION_NAME",
     });
    

    Reemplaza lo siguiente:

    • DATABASE_PROJECT_ID: Es el ID del proyecto que contiene la fuente de datos.
    • BIGQUERY_SCHEMA: Es el conjunto de datos de BigQuery en el que existe la relación externa.
    • RELATION_NAME: Es el nombre de la relación que puedes usar más adelante para hacer referencia a la fuente de datos en Dataform
  4. Para declarar otra fuente de datos en el mismo archivo, agrega un bloque declare adicional al archivo.

  5. Opcional: Haz clic en Formato.

Cómo definir una tabla con JavaScript

Puedes crear una tabla con el método publish de JavaScript de Dataform. Para obtener más información sobre el método de publicación, consulta la referencia principal de Dataform.

Puedes definir los siguientes tipos de tablas: tabla, tabla incremental y vista. Si deseas obtener más información para definir tablas en Dataform, consulta Crea una tabla.

Para definir una tabla en un archivo JavaScript, sigue estos pasos:

  1. En el lugar de trabajo de desarrollo, en el panel Files, expande definitions/.

  2. Selecciona un archivo JavaScript.

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

     publish("TABLE_NAME").query(ctx => "SELECT_QUERY");
    
    1. Reemplaza TABLE_NAME por el nombre de la tabla.

    2. Reemplaza SELECT_QUERY por una instrucción SELECT de SQL que defina la tabla.

  4. Para establecer el tipo de tabla, además de agregar las dependencias y la descripción de la tabla, establece las propiedades del objeto del método publish.

  5. Para definir otra tabla en el mismo archivo, repite los pasos 3 y 4.

  6. Opcional: Haz clic en Formato.

Cómo definir aserciones manuales de Dataform con JavaScript

Puedes crear aserciones de SQL manuales en un archivo JavaScript con el método de JavaScript con aserción de Dataform. Para obtener más información sobre el método de aserción, consulta la Referencia principal de Dataform.

Una consulta en SQL de aserción manual debe mostrar cero filas. Si la consulta muestra filas cuando se ejecuta, la aserción falla. Puedes crear varias aserciones en un archivo JavaScript.

Para obtener más información sobre las aserciones en Dataform, consulta Cómo probar tablas con aserciones.

Sigue estos pasos para crear una aserción manual en un archivo JavaScript:

  1. En el lugar de trabajo de desarrollo, en el panel Files, expande definitions/.

  2. Selecciona un archivo JavaScript.

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

     assert("ASSERTION_NAME").query(ctx => "CUSTOM_ASSERTION_QUERY");
    
    1. Reemplaza ASSERTION_NAME por el nombre de tu aserción personalizada.

    2. Reemplaza CUSTOM_ASSERTION_QUERY por tu consulta de aserción de SQL.

  4. Para crear otra aserción en el mismo archivo, repite el paso 3.

  5. Opcional: Haz clic en Formato.

En la siguiente muestra de código, aparece una aserción de JavaScript que establece que ningún valor en source_table es NULL:

  assert("assertion1").query(ctx => "SELECT * FROM source_table WHERE value IS NULL");

Define operaciones personalizadas de SQL con JavaScript

Puedes definir operaciones personalizadas de SQL en un archivo JavaScript con el método JavaScript Operativo de Dataform. Para obtener más información sobre las operaciones de SQL personalizadas en Dataform, consulta Agrega operaciones de SQL personalizadas.

Para definir una operación de SQL personalizada con JavaScript, sigue estos pasos:

  1. En el lugar de trabajo de desarrollo, en el panel Files, expande definitions/.

  2. Selecciona un archivo JavaScript.

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

     operate("OPERATION_NAME").queries(ctx => "CUSTOM_SQL_QUERY");
    
    1. Reemplaza OPERATION_NAME por el nombre de la operación personalizada.

    2. Reemplaza CUSTOM_SQL_QUERY por tu consulta en SQL personalizada.

  4. Para definir otra operación SQL personalizada en el mismo archivo, repite el paso 3.

  5. Opcional: Haz clic en Formato.

En la siguiente muestra de código, se observa una operación de SQL personalizada en un archivo JavaScript que inserta una sola fila nueva en some_table y configura test_column de la fila nueva como 2:

  operate("operation1").queries("INSERT INTO some_table (test_column) VALUES (2)");

¿Qué sigue?