Descripción general de Dataform

En este documento, se presentan los conceptos y procesos de Dataform.

Dataform es un servicio para que los analistas de datos desarrollen, prueben, controlen versiones y programen flujos de trabajo complejos para transformar datos en BigQuery.

Dataform te permite administrar la transformación de datos en el proceso de extracción, carga y transformación (ELT) para la integración de datos. Después de extraer datos sin procesar de los sistemas de origen y cargarlos en BigQuery, Dataform te ayuda a transformarlos en un conjunto de tablas de datos bien definido, probado y documentado.

Dataform te permite realizar las siguientes acciones de transformación de datos:

  • Desarrollar y ejecutar flujos de trabajo para la transformación de datos
  • Colaborar con los miembros del equipo en el desarrollo de flujos de trabajo a través de Git
  • Administrar una gran cantidad de tablas y sus dependencias
  • Declara los datos de origen y administra las dependencias de las tablas.
  • Consulta una visualización del árbol de dependencias de tu flujo de trabajo.
  • Administrar datos con código SQL en un repositorio central
  • Vuelve a usar el código con JavaScript.
  • Prueba la exactitud de los datos con pruebas de calidad en las tablas de origen y de resultados.
  • Controla la versión del código SQL.
  • Documenta las tablas de datos dentro del código SQL.

Procesos de transformación de datos en Dataform

El flujo de trabajo de transformación de datos de Dataform es el siguiente:

  1. Dataform te permite crear repositorios para administrar tu código.
  2. Dataform te permite crear espacios de trabajo para el desarrollo.
  3. Dataform te permite desarrollar flujos de trabajo en un espacio de trabajo de desarrollo.
  4. Dataform compila Dataform core en SQL.
  5. Dataform ejecuta el árbol de dependencias.

Dataform te permite crear repositorios para administrar tu código.

En un repositorio de Dataform, usas Dataform core, una extensión de SQL, para escribir archivos SQLX en los que defines tu flujo de trabajo. Los repositorios de Dataform admiten el control de versiones. Puedes vincular un repositorio de Dataform a un proveedor de Git externo.

Dataform te permite crear espacios de trabajo para el desarrollo

Puedes crear espacios de trabajo de desarrollo dentro de un repositorio de Dataform para el desarrollo de Dataform core. En un espacio de trabajo de desarrollo, puedes realizar cambios en el repositorio, compilarlo, probarlo y enviarlo al repositorio principal a través de Git.

Dataform te permite desarrollar el núcleo de Dataform en un espacio de trabajo de desarrollo

En un espacio de trabajo de desarrollo, puedes definir y documentar tablas, sus dependencias y la lógica de transformación para compilar tu flujo de trabajo. También puedes configurar acciones en JavaScript.

Dataform compila el núcleo de Dataform

Durante la compilación, Dataform realiza las siguientes tareas:

  • Compila el núcleo de Dataform en un flujo de trabajo de SQL estándar.
  • Agrega instrucciones SQL de plantilla, como CREATE TABLE o INSERT, al código intercalado con la configuración de tu consulta.
  • Transpila (compila de fuente a fuente) JavaScript a SQL.
  • Resuelve las dependencias y verifica si hay errores, incluidas las dependencias circulares o faltantes.
  • Compila el árbol de dependencias de todas las acciones que se ejecutarán en BigQuery.

La compilación de Dataform es hermética para garantizar la coherencia de la compilación, lo que significa que el mismo código se compila en el mismo resultado de compilación de SQL cada vez. Dataform compila tu código en un entorno de zona de pruebas sin acceso a Internet. No hay acciones adicionales, como llamar a APIs externas, disponibles durante la compilación.

Para depurar en tiempo real, puedes inspeccionar el flujo de trabajo compilado de tu proyecto en un gráfico interactivo en tu lugar de trabajo de desarrollo.

Dataform ejecuta el árbol de dependencias

En BigQuery, Dataform realiza las siguientes tareas:

  • Ejecuta comandos SQL siguiendo el orden del árbol de dependencias.
  • Ejecuta consultas de aserción en tus tablas y vistas para verificar la exactitud de los datos.
  • Ejecuta otras operaciones SQL que definiste.

Después de la ejecución, puedes usar las tablas y vistas para todos tus fines de análisis.

Puedes ver los registros para ver qué tablas se crearon, si las aserciones se aprobaron o no, cuánto tiempo tardó en completarse cada acción y otra información. También puedes ver el código SQL exacto que se ejecutó en BigQuery.

Funciones de Dataform

