En el monitoreo de calidad de datos, normalmente se supervisan solo los datos que cambiaron en lugar de cada fila de una tabla. Este tema describe cómo configurar el filtrado de datos para cada ejecución de monitoreo.
Ejemplo de filtrado de datos
En la mayoría de los casos, los datos modificados se filtran mediante un campo de tiempo. Por ejemplo, MaxCompute utiliza particiones de tiempo, mientras que una tabla de transacciones comerciales de MySQL se puede filtrar por la hora de creación de cada transacción.
Establezca un filter en las reglas y el monitoreo para filtrar los datos. Ejemplo:
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" # A rule-level filter works together with the filter in Scan.dataset # At runtime, the filter is (dt = '$[yyyymmdd-1]' AND hh = '$[hh24-1/24]') AND (id IS NOT NULL) filter: "id IS NOT NULL" computeResource: id: 2001
Sintaxis del filtro
Sintaxis básica
La sintaxis de filter sigue generalmente las condiciones WHERE de SQL-92, excepto por los predicados match y overlaps. La sintaxis es la siguiente:
<search condition> ::=
<boolean term> | <search condition> OR <boolean term>
<boolean term> ::=
<boolean factor> | <boolean term> AND <boolean factor>
<boolean factor> ::=
[ NOT ] <boolean test>
<boolean test> ::=
<predicate> | ( <search condition> )
<predicate> ::=
<comparison predicate> | <between predicate> |
<in predicate> | <like predicate> | <null predicate> |
<quantified comparison predicate> | <exists predicate>
<comparison predicate> ::=
<expression> <comparison_operator> <expression>
<between predicate> ::=
<expression> [NOT] BETWEEN <lower_bound> AND <upper_bound>
<in predicate> ::=
<expression> [NOT] IN (value_list | subquery)
<like predicate> ::=
<expression> [NOT] LIKE pattern [ESCAPE escape_character]
<null predicate> ::=
<expression> IS [NOT] NULL
<quantified comparison predicate> ::=
<expression> <comparison_operator> { ALL | ANY | SOME } (subquery)
<exists predicate> ::=
EXISTS (subquery)
Ejemplos de configuración
-
Predicado de comparación
salary > 50000 -
Predicado between
price BETWEEN 10 AND 50 -
Predicado in
department IN ('Sales', 'Marketing') -
Predicado like
name LIKE 'Jo%' -
Predicado null
department IS NOT NULL -
Predicado de comparación cuantificada
salary > ALL (SELECT salary FROM employees WHERE department = 'Sales') -
Predicado exists
EXISTS (SELECT 1 FROM customers cu WHERE cu.country_id = c.country_id) -
Condición de búsqueda compleja
-- Use the AND logical operator to connect two predicates salary > ALL (SELECT salary FROM employees WHERE department = 'Sales') AND EXISTS (SELECT 1 FROM customers cu WHERE cu.country_id = c.country_id) -- Use the OR logical operator to connect predicates department IS NOT NULL OR name LIKE 'Jo%'
Definir un filtro con una consulta nativa
Si la consulta del almacén de datos subyacente no se puede expresar en SQL-92, como una consulta que usa RLIKE, búsqueda geoespacial o búsqueda de texto completo, inicie el valor de filter con la palabra clave query: y escriba la consulta nativa directamente.
Por ejemplo, para filtrar datos de una tabla de MaxCompute con RLIKE, configure el filtro de la siguiente manera:
datasets:
- type: Table
indices:
- ods_d_customers
dataSource:
name: odps_first
envType: Dev
rules:
- assertion: "row_count > 0"
filter: "query: email_address RLIKE '^info@'"
Usar variables de tiempo en un filtro
Cuando se utilizan particiones de tiempo, una ejecución de monitoreo de calidad analiza diariamente la partición del día actual o la partición T-1. Para obtener la fecha correspondiente automáticamente en cada ejecución, use una expresión de desplazamiento de tiempo del sistema de programación.
Por ejemplo, si filter contiene una expresión de tiempo de programación como $[yyyymmdd-1], el sistema de calidad de datos aplica automáticamente el desplazamiento según la hora programada de la instancia de programación y sustituye el valor resultante.
Si el monitoreo de calidad de datos no lo activa una instancia de programación, especifique el parámetro triggerTime de activación de CreateDataQualityScanRun. El sistema aplica el desplazamiento respecto a triggerTime,