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:
- Dataform te permite crear repositorios para administrar tu código.
- Dataform te permite crear espacios de trabajo para el desarrollo.
- Dataform te permite desarrollar flujos de trabajo en un espacio de trabajo de desarrollo.
- Dataform compila Dataform core en SQL.
- 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
oINSERT
, 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:
- Declaraciones de datos de origen
- Tablas y vistas
- Tablas incrementales
- Particiones y clústeres de tablas
- Dependencias entre acciones
- Documentación de tablas
- Operaciones de SQL personalizadas
- Etiquetas de BigQuery
- Etiquetas de políticas de BigQuery
- Etiquetas de Dataform
- Pruebas de calidad de los datos, llamadas aserciones
Puedes usar JavaScript para volver a usar el código de flujo de trabajo de Dataform de las siguientes maneras:
- En un archivo con encapsulamiento de código
- En un repositorio con elementos incluidos
- En varios repositorios con paquetes
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:
- Crea configuraciones de flujo de trabajo para programar ejecuciones de los resultados de compilación creados en las configuraciones de lanzamiento.
- Cómo programar ejecuciones con Cloud Composer
- Programa ejecuciones con Workflows y Cloud Scheduler
Para depurar errores, puedes supervisar las ejecuciones de las siguientes maneras:
- Cómo ver registros de ejecución detallados de Dataform
- Cómo ver los registros de auditoría de Dataform
- Cómo ver los registros de Cloud Logging de Dataform
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.
- Datos de documentos.
- Definir pruebas de calidad de los datos
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 y sus dependencias.
- Define operaciones de SQL adicionales para ejecutar en BigQuery.
- Genera código SQL con JavaScript.
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 enpackage-lock.json
cada vez que se instalan paquetes. Para evitar este resultado, debes agregar una propiedadname
enpackage.json
.No se admiten URLs
git
+https://
para dependencias enpackage.json
.Convierte esas URLs en URLs de archivo
https://
simples. Por ejemplo, conviertegit+https://github.com/dataform-co/dataform-segment.git#1.5
ahttps://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 omitefield_mask
:
¿Qué sigue?
- Para obtener más información sobre el ciclo de vida del código en Dataform, consulta Introducción al ciclo de vida del código en Dataform.
- Para obtener más información sobre los repositorios de Dataform, consulta Introducción a los repositorios.
- Para obtener más información sobre los lugares de trabajo de Dataform, consulta Introducción al desarrollo en un lugar de trabajo.
- Para obtener más información sobre el desarrollo de flujos de trabajo en Dataform, consulta Introducción a los flujos de trabajo de SQL.
- Para obtener más información sobre la CLI de Dataform, consulta Cómo usar la CLI de Dataform.