Con Dataform, puedes desarrollar e implementar tablas, tablas incrementales o vistas en BigQuery. Dataform ofrece un entorno web para las siguientes actividades:

  • Desarrollo de flujos de trabajo
  • Conexión con GitHub, GitLab, Azure DevOps Services y Bitbucket
  • La integración y la implementación continuas
  • Ejecución del flujo de trabajo

En las siguientes secciones, se describen las funciones principales de Dataform.

Repositorios

Cada proyecto de Dataform se almacena en un repositorio. Un repositorio de Dataform contiene una colección de archivos de configuración JSON, archivos SQLX y archivos JavaScript.

Los repositorios de Dataform contienen los siguientes tipos de archivos:

  • Archivos de configuración

    Los archivos de configuración JSON o SQLX te permiten configurar tus flujos de trabajo. Contienen la configuración general, los programas de ejecución o el esquema para crear tablas y vistas nuevas.

  • Definiciones

    Las definiciones son archivos SQLX y JavaScript que definen tablas, vistas y operaciones de SQL adicionales nuevas para ejecutar en BigQuery.

  • Incluye

    Los incluidos son archivos JavaScript en los que puedes definir variables y funciones para usar en tu proyecto.

Cada repositorio de Dataform está conectado a una cuenta de servicio. Puedes seleccionar una cuenta de servicio cuando creas un repositorio o editas la cuenta de servicio más adelante.

De forma predeterminada, Dataform usa una cuenta de servicio derivada de tu número de proyecto en el siguiente formato:

service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

Control de versión

Dataform usa el sistema de control de versiones de Git para mantener un registro de cada cambio realizado en los archivos del proyecto y administrar las versiones de los archivos.

Cada repositorio de Dataform puede administrar su propio repositorio de Git o conectarse a un repositorio de Git remoto de terceros. Puedes conectar un repositorio de Dataform a un repositorio de GitHub, GitLab, Azure DevOps Services o Bitbucket.

Los usuarios controlan la versión de su código de flujo de trabajo dentro de los espacios de trabajo de Dataform. En un espacio de trabajo de Dataform, puedes extraer cambios del repositorio, confirmar todos los cambios o los seleccionados, y enviarlos a las ramas de Git del repositorio.

Desarrollo de flujos de trabajo

En Dataform, puedes realizar cambios en archivos y directorios dentro de un espacio de trabajo de desarrollo. Un espacio de trabajo de desarrollo es una copia virtual y editable del contenido de un repositorio de Git. Dataform conserva el estado de los archivos en tu espacio de trabajo de desarrollo entre sesiones.

En un lugar de trabajo de desarrollo, puedes desarrollar acciones de flujo de trabajo de SQL con Dataform core con SQLX y JavaScript, o exclusivamente con JavaScript. Puedes dar formato automáticamente a tu código de Dataform core o JavaScript.

Cada elemento de un flujo de trabajo de Dataform, como una tabla o una aserción, corresponde a una acción que Dataform realiza en BigQuery. Por ejemplo, un archivo de definición de tabla es una acción de crear o actualizar la tabla en BigQuery.

En un espacio de trabajo de Dataform, puedes desarrollar las siguientes acciones de flujo de trabajo:

Puedes usar JavaScript para volver a usar el código de flujo de trabajo de Dataform de las siguientes maneras:

Dataform compila el código del flujo de trabajo en tu espacio de trabajo en tiempo real. En tu lugar de trabajo, puedes ver las consultas compiladas y los detalles de las acciones en cada archivo. También puedes ver el estado de compilación y los errores en el archivo editado o en el repositorio.

Para probar el resultado de una consulta de SQL compilada antes de ejecutarla en BigQuery, puedes ejecutar una vista previa de la consulta en tu lugar de trabajo de Dataform.

Para inspeccionar todo el flujo de trabajo definido en tu lugar de trabajo, puedes ver un gráfico compilado interactivo que muestra todas las acciones compiladas en tu flujo de trabajo y las relaciones entre ellas.

Compilación del flujo de trabajo

Dataform usa la configuración de compilación predeterminada, configurada en el archivo de configuración del flujo de trabajo, para compilar el código del flujo de trabajo en tu espacio de trabajo a SQL en tiempo real, lo que crea un resultado de compilación del espacio de trabajo.

Puedes anular la configuración de compilación para personalizar la forma en que Dataform compila tu flujo de trabajo en un resultado de compilación.

Con las anulaciones de compilación de lugares de trabajo, puedes configurar anulaciones de compilación para todos los lugares de trabajo de un repositorio. Puedes establecer anulaciones de lugares de trabajo dinámicos para crear resultados de compilación personalizados para cada lugar de trabajo, lo que convierte a los lugares de trabajo en entornos de desarrollo aislados. Puedes anular el Google Cloud proyecto en el que Dataform ejecutará el contenido de un lugar de trabajo, agregar un prefijo a los nombres de todas las tablas compiladas y agregar un sufijo al esquema predeterminado.

