Crea un paquete en Dataform

En este documento, se muestra cómo crear un paquete de JavaScript personalizado que puedes usar para desarrollar flujos de trabajo de SQL en Dataform.

Para crear un paquete que puedas volver a usar en varios repositorios de Dataform, debes crear un repositorio de Dataform dedicado al paquete y conectarlo a un repositorio de Git de terceros para que esté disponible para otros repositorios de Dataform.

Luego, debes crear un archivo index.js de nivel superior y agregar el contenido del paquete exportable, como funciones y constantes, al archivo. Para ver un ejemplo de un paquete creado en Dataform, consulta dataform-package-base en GitHub.

Una vez que crees el paquete, podrás instalarlo en un repositorio de Dataform diferente y usar el contenido exportable del paquete, como constantes y funciones, para desarrollar flujos de trabajo de SQL.

Como alternativa a la creación de un paquete, puedes reutilizar las funciones y constantes de JavaScript en un solo repositorio de Dataform con inclusiones. Para obtener más información, consulta Cómo volver a usar el código en un solo repositorio con instrucciones de inclusión.

Antes de comenzar

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

    Ve a la página Dataform

  2. Crea un repositorio de Dataform dedicado a tu paquete. Haz que el nombre del repositorio coincida con el nombre de tu paquete.

  3. Conecta el repositorio a un repositorio de Git de terceros que alojará tu paquete.

  4. Crea e inicializa un espacio de trabajo en el repositorio de Dataform.

Roles obligatorios

Para obtener los permisos que necesitas para crear un paquete, pídele a tu administrador que te otorgue el rol de IAM de administrador de Dataform (roles/dataform.admin) en los repositorios. 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 mediante roles personalizados o cualquier otro rol predefinido.

Crea un paquete en Dataform

Para crear tu propio paquete con código JavaScript que puedas volver a usar en Dataform, sigue estos pasos en tu lugar de trabajo:

  1. En el panel Archivos, haz clic en el menú Más.

  2. Haz clic en Crear archivo.

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

    2. En el campo Agregar una ruta de acceso al archivo, ingresa index.js.

    3. Haz clic en Crear archivo.

  3. En el archivo index.js, ingresa el código JavaScript que deseas que exporte tu paquete.

    1. Crea constantes en el siguiente formato:

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

      Reemplaza lo siguiente:

      • CONSTANT_NAME: Es el nombre de tu constante.
      • CONSTANT_VALUE: Es el valor de tu constante.
    2. Crea funciones con el siguiente formato:

    function FUNCTION_NAME(PARAMETERS) { FUNCTION_BODY }
    
    module.exports = { FUNCTION_NAME }
    

    Reemplaza lo siguiente:

    • FUNCTION_NAME: El nombre de la función
    • PARAMETERS: Los parámetros de tu función
    • FUNCTION_BODY: Es el código que deseas que ejecute la función.
  4. Opcional: Haz clic en Formato.

  5. Opcional: En el directorio definitions, agrega el código de tu paquete que no se exportará.

  6. Confirma y envía los cambios.

En la siguiente muestra de código del paquete, se muestra el archivo index.js del paquete postoffice que exporta la función getDomain:

// filename index.js
// package name postoffice

const GENERIC_DOMAINS = "('samplemail.com','samplemail.co.uk','examplemailbox.com'";

function getDomain(email) {
  let cleanEmail = `trim(${email})`
  const domain = `substr(${cleanEmail}, strpos(${cleanEmail}, '@') + 1)`;
  return `case
            when ${domain} in ${common.GENERIC_DOMAINS} then ${cleanEmail}
            when ${domain} = "othermailbox.com" then "other.com"
            when ${domain} = "mailbox.com" then "mailbox.global"
            when ${domain} = "support.postman.com" then "postman.com"
            else ${domain}
          end`;
}

module.exports = { getDomain }

¿Qué sigue?