Data Quality Spec es un formato YAML para definir reglas de monitoreo y gestionar recursos de calidad de datos mediante la OpenAPI de DataWorks.
Definiciones básicas
Ejemplo de YAML
Definición simple de una regla de monitoreo:
datasets:
- type: Table
tables:
- tb_d_spec_demo
dataSource:
name: odps_first
envType: Dev
rules:
- assertion: row_count > 0
Descripción de propiedades
Este ejemplo define una regla de monitoreo con las siguientes propiedades:
-
datasets: El objeto monitoreado. Incluye tres propiedades:type: El tipo del objeto monitoreado. Solo se admiteTable.-
dataSource: El origen de datos del objeto monitoreado, identificado pornameyenvType. Llame a ListDataSources para obtener los nombres de orígenes de datos disponibles.NotaSolo algunos orígenes de datos son compatibles. Supported data source types.
-
tables: Los nombres de las tablas que se van a monitorear.NotaPara orígenes de datos a nivel de base de datos, utilice el formato
schema.tablepara monitorear tablas en esquemas no predeterminados.
-
rules: Las reglas que deben cumplir los datos. Una configuración de monitoreo puede contener varias reglas.Durante el monitoreo, el sistema analiza los datos, calcula el valor de la métrica de cada regla y lo compara con el umbral para determinar si la regla se cumple.
Una declaración
assertioncombina un tipo de métrica (por ejemplo,row_count), un símbolo de comparación (por ejemplo,>) y un umbral (por ejemplo,0). Los resultados de la comprobación tienen tres estados:pass: El valor de la métrica se encuentra dentro del rango del umbral.
fail: El valor de la métrica se encuentra fuera del rango del umbral.
error: Ocurrió una excepción durante la comprobación, como un error de sintaxis.
NotaSi especifica un umbral de nivel
warn, el resultado de la comprobación también puede serwarn. Add multi-level threshold definitions.Consulte supported built-in metric types para obtener más información sobre la declaración
assertion.Al crear una regla de monitoreo de Data Quality, también puede utilizar templates.
Métodos de definición de umbrales
Métodos de umbral admitidos en assertion:
Umbral fijo
Compara el valor de una métrica con un valor fijo. Un umbral fijo consta de:
una métrica
un argumento (opcional)
un símbolo de comparación (opcional)
un umbral (opcional)
Ejemplo de configuración
rules: # El número de filas de datos debe ser mayor que 0 - assertion: row_count > 0 # El valor máximo de la columna size debe ser menor o igual a 500 - assertion: max(size) <= 500
Las cuatro partes de una expresión de umbral fijo:
|
Parte de la expresión |
|
|
|
una métrica |
|
|
|
un argumento (opcional) |
/ |
|
|
un símbolo de comparación (opcional) |
|
|
|
un umbral (opcional) |
|
|
Todos los operadores disponibles se enumeran en Supported comparison symbols.
Umbral de fluctuación
Compara el valor actual de la métrica con valores históricos. Por ejemplo, puede requerir que el recuento de usuarios de hoy no difiera del de ayer en más de 100, o que los ingresos de hoy se mantengan dentro del 10 % del promedio de 7 días.
Agregue change for antes de la metric para definir un umbral de fluctuación. Partes:
change (palabra clave)
un tipo de agregación (opcional)
una ventana de tiempo
percent (palabra clave, opcional)
for (palabra clave)
una métrica
un argumento (opcional)
un símbolo de comparación (opcional)
un umbral (opcional)
El formato de la expresión combinada es: change [aggregate_type] [time_window] [percent] for metric [argument] [comparison_symbol threshold].
Ejemplo de configuración
Ejemplo 1: Comparar la diferencia con el resultado de la comprobación de una ventana de tiempo específica (time_window)
Agregue una time window (time_window) entre change ... for para especificar contra qué valores históricos se debe comparar:
rules: # La diferencia entre el recuento de filas actual y el recuento de filas de hace 7 días debe ser menor a 10000 filas - assertion: change 7 days ago for row_count < 10000
Ejemplo 2: Agregar los resultados de la comprobación de una ventana de tiempo específica antes de comparar la diferencia
Agregue un aggregate type entre change y la time window (time_window). El sistema agrega los registros de comprobación dentro de la ventana de tiempo y utiliza el resultado como valor de referencia:
rules: # La diferencia entre el recuento de filas actual y el recuento promedio de filas de los últimos 7 días debe ser menor a 10000 filas - assertion: change average last 7 days for row_count < 10000
Se admiten los siguientes dos métodos de agregación:
avg: promedio.
var: varianza.
Sin un método de agregación, el sistema compara el valor actual con cada registro histórico individualmente y utiliza el estado más severo como resultado final.
Ejemplo 3: Comparar el porcentaje de fluctuación con los resultados históricos de la comprobación
Agregue percent entre change ... for para comparar el porcentaje de fluctuación con el umbral:
rules: # El porcentaje de fluctuación del recuento de filas actual en comparación con el recuento de filas de hace 7 días debe ser menor al 50% - assertion: change 7 days ago percent for row_count < 50%
Agregue % al umbral para mejorar la legibilidad.
-
Suponga que el valor actual de la métrica es
cy el valor anterior escl. La fórmula espercent = (c-cl) / cl:Si cl es 0 y c también es 0, el porcentaje calculado es 0.
Si cl es 0 y c no es 0, no se puede calcular el porcentaje y el resultado de la comprobación es error.
El resultado puede ser negativo. Utilice la sintaxis between...and... para definir un rango de porcentaje de fluctuación.
Umbral de rango
Puede utilizar between...and... para definir un umbral de tipo rango.
Definición de umbral de rango cerrado
De forma predeterminada, between...and... define un rango cerrado. La siguiente regla activa warn cuando la fluctuación del recuento de filas supera [-1%, 1%] y fail cuando supera [-5%, 5%]. Un valor en el rango [10, 15] se considera válido.
datasets:
- type: Table
tables:
- tb_d_spec_demo
filter: dt='$[yyyymmdd]' AND hh='$[hh24-1/24]'
dataSource:
name: odps_first
envType: Dev
rules:
- assertion: change 1 day ago percent for row_count
warn:
- when not between -1% and 1%
fail:
- when not between -5% and 5%
Agregar definiciones de umbrales multinivel
En lugar de definir un umbral en la declaración assertion, puede omitirlo en assertion y utilizar warn o fail para definir umbrales multinivel:
rules:
- assertion: duplicate_count(phone)
warn: when between 1 and 10
fail: when > 10
Esto define dos niveles de umbral, warn y fail:
La comprobación se aprueba cuando el número de filas duplicadas en la columna
phonees0.La comprobación falla cuando el número de filas duplicadas en la columna
phonees mayor que 10.El resultado de la comprobación es
warncuando el número de filas duplicadas en la columnaphoneestá entre 1 y 10.
Estrategia de manejo cuando warn y fail se superponen
Si los rangos de warn y fail se superponen, el sistema utiliza el estado más severo (fail).
Utilizar not between...and... para definir el complemento de un rango
Agregue not antes de between...and... para negar el rango:
rules:
- assertion: duplicate_count(phone)
warn:
- when not between -1% and 1%
fail:
- when not between -5% and 5%
El rango resultante:
Establecer una identidad de regla
Especifique una identity como identificador único de la regla dentro de una configuración de monitoreo.
Si no se especifica ninguna
identity, el sistema asigna automáticamente unid.Asegúrese de que
identitysea única dentro de una configuración de monitoreo. Las identidades duplicadas pueden provocar errores de actualización o sobrescrituras no deseadas. Utilice cadenas legibles para facilitar la gestión.Para reglas de umbral de fluctuación (
change...for...) y detección de anomalías (anomaly detection for ...), el sistema consulta el historial de comprobaciones poridentity.-
Al actualizar una configuración de monitoreo, el sistema:
Compara el
idde cada regla con las reglas existentes y actualiza las coincidencias.Elimina las reglas existentes que no coincidan con ningún
idde la solicitud.Crea las reglas no coincidentes de la solicitud como nuevas reglas.
Ejemplo de identity:
rules: - assertion: row_count > 0 name: Row count is greater than 0 # Especifique un identificador único dentro de la configuración de monitoreo de Data Quality identity: table-not-empty
Definir la severidad empresarial de la regla (severity)
Establezca severity para indicar el impacto empresarial de una regla:
rules:
- assertion: row_count > 0
severity: High
Niveles de severity:
High
Normal (predeterminado)
Establecer el estado habilitado de la regla (enabled)
Establezca enabled en false para deshabilitar temporalmente una regla sin eliminarla. Las reglas deshabilitadas (enabled: false) se omiten durante el monitoreo.
rules: - assertion: row_count > 0 # El estado habilitado de la regla. Valor predeterminado: true. enabled: false
Establecer declaraciones de preejecución (settingConfig)
Agregue settingConfig para ejecutar declaraciones SET antes de que se ejecute el SQL de cálculo de métricas:
rules: - assertion: row_count > 0 # Establecer declaraciones SET de preejecución settingConfig: SET odps.sql.udf.timeout=600s; SET odps.sql.python.version=cp27;
Establecer el interruptor de recopilación de filas con errores (collectFailedRows)
Habilite la recopilación de filas con errores a nivel de regla. Cuando una comprobación devuelve warn o fail, el sistema guarda las filas fallidas en otra tabla de la misma base de datos:
rules:
- assertion: duplicate_count(phone) = 0
collectFailedRows: true
Establezca collectFailedRows en true para habilitar la recopilación. Para reglas SQL personalizadas, especifique también failedRowsQuery con la declaración de filtro:
rules:
- assertion: id_null_count = 0
id_null_count:
expression: id IS NULL
collectFailedRows: true
failedRowsQuery: SELECT * FROM tb_d_spec_demo WHERE dt = '$[yyyymmdd-1]' AND id IS NULL
Además de las reglas SQL personalizadas, solo estas métricas admiten collectFailedRows:
missing_count
missing_percent
duplicate_count
duplicate_percent
distinct_count
distinct_percent
Establecer nombre y descripción de la regla
Establezca un nombre y una descripción para cada regla y para la configuración general de monitoreo.
Los nombres aparecen en los resultados de las comprobaciones y en las páginas de gestión.
datasets: - type: Table tables: - tb_d_spec_demo filter: dt='$[yyyymmdd]' AND hh='$[hh24-1/24]' dataSource: name: odps_first envType: Dev rules: - assertion: row_count > 0 # Nombre y descripción de la regla name: Row count is greater than 0 description: The output data must not be empty
Establecer filtros de datos (filter)
Establecer filtros de datos para reglas
Agregue un filter para comprobar solo un subconjunto de datos, como filas donde id no es NULL:
rules:
- assertion: row_count > 0
filter: id IS NOT NULL
Establecer filtros de datos para configuraciones de monitoreo
Agregue un filter a Scan.Dataset para aplicar el filter a todas las reglas de la configuración de monitoreo.
datasets:
- type: Table
tables:
- tb_d_spec_demo
filter: dt='$[yyyymmdd]' AND hh='$[hh24-1/24]'
dataSource:
name: odps_first
rules:
- assertion: row_count > 0
Con un filter en el dataset, el sistema aplica el filter antes de cada comprobación de regla.
El filter utiliza una expresión de tiempo $[yyyymmdd-1]. El sistema sustituye triggerTime con el desplazamiento aplicado en el filter. Parameter reference methods.
Apéndice
Símbolos de comparación admitidos (comparison symbol)
>
>=
<
<=
=
!=
between ... and ...
Tipos de orígenes de datos admitidos
Tipos de orígenes de datos admitidos:
maxcompute
hologres
emr
mysql
analyticdb_for_mysql
analyticdb_for_postgresql
cdh
starrocks
Tipos de métricas integradas admitidas
avg
row_count
sum
min
max
distinct_count
distinct_percent
table_size
missing_count
missing_percent
duplicate_percent
duplicate_count
group_by
invalid_count
invalid_distinct_count
Métodos de definición de ventana de tiempo (time_window)
Formatos de ventana de tiempo admitidos:
-
hace n unidades de tiempo:
n (minute[s]|hour[s]|day[s]|week[s]|month[s]) ago, por ejemplo,n months ago,n days agoon hours ago.Hace 1 día: 1 day ago
Hace 7 días: 7 days ago
Hace 1 mes: 1 month ago
Hace 8 horas: 8 hours ago
Hace 15 minutos: 15 minutes ago
-
Últimas n unidades de tiempo:
last n (minute[s]|hour[s]|day[s]|week[s]|month[s]), por ejemplo,last 15 minutes,last 7 daysolast 1 month.Últimos 15 minutos: last 15 minutes
-
Últimas 24 horas: last 24 hours
NotaRecopila un punto de datos en cada intervalo de una hora, comenzando 24 horas antes de la hora actual.
Últimos 7 días: last 7 days
Último 1 mes: last 1 month
-
Un día específico de un mes o un día específico de una semana a la misma hora:
1/2/3/.../-3/-2/-1 of (current|last|n) (months|weeks) (ago)El primer día del mes actual a la misma hora: 1 of current month
El último día del mes anterior a la misma hora: -1 of last month
Martes de hace 3 semanas a la misma hora: 2 of 3 weeks ago