Con las configuraciones de lanzamiento, puedes configurar plantillas de parámetros de configuración de compilación para crear resultados de compilación de un repositorio de Dataform. En una configuración de lanzamiento, puedes anular el proyecto Google Cloud en el que Dataform ejecutará los resultados de la compilación, agregar un prefijo a los nombres de todas las tablas compiladas, agregar un sufijo al esquema predeterminado y agregar variables de compilación. También puedes establecer la frecuencia con la que se crean los resultados de la compilación. Para programar ejecuciones de resultados de compilación creados en una configuración de lanzamiento seleccionada, puedes crear una configuración de flujo de trabajo.

Ejecución del flujo de trabajo

Durante la ejecución del flujo de trabajo, Dataform ejecuta los resultados de compilación de los flujos de trabajo para crear o actualizar recursos en BigQuery.

Para crear o actualizar las tablas y vistas definidas en tu flujo de trabajo en BigQuery, puedes iniciar una ejecución de flujo de trabajo de forma manual en un lugar de trabajo de desarrollo o programar ejecuciones.

Puedes programar ejecuciones de Dataform en BigQuery de las siguientes maneras:

Para depurar errores, puedes supervisar las ejecuciones de las siguientes maneras:

Núcleo de Dataform

Dataform core es un metalenguaje de código abierto para crear flujos de trabajo y tablas SQL. El núcleo de Dataform extiende SQL, ya que proporciona un sistema de administración de dependencias, pruebas de calidad de datos automatizadas y documentación de datos.

Puedes usar Dataform Core para los siguientes fines:

  • Definir tablas, vistas, vistas materializadas o tablas incrementales
  • Definición de la lógica de transformación de los datos
  • Declara datos de origen y administra dependencias de tablas
  • Documentación de las descripciones de las tablas y columnas dentro del código
  • Cómo volver a usar funciones y variables en diferentes consultas
  • Cómo escribir aserciones de datos para garantizar la coherencia de los datos

En Dataform, usas el núcleo de Dataform para desarrollar flujos de trabajo y, luego, implementar recursos en BigQuery.

El núcleo de Dataform forma parte del framework de modelado de datos de Dataform de código abierto que también incluye Dataform CLI. Puedes compilar y ejecutar el núcleo de Dataform de forma local a través de la CLI de Dataform fuera de Google Cloud.

Para usar el núcleo de Dataform, escribes archivos SQLX. Cada archivo SQLX contiene una consulta que define una relación de bases de datos que Dataform crea y actualiza dentro de BigQuery.

Dataform compila tu código principal de Dataform en tiempo real para crear un resultado de compilación de SQL que puedes ejecutar en BigQuery.

La compilación de Dataform es hermética para garantizar la coherencia de la compilación, lo que significa que el mismo código se compila en el mismo resultado de compilación de SQL cada vez. Dataform compila tu código en un entorno de zona de pruebas sin acceso a Internet. No hay acciones adicionales disponibles durante la compilación, como llamar a APIs externas.

Bloque de configuración del archivo SQLX

Un archivo SQLX consta de un bloque de configuración y un cuerpo. Todas las propiedades de configuración y el bloque de configuración en sí son opcionales. Teniendo en cuenta esto, cualquier archivo SQL sin formato es un archivo SQLX válido que Dataform ejecuta tal como está.

En el bloque de configuración, puedes realizar las siguientes acciones:

Especifica los metadatos de la consulta

Puedes configurar cómo Dataform materializa las consultas en BigQuery, por ejemplo, el tipo de tabla de salida, la base de datos de destino o las etiquetas con los metadatos de configuración.

Documenta datos

Puedes documentar tus tablas y sus campos directamente en el bloque de configuración. La documentación de tus tablas se envía directamente a BigQuery. Puedes analizar esta documentación y enviarla a otras herramientas.

Define pruebas de calidad de los datos

Puedes definir pruebas de calidad de los datos, llamadas afirmaciones, para verificar la unicidad, los valores nulos o una condición personalizada. Dataform agrega las aserciones definidas en el bloque de configuración al árbol de dependencias de tu flujo de trabajo después de la creación de la tabla. También puedes definir aserciones fuera del bloque de configuración, en un archivo SQLX independiente.

En la siguiente muestra de código, se muestra cómo definir el tipo de tabla de salida, documentarla y definir una prueba de calidad en un bloque de configuración de un archivo SQLX.

