Acerca de las aserciones
Una aserción es una consulta de prueba de calidad de los datos que busca filas que infringen una o varias condiciones especificadas en la consulta. Si la consulta devuelve alguna fila, la aserción falla. Dataform ejecuta aserciones cada vez que actualiza tu flujo de trabajo y te avisa si falla alguna.
Dataform crea automáticamente vistas en BigQuery que contienen los resultados de las consultas de aserciones compiladas. Tal como se configura en el archivo de ajustes de tu flujo de trabajo, Dataform crea estas vistas en un esquema de aserciones donde puedes inspeccionar los resultados de las aserciones.
Por ejemplo, para el esquema dataform_assertions predeterminado, Dataform crea una vista en BigQuery con el siguiente formato:
dataform_assertions.assertion_name.
Puedes crear aserciones para todos los tipos de tablas de Dataform: tablas, tablas incrementales, vistas y vistas materializadas.
Puedes crear aserciones de las siguientes formas:
Añade aserciones integradas al bloque de configuración de una tabla.
Puedes añadir aserciones integradas al bloque
configde una tabla y especificar sus condiciones.Añade aserciones manuales en un archivo SQLX independiente.
Escribes manualmente aserciones personalizadas en un archivo SQLX independiente para casos prácticos avanzados o para conjuntos de datos que no haya creado Dataform.
Antes de empezar
En la Google Cloud consola, ve a la página Dataform.
Seleccione o cree un repositorio.
Seleccione o cree un espacio de trabajo de desarrollo.
Roles obligatorios
Para obtener los permisos que necesitas para crear aserciones, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Editor de Dataform (roles/dataform.editor) en los espacios de trabajo.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Crear aserciones integradas
Puedes añadir aserciones de Dataform integradas al bloque config de una tabla. Dataform ejecuta estas aserciones después de crear la tabla. Una vez que Dataform haya creado la tabla, puedes comprobar si la aserción se ha superado en la pestaña Registros de ejecución del flujo de trabajo de tu espacio de trabajo.
Puedes crear las siguientes aserciones en el bloque config de una tabla:
nonNullEsta condición afirma que las columnas especificadas no son nulas en todas las filas de la tabla. Esta condición se usa para las columnas que nunca pueden ser nulas.
En el siguiente código de muestra se muestra una aserción
nonNullen el bloqueconfigde una tabla:
config {
type: "table",
assertions: {
nonNull: ["user_id", "customer_id", "email"]
}
}
SELECT ...
rowConditionsEsta condición afirma que todas las filas de la tabla siguen la lógica personalizada que definas. Cada condición de fila es una expresión SQL personalizada y cada fila de la tabla se evalúa en función de cada condición de fila. La aserción falla si alguna fila de la tabla da como resultado
false.En el siguiente código de ejemplo se muestra una aserción
rowConditionspersonalizada en el bloqueconfigde una tabla incremental:
config {
type: "incremental",
assertions: {
rowConditions: [
'signup_date is null or signup_date > "2022-08-01"',
'email like "%@%.%"'
]
}
}
SELECT ...
uniqueKeyEsta condición verifica que, en una columna especificada, ninguna fila de la tabla tenga el mismo valor.
En el siguiente código de ejemplo se muestra una aserción
uniqueKeyen el bloqueconfigde una vista:
config {
type: "view",
assertions: {
uniqueKey: ["user_id"]
}
}
SELECT ...
uniqueKeysEsta condición afirma que, en las columnas especificadas, ninguna fila de la tabla tiene el mismo valor. La aserción falla si hay más de una fila en la tabla con los mismos valores en todas las columnas especificadas.
En el siguiente código de ejemplo se muestra una aserción
uniqueKeysen el bloqueconfigde una tabla:
config {
type: "table",
assertions: {
uniqueKeys: [["user_id"], ["signup_date", "customer_id"]]
}
}
SELECT ...
Añadir aserciones al bloque config
Para añadir aserciones al bloque de configuración de una tabla, sigue estos pasos:
- En el espacio de trabajo de desarrollo, en el panel Archivos, selecciona un archivo SQLX de definición de tabla.
- En el bloque
configdel archivo de tabla, introduceassertions: {}. - En
assertions: {}, añade tus aserciones. - Opcional: Haz clic en Formato.
En el siguiente código de ejemplo se muestran las condiciones añadidas en el bloque config:
config {
type: "table",
assertions: {
uniqueKey: ["user_id"],
nonNull: ["user_id", "customer_id"],
rowConditions: [
'signup_date is null or signup_date > "2019-01-01"',
'email like "%@%.%"'
]
}
}
SELECT ...
Crear aserciones manuales con SQLX
Las aserciones manuales son consultas SQL que escribes en un archivo SQLX específico. Una consulta SQL de aserción manual debe devolver cero filas. Si la consulta devuelve filas cuando se ejecuta, la aserción falla.
Para añadir aserciones manuales en un archivo SQLX nuevo, sigue estos pasos:
- En el panel Archivos, junto a
definitions/, haz clic en el menú
Más. - Haz clic en Crear archivo.
En el campo Añadir una ruta de archivo, introduce el nombre del archivo seguido de
.sqlx. Por ejemplo,definitions/custom_assertion.sqlx.Los nombres de archivo solo pueden incluir números, letras, guiones y guiones bajos.
Haz clic en Crear archivo.
En el panel Archivos, haz clic en el nuevo archivo.
En el archivo, introduce lo siguiente:
config { type: "assertion" }Debajo del bloque
config, escribe tu consulta o consultas de SQL.Opcional: Haz clic en Formato.
En el siguiente ejemplo de código se muestra una aserción manual en un archivo SQLX que afirma que los campos A, B y c nunca son NULL en sometable:
config { type: "assertion" }
SELECT
*
FROM
${ref("sometable")}
WHERE
a IS NULL
OR b IS NULL
OR c IS NULL
Siguientes pasos
- Para obtener más información sobre los tipos de aserciones, consulta la API Dataform.
- Para saber cómo definir aserciones con JavaScript, consulta el artículo Crear flujos de trabajo exclusivamente con JavaScript.
- Para saber cómo ejecutar flujos de trabajo manualmente, consulta Activar ejecuciones manualmente.