No monitoramento da qualidade de dados, geralmente monitoramos apenas os dados alterados, em vez de analisar cada linha da tabela. Este tópico descreve como configure a filtragem de dados para cada execução de monitoramento.
Exemplo de filtragem de dados
Na maioria dos casos, filtramos os dados alterados por um campo de tempo. Por exemplo, o MaxCompute utiliza partições de tempo, enquanto, no MySQL, filtramos uma tabela de transações comerciais pelo horário de criação de cada transação.
Defina um filter no monitoramento e nas regras para filtrar os dados. Exemplo:
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
Sintaxe do filtro
Sintaxe básica
A sintaxe do filter geralmente segue as condições WHERE do SQL-92, com exceção dos predicados match e overlaps. A sintaxe é a seguinte:
<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)
Exemplos de configuração
-
Predicado de comparação
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 comparação quantificada
salary > ALL (SELECT salary FROM employees WHERE department = 'Sales') -
Predicado exists
EXISTS (SELECT 1 FROM customers cu WHERE cu.country_id = c.country_id) -
Condição de pesquisa complexa
-- 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%'
Defina um filtro com uma consulta nativa
Se não for possível expressar a consulta do armazenamento de dados subjacente em SQL-92, como em consultas com RLIKE, busca geoespacial ou busca de texto completo, inicie o valor do filter com a palavra-chave query: e escreva a consulta nativa diretamente.
Por exemplo, para filtrar dados da tabela do MaxCompute com RLIKE, configure o filtro da seguinte forma:
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 variáveis de tempo em um filtro
Ao usar partições de tempo, uma execução de monitoramento de qualidade verifica a partição do dia atual ou a partição T-1 todos os dias. Para obter a data correspondente automaticamente a cada execução, use uma expressão de deslocamento de tempo do sistema de agendamento.
Por exemplo, se o filter contiver uma expressão de tempo do agendamento como $[yyyymmdd-1], o sistema de qualidade de dados aplica automaticamente o deslocamento com base no horário programado da instância de agendamento e substitui o valor resultante.
Se uma instância de agendamento não acionar o monitoramento da qualidade de dados, especifique o parâmetro de gatilho triggerTime do CreateDataQualityScanRun. O sistema aplica o deslocamento em relação ao triggerTime.