config {
  type: "table",
    description: "This table joins orders information from OnlineStore & payment information from PaymentApp",
  columns: {
    order_date: "The date when a customer placed their order",
    id: "Order ID as defined by OnlineStore",
    order_status: "The status of an order e.g. sent, delivered",
    customer_id: "Unique customer ID",
    payment_status: "The status of a payment e.g. pending, paid",
    payment_method: "How the customer chose to pay",
    item_count: "The number of items the customer ordered",
    amount: "The amount the customer paid"
  },
    assertions: {
    uniqueKey: ["id"]
  }
}

Cuerpo del archivo SQLX

En el cuerpo de un archivo SQLX, puedes realizar las siguientes acciones:

Define una tabla

Para definir una tabla nueva, puedes usar las sentencias SELECT de SQL y la función ref.

La función ref es una función integrada de SQLX que es fundamental para la administración de dependencias en Dataform. La función ref te permite hacer referencia a las tablas definidas en tu proyecto de Dataform en lugar de codificar de forma fija el esquema y los nombres de las tablas de tu tabla de datos.

Dataform usa la función ref para compilar un árbol de dependencias de todas las tablas que se crearán o actualizarán. Después de la compilación, Dataform agrega instrucciones de texto de referencia, como CREATE, REPLACE o INSERT.

En la siguiente muestra de código, se muestra cómo hacer referencia a una tabla en un archivo SQLX con la función ref.

config { type: "table" }

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM ${ref("store_clean")}

GROUP BY 1, 2, 3

El resultado es similar a este:

CREATE OR REPLACE TABLE Dataform.orders AS

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM Dataform_stg.store_clean

GROUP BY 1, 2, 3

Para obtener más información sobre la administración de dependencias adicional, por ejemplo, cómo ejecutar código de forma condicional, con otras funciones integradas en el núcleo de Dataform, consulta la referencia del núcleo de Dataform.

Define operaciones de SQL adicionales

Para configurar Dataform para que ejecute una o más instrucciones SQL antes o después de crear una tabla o vista, puedes especificar operaciones previas y posteriores a la consulta.

En la siguiente muestra de código, se muestra cómo configurar permisos de acceso a la tabla o a la vista en una operación posterior a la consulta.

SELECT * FROM ...

post_operations {
  GRANT `roles/bigquery.dataViewer` ON TABLE ${self()} TO "group:someusers@dataform.co"
}

Encapsula el código SQL

Para definir funciones reutilizables que generen partes repetitivas de código SQL, puedes usar bloques de JavaScript. Puedes volver a usar el código definido en un bloque de JavaScript solo dentro del archivo SLQX en el que se define el bloque. Para volver a usar el código en todo tu repositorio, puedes crear inclusiones.

Para modificar una consulta de forma dinámica, puedes usar JavaScript intercalado en cualquier parte del cuerpo.

En la siguiente muestra de código, se muestra cómo definir un bloque de JavaScript en un archivo SQLX y usarlo intercalado dentro de una consulta:

js {
  const columnName = "foo";
}

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

Limitaciones

Dataform tiene las siguientes limitaciones conocidas:

  • Dataform en Google Cloud se ejecuta en un entorno de ejecución de V8 simple y no es compatible con las funciones y los módulos adicionales que proporciona Node.js. Si tu base de código existente requiere módulos de Node.js, debes quitar estas dependencias.

    Los proyectos sin un campo de nombre en package.json generan diferencias en package-lock.json cada vez que se instalan paquetes. Para evitar este resultado, debes agregar una propiedad name en package.json.

  • No se admiten URLs git+https:// para dependencias en package.json.

    Convierte esas URLs en URLs de archivo https:// simples. Por ejemplo, convierte git+https://github.com/dataform-co/dataform-segment.git#1.5 a https://github.com/dataform-co/dataform-segment/archive/1.5.tar.gz.

  • No está disponible la ejecución manual de pruebas de unidades.

  • La búsqueda de contenido de archivos en espacios de trabajo de desarrollo no está disponible.

  • A partir de Dataform core 3.0.0., Dataform no distribuye una imagen de Docker. Puedes compilar tu propia imagen de Docker de Dataform, que puedes usar para ejecutar el equivalente de los comandos de la CLI de Dataform. Para compilar tu propia imagen de Docker, consulta Cómo organizar una aplicación en contenedores en la documentación de Docker.

  • Los siguientes métodos de la API de Dataform no cumplen con los lineamientos de AIP.134, ya que tratan la entrada de comodín * como una solicitud incorrecta y actualizan todos los campos en lugar de los campos establecidos cuando se omite field_mask:

¿Qué sigue?