Todos os produtos
Search
Central de documentação

DataWorks:Regras de métrica personalizada

Última atualização: Jun 27, 2026

Use regras de métrica personalizada quando os tipos de métrica integrados não atenderem à sua lógica de negócios. Defina a consulta SQL da métrica diretamente na configuração da regra e referencie-a pelo nome na asserção.

Definir uma regra de métrica personalizada

No campo assertion, escreva uma condição com o nome de métrica personalizada desejado. Em seguida, no mesmo bloco de regra, adicione uma chave correspondente a esse nome e informe a consulta SQL em query.

datasets:
  - type: Table
    tables:
      - tb_d_spec_demo
    filter: "dt='$[yyyymmdd]' AND hh='$[hh24-1/24]'"
    dataSource:
      name: odps_first
      envType: Dev

rules:
  - assertion: "avg_order_span between 5 and 10"
    avg_order_span:
      query: "SELECT COUNT(safety_stock_level - days_to_manufacture) FROM dim_product;"

O nome da métrica personalizada avg_order_span aparece duas vezes e desempenha dois papéis:

Função

Localização

Finalidade

Operando da asserção

assertion: "avg_order_span between 5 and 10"

Define o limiar de aprovação ou falha

Chave de configuração

avg_order_span: (nível irmão de assertion)

Vincula a consulta SQL à métrica

O DataWorks executa a consulta SQL para gerar um valor e avalia se ele satisfaz a condição da asserção. Em caso positivo, a verificação é aprovada.

Armazenar linhas com falha em regras de métrica personalizada

Para reter as linhas que causaram falha na verificação e permitir inspeção posterior, defina collectFailedRows: true e adicione uma failedRowsQuery.

Esses dois campos têm finalidades distintas: query calcula o valor da métrica usado na asserção, enquanto failedRowsQuery busca as linhas reais para armazenamento como amostras. Ambos são obrigatórios para reter dados com falha.

datasets:
  - type: Table
    tables:
      - tb_d_spec_demo
    filter: "dt='$[yyyymmdd]' AND hh='$[hh24-1/24]'"
    dataSource:
      name: odps_first
      envType: Dev

rules:
  - assertion: "id_for_belgium between 5 and 10"
    id_for_belgium:
      query: "SELECT count(*) FROM product_b;"
    collectFailedRows: true
    failedRowsQuery: "SELECT id FROM product_b WHERE id IS NULL"