En este documento se presentan los conceptos y procesos de Dataform.
Dataform es un servicio que permite a los analistas de datos desarrollar, probar, controlar versiones y programar flujos de trabajo complejos para transformar datos en BigQuery.
Dataform te permite gestionar la transformación de datos en el proceso de extracción, carga y transformación (ELT) para la integración de datos. Una vez que se han extraído los datos sin procesar de los sistemas de origen y se han cargado 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.
- Colabora con los miembros de tu equipo en el desarrollo de flujos de trabajo mediante Git.
- Gestionar un gran número de tablas y sus dependencias.
- Declara los datos de origen y gestiona las dependencias de las tablas.
- Consulta una visualización del árbol de dependencias de tu flujo de trabajo.
- Gestionar datos con código SQL en un repositorio central.
- Reutiliza código con JavaScript.
- Prueba la exactitud de los datos con pruebas de calidad en las tablas de origen y de salida.
- Controlar las versiones 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 gestionar 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 el núcleo de Dataform en SQL.
- Dataform ejecuta el árbol de dependencias.
Dataform te permite crear repositorios para gestionar tu código
En un repositorio de Dataform, se usa Dataform core, una extensión de SQL, para escribir archivos SQLX en los que se define el 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 en un repositorio de Dataform para el desarrollo principal de Dataform. En un espacio de trabajo de desarrollo, puedes hacer cambios en el repositorio, compilarlo, probarlo y enviarlo al repositorio principal a través de Git.
Dataform te permite desarrollar Dataform Core 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 crear 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.
- Añade instrucciones SQL predefinidas, como
CREATE TABLE
oINSERT
, al código insertado en tu configuración de consulta. - Transpila (compila de origen a origen) JavaScript en SQL.
- Resuelve las dependencias y comprueba si hay errores, incluidas las dependencias que faltan o las circulares.
- Crea el árbol de dependencias de todas las acciones que se van a ejecutar en BigQuery.
La compilación de Dataform es hermética para verificar 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 pruebas sin acceso a Internet. No se pueden realizar acciones adicionales, como llamar a APIs externas, durante la compilación.
Para depurar en tiempo real, puedes inspeccionar el flujo de trabajo compilado de tu proyecto en un gráfico interactivo de tu espacio de trabajo de desarrollo.
Dataform ejecuta el árbol de dependencias
En BigQuery, Dataform lleva a cabo las siguientes tareas:
- Ejecuta comandos SQL siguiendo el orden del árbol de dependencias.
- Ejecuta consultas de aserción en tus tablas y vistas para comprobar que los datos son correctos.
- Ejecuta otras operaciones de SQL que hayas definido.
Una vez ejecutado, puede usar sus tablas y vistas para todos sus propósitos analíticos.
Puedes ver los registros para consultar qué tablas se han creado, si las aserciones se han superado o no, cuánto tiempo ha tardado en completarse cada acción y otra información. También puedes ver el código SQL exacto que se ha ejecutado 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
- Integración y despliegue continuos
- Ejecución del flujo de trabajo
En las siguientes secciones se describen las principales funciones 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 JSON o SQLX de configuración te permiten configurar tus flujos de trabajo. Contienen la configuración general, las programaciones de ejecución o el esquema para crear tablas y vistas.
Definiciones
Las definiciones son archivos SQLX y JavaScript que definen nuevas tablas, vistas y operaciones de SQL adicionales que se ejecutan en BigQuery.
Incluye
Los includes son archivos JavaScript en los que puedes definir variables y funciones para usarlas 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 editar la cuenta de servicio más adelante.
De forma predeterminada, Dataform usa una cuenta de servicio derivada del número de tu proyecto con el siguiente formato:
service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
Control de versiones
Dataform usa el sistema de control de versiones de Git para mantener un registro de cada cambio que se hace en los archivos del proyecto y para gestionar las versiones de los archivos.
Cada repositorio de Dataform puede gestionar 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 las versiones de su código de flujo de trabajo en los espacios de trabajo de Dataform. En un espacio de trabajo de Dataform, puedes extraer cambios del repositorio, confirmar todos los cambios o solo algunos y enviarlos a las ramas de Git del repositorio.
Desarrollo de flujos de trabajo
En Dataform, puedes hacer cambios en los archivos y directorios 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 de tu espacio de trabajo de desarrollo entre sesiones.
En un espacio de trabajo de desarrollo, puedes desarrollar acciones de flujo de trabajo con Dataform Core con SQLX y JavaScript, o exclusivamente con JavaScript. Puedes dar formato automáticamente a tu código principal de Dataform 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 para 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 las tablas
- Operaciones de SQL personalizadas
- Etiquetas de BigQuery
- Etiquetas de política de BigQuery
- Etiquetas de Dataform
- Pruebas de calidad de los datos, llamadas aserciones
Puedes usar JavaScript para reutilizar el código de tu flujo de trabajo de Dataform de las siguientes formas:
- En un archivo con encapsulación de código
- En un repositorio con includes
- En repositorios con paquetes
Dataform compila el código del flujo de trabajo de tu espacio de trabajo en tiempo real. En tu espacio de trabajo, puedes ver las consultas compiladas y los detalles de las acciones de 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 obtener una vista previa de la consulta en tu espacio de trabajo de Dataform.
Para inspeccionar todo el flujo de trabajo definido en tu espacio de trabajo, puedes ver un gráfico compilado interactivo que muestra todas las acciones compiladas de tu flujo de trabajo y las relaciones entre ellas.
Compilación de flujos 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 de tu espacio de trabajo en 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 cómo compila Dataform tu flujo de trabajo en un resultado de compilación.
Con las sustituciones de compilación de espacios de trabajo, puedes configurar sustituciones de compilación para todos los espacios de trabajo de un repositorio. Puedes definir anulaciones dinámicas de espacios de trabajo para crear resultados de compilación personalizados para cada espacio de trabajo, lo que convierte los espacios de trabajo en entornos de desarrollo aislados. Puedes anular el Google Cloud proyecto en el que Dataform ejecuta el contenido de un espacio de trabajo, añadir un prefijo a los nombres de todas las tablas compiladas y añadir un sufijo al esquema predeterminado.
Con las configuraciones de lanzamiento, puedes configurar plantillas de ajustes de compilación para crear resultados de compilación de un repositorio de Dataform. En una configuración de lanzamiento, puedes anular el Google Cloud proyecto en el que Dataform ejecuta los resultados de la compilación, añadir un prefijo a los nombres de todas las tablas compiladas, añadir un sufijo al esquema predeterminado y añadir variables de compilación. También puedes definir la frecuencia con la que se crean los resultados de la compilación. Para programar ejecuciones de los 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 de un flujo de trabajo, Dataform ejecuta los resultados de la 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 manualmente en un espacio de trabajo de desarrollo o programar ejecuciones.
Puedes programar ejecuciones de Dataform en BigQuery de las siguientes formas:
- Crea configuraciones de flujo de trabajo para programar ejecuciones de resultados de compilación creados en configuraciones de lanzamiento
- Programar ejecuciones con Cloud Composer
- Programar ejecuciones con Workflows y Cloud Scheduler
Para depurar errores, puedes monitorizar las ejecuciones de las siguientes formas:
- Ver registros de ejecución detallados de Dataform
- Ver registros de auditoría de Dataform
- Ver los registros de Cloud Logging de Dataform
Dataform Core
Dataform Core es un metalenguaje de código abierto para crear tablas y flujos de trabajo de SQL. Dataform Core amplía SQL proporcionando un sistema de gestión de dependencias, pruebas de calidad de datos automatizadas y documentación de datos.
Puedes usar el núcleo de Dataform para lo siguiente:
- Definir tablas, vistas, vistas materializadas o tablas incrementales.
- Definir la lógica de transformación de datos.
- Declarar datos de origen y gestionar dependencias de tablas.
- Documentar las descripciones de tablas y columnas en el código.
- Reutilizar funciones y variables en diferentes consultas.
- Escribir aserciones de datos para verificar la coherencia de los datos.
En Dataform, se usa Dataform Core para desarrollar flujos de trabajo e implementar recursos en BigQuery.
Dataform Core forma parte del framework de modelado de datos de Dataform de código abierto, que también incluye la CLI de Dataform. Puedes compilar y ejecutar Dataform Core de forma local a través de la interfaz de línea de comandos de Dataform fuera de Google Cloud.
Para usar Dataform Core, escribe archivos SQLX. Cada archivo SQLX contiene una consulta que define una relación de base de datos que Dataform crea y actualiza en 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 verificar 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 aislado sin acceso a Internet. No se pueden realizar acciones adicionales durante la compilación, como llamar a APIs externas.
Bloque de configuración de 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. Por lo tanto, cualquier archivo SQL sin formato es un archivo SQLX válido que Dataform ejecuta tal cual.
En el bloque de configuración, puedes hacer lo siguiente:
- Especifica los metadatos de la consulta.
- Datos de documentos.
- Define pruebas de calidad de los datos.
Especificar metadatos de consulta
Puedes configurar cómo materializa Dataform las consultas en BigQuery, por ejemplo, el tipo de tabla de salida, la base de datos de destino o las etiquetas, mediante los metadatos de configuración.
Datos de documentos
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.
Definir pruebas de calidad de los datos
Puedes definir pruebas de calidad de los datos, llamadas afirmaciones, para comprobar si hay valores únicos, valores nulos o una condición personalizada. Dataform añade las aserciones definidas en el bloque de configuración al árbol de dependencias del flujo de trabajo después de crear la tabla. También puedes definir aserciones fuera del bloque de configuración, en un archivo SQLX independiente.
En el siguiente ejemplo de código se muestra cómo definir el tipo de tabla de salida, documentar la tabla 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 SQL adicionales para ejecutarlas en BigQuery.
- Generar código SQL con JavaScript.
Definir una tabla
Para definir una tabla, 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 gestió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 rígida el esquema y los nombres de las tablas de datos.
Dataform usa la función ref
para crear un árbol de dependencias de todas las tablas que se van a crear o actualizar. Después de compilar, Dataform añade instrucciones de plantilla como CREATE
, REPLACE
o INSERT
.
En el siguiente código de ejemplo se muestra cómo hacer referencia a una tabla de 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 debería ser similar al siguiente:
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 gestión de dependencias adicional, como ejecutar código de forma condicional o usar otras funciones integradas principales de Dataform, consulta la referencia de Dataform Core.
Definir operaciones SQL adicionales
Para configurar Dataform de forma que ejecute una o varias instrucciones SQL antes o después de crear una tabla o una vista, puedes especificar operaciones de preconsulta y postconsulta.
En el siguiente código de ejemplo se muestra cómo configurar los permisos de acceso a tablas o vistas en una operación posterior a la consulta.
SELECT * FROM ... post_operations { GRANT `roles/bigquery.dataViewer` ON TABLE ${self()} TO "group:[email protected]" }
Encapsular código SQL
Para definir funciones reutilizables que generen partes repetitivas de código SQL, puedes usar bloques de JavaScript. Solo puedes reutilizar el código definido en un bloque de JavaScript dentro del archivo SLQX en el que se ha definido el bloque. Para reutilizar código en todo tu repositorio, puedes crear inclusiones.
Para modificar una consulta de forma dinámica, puedes usar JavaScript insertado en cualquier parte del cuerpo.
En el siguiente ejemplo de código se muestra cómo definir un bloque de JavaScript en un archivo SQLX y usarlo de forma insertada en 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 V8 simple y no admite funciones ni módulos adicionales proporcionados por Node.js. Si tu base de código requiere algún módulo de Node.js, debes eliminar estas dependencias.
Los proyectos sin un campo de nombre en
package.json
generan diferencias enpackage-lock.json
cada vez que se instalan paquetes. Para evitarlo, debe añadir una propiedad dename
enpackage.json
.No se admiten URLs
git
+https://
para las dependencias depackage.json
.Convierte esas URLs en URLs de archivo
https://
sin formato. Por ejemplo, conviertegit+https://github.com/dataform-co/dataform-segment.git#1.5
enhttps://github.com/dataform-co/dataform-segment/archive/1.5.tar.gz
.No se pueden ejecutar pruebas unitarias manualmente.
No se puede buscar contenido de archivos en espacios de trabajo de desarrollo.
Desde Dataform core
3.0.0.
, Dataform no distribuye una imagen de Docker. Puedes crear tu propia imagen de Docker de Dataform, que puedes usar para ejecutar el equivalente de los comandos de la CLI de Dataform. Para crear tu propia imagen de Docker, consulta el artículo Contenerizar una aplicación de la documentación de Docker.Los siguientes métodos de la API Dataform no cumplen las directrices de AIP.134, ya que tratan la entrada comodín
*
como una solicitud incorrecta y actualizan todos los campos en lugar de los campos definidos cuando se omitefield_mask
:
Siguientes pasos
- Para obtener más información sobre el ciclo de vida del código en Dataform, consulta el artículo Introducción al ciclo de vida del código en Dataform.
- Para obtener más información sobre los repositorios de Dataform, consulta el artículo Introducción a los repositorios.
- Para obtener más información sobre los espacios de trabajo de Dataform, consulta Crear un espacio de trabajo de desarrollo de Dataform.
- Para obtener más información sobre cómo desarrollar flujos de trabajo en Dataform, consulta el artículo Información general sobre los flujos de trabajo.
- Para obtener más información sobre la CLI de Dataform, consulta el artículo Usar la CLI de Dataform.