Todos los productos
Search
Centro de documentos

DataWorks:Guía de configuración de Data Quality Spec

Última actualización: Sep 04, 2026

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 admite Table.

    • dataSource: El origen de datos del objeto monitoreado, identificado por name y envType. Llame a ListDataSources para obtener los nombres de orígenes de datos disponibles.

      Nota

      Solo algunos orígenes de datos son compatibles. Supported data source types.

    • tables: Los nombres de las tablas que se van a monitorear.

      Nota

      Para orígenes de datos a nivel de base de datos, utilice el formato schema.table para 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 assertion combina 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.

    Nota

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

row_count > 0

max(size) <= 500

una métrica

row_count

max

un argumento (opcional)

/

(size)

un símbolo de comparación (opcional)

>

<=

un umbral (opcional)

0

500

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 c y el valor anterior es cl. La fórmula es percent = (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 phone es 0.

  • La comprobación falla cuando el número de filas duplicadas en la columna phone es mayor que 10.

  • El resultado de la comprobación es warn cuando el número de filas duplicadas en la columna phone está 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:

image

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 un id.

  • Asegúrese de que identity sea ú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 por identity.

  • Al actualizar una configuración de monitoreo, el sistema:

    • Compara el id de cada regla con las reglas existentes y actualiza las coincidencias.

    • Elimina las reglas existentes que no coincidan con ningún id de 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.

Nota

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 ago o n 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 days o last 1 month.

    • Últimos 15 minutos: last 15 minutes

    • Últimas 24 horas: last 24 hours

      Nota

      Recopila 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