Descripción general del núcleo de Dataform

En este documento, se presenta el núcleo de Dataform y se muestra cómo usarlo en Dataform.

Descripción general del núcleo de Dataform

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 administración de dependencias, pruebas automatizadas de calidad de los datos y documentación sobre los datos.

Puedes usar Dataform Core para los siguientes fines:

  • Definición de tablas, vistas, vistas materializadas o tablas incrementales
  • Definición de la lógica de transformación de los datos
  • Declarar los datos de origen y administrar las dependencias de las tablas
  • Documentar las descripciones de tablas y columnas dentro del código
  • Volver a usar funciones y variables en diferentes consultas
  • Escribir aserciones de datos para garantizar la coherencia de los datos

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

El núcleo de Dataform es parte del framework de código abierto de modelado de datos de Dataform que también incluye la CLI de Dataform. 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 Dataform Core, debes escribir archivos SQLX. Cada archivo SQLX contiene una consulta que define una relación de base 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 siempre se compila el mismo código en el mismo resultado de compilación de SQL. 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 de archivos 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 ello, cualquier archivo SQL sin formato es un archivo SQLX válido que Dataform ejecuta sin modificaciones.

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

Especifica los metadatos de la consulta

Puedes configurar la forma en que Dataform materializa 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.

Datos de documentos

Puedes documentar las 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.

Cómo definir pruebas de calidad de los datos

Puedes definir pruebas de calidad de los datos, llamadas aserciones, para verificar la unicidad, los valores nulos o una condición personalizada. Dataform agrega 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 indica 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:

Cómo definir una tabla

Para definir una tabla nueva, puedes usar instrucciones 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 tablas definidas en tu proyecto de Dataform en lugar de codificar el esquema y los nombres 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 estándar, como CREATE, REPLACE o INSERT.

En la siguiente muestra de código, se indica 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 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 administración de dependencias adicional, por ejemplo, cómo ejecutar código de manera condicional o usar otras funciones integradas del núcleo de Dataform, consulta la referencia del núcleo de Dataform.

Define operaciones de SQL adicionales

Si deseas configurar Dataform para que ejecute una o más instrucciones de 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 indica cómo configurar los permisos de acceso de visualización o tabla 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 código SQL

Puedes usar bloques de JavaScript para definir funciones reutilizables que generen partes repetitivas de código SQL. Puedes volver a usar el código definido en un bloque de JavaScript solo dentro del archivo SLQX en el que está definido el bloque. Para volver a usar el código en todo el 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 indica cómo definir un bloque de JavaScript en un archivo SQLX y usarlo de forma intercalada en una consulta:

js {
  const columnName = "foo";
}

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

¿Qué sigue?