Como usar funções de métricas de dados para realizar verificações de qualidade de dados

Este tópico descreve como associar uma função de métricas de dados (DMF) a uma tabela ou exibição para que ela execute uma verificação da qualidade dos dados em intervalos regulares. Ele também descreve como chamar uma DMF diretamente, por exemplo, se você quiser testar uma DMF antes de associá-la a uma tabela ou exibição.

Associe uma DMF para automatizar as verificações de qualidade dos dados

Você pode associar a DMF a uma tabela ou exibição para chamá-la automaticamente em intervalos regulares. Ao associar a DMF, você especifica quais colunas são passadas para a DMF como argumentos.

O processo de associar uma DMF a uma tabela ou exibição para automatizar as verificações de qualidade dos dados é um processo de duas etapas:

  1. Defina um cronograma na tabela ou exibição que determina a frequência de execução das DMFs. Você deve definir o cronograma antes de associar uma DMF à tabela ou exibição.

  2. Associe a DMF à tabela ou exibição.

Programe a execução da DMF

Você pode programar a execução das DMFs para automatizar as medições de qualidade dos dados em uma tabela.

O Snowflake usa a função de proprietário da tabela, que é a função com o privilégio OWNERSHIP na tabela, para chamar a DMF agendada. A função de proprietário da tabela deve ter estas concessões:

  • O privilégio USAGE na DMF definida pelo usuário e o privilégio USAGE no banco de dados e esquema que armazenam a DMF definida pelo usuário.

  • A função de banco de dados se DATA_METRIC_USER se a DMF for uma DMF do sistema.

  • O privilégio EXECUTEDATAMETRICFUNCTION na conta.

O parâmetro de objeto DATA_METRIC_SCHEDULE para uma tabela, exibição ou exibição materializada permite que você programe quando seus DMFs podem ser executados. Todas as funções de métricas de dados na tabela ou exibição seguem o mesmo cronograma.

Existem três abordagens para agendar a execução de sua DMF:

  • Defina a DMF a ser executada após um número especificado de minutos.

  • Use uma expressão cron para agendar a DMF a ser executada em uma frequência específica.

  • Use um evento de acionamento para agendar a DMF para ser executada quando houver uma DML mudança para a tabela, como inserir uma nova linha na tabela. No entanto:

Por exemplo:

Defina a programação da função de métrica de dados para ser executada a cada 5 minutos:

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = '5 MINUTE';
Copy

Defina a programação da função de métrica de dados para ser executada às 8:00 AM diariamente:

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * * UTC';
Copy

Defina a programação da função de métrica de dados para ser executada às 8:00 AM somente nos dias úteis:

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * MON,TUE,WED,THU,FRI UTC';
Copy

Defina a programação da função de métrica de dados para ser executada três vezes ao dia às 06:00, 12:00 e 18:00 UTC:

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 6,12,18 * * * UTC';
Copy

Defina a função de métrica de dados para ser executada quando uma operação DML geral, como inserir uma nova linha, modifica a tabela:

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'TRIGGER_ON_CHANGES';
Copy

Você pode usar o comando SHOW PARAMETERS para exibir o cronograma de DMF de um objeto de tabela aceito:

SHOW PARAMETERS LIKE 'DATA_METRIC_SCHEDULE' IN TABLE hr.tables.empl_info;
Copy
+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+
| key                  | value                          | default | level | description                                                                                                                  | type   |
+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+
| DATA_METRIC_SCHEDULE | USING CRON 0 6,12,18 * * * UTC |         | TABLE | Specify the schedule that data metric functions associated to the table must be executed in order to be used for evaluation. | STRING |
+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+

Para objetos de exibição e exibição materializada, especifique TABLE como o domínio do objeto e verifique o cronograma da seguinte forma:

SHOW PARAMETERS LIKE 'DATA_METRIC_SCHEDULE' IN TABLE mydb.public.my_view;
Copy

Nota

Há um atraso de 10 minutos entre o momento em que você modifica a DMF de uma tabela e o momento em que as alterações de cronograma entram em vigor em DMFs anteriores atribuídas à tabela. Entretanto, novas atribuições de DMF à tabela não estão sujeitas ao atraso de 10 minutos. Planeje cuidadosamente as operações de agendamento de DMF e remoção de configuração de DMF para alinhá-las aos seus custos esperados de DMF.

Além disso, ao avaliar os resultados de DMF, como ao consultar a exibição DATA_QUALITY_MONITORING_RESULTS, especifique a coluna measurement_time na sua consulta como base para a avaliação. Há um processo interno que inicia a avaliação de DMF, e é possível que atualizações de tabela, como operações INSERT, ocorram entre o horário programado e o horário de medição. Ao utilizar a coluna measurement_time, você tem uma avaliação mais precisa dos resultados de DMF, pois o tempo de medição indica o tempo de avaliação da DMF.

Associe a DMF a uma tabela

Use um comando ALTER TABLE ou ALTER VIEW para associar um DMF e especificar quais colunas serão passadas como argumentos. Por exemplo, o comando a seguir associa o DMF do sistema NULL_COUNT à tabela t. Quando o DMF for executado, ele retornará o número de valores NULL na coluna c1.

ALTER TABLE t
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT
    ON (c1);
Copy

Alguns DMFs não aceitam uma coluna como argumento. Por exemplo, para associar o DMF do sistema ROW_COUNT à exibição v2, execute o seguinte comando:

ALTER VIEW v2
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT
    ON ();
Copy

O DMF ACCEPTED_VALUES contém uma expressão lambda, bem como o nome da coluna, que permite verificar quantos registros não correspondem a um valor esperado. Por exemplo, a instrução a seguir associa a função à tabela t1, de modo que a função retorna o número de registros em que o valor da coluna age não é igual a cinco.

ALTER TABLE t1
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ACCEPTED_VALUES ON (age, age -> age = 5);
Copy

Descarte uma DMF de um objeto

Você pode descartar uma DMF usando um comando ALTER TABLE ou ALTER VIEW. Por exemplo:

ALTER TABLE t
  DROP DATA METRIC FUNCTION governance.dmfs.count_positive_numbers
    ON (c1, c2, c3);
Copy

Chame uma DMF manualmente

Chamar uma DMF diretamente pode ser útil para testar a saída da DMF antes de associá-la a uma tabela ou exibição.

Use a seguinte sintaxe para chamar uma DMF:

SELECT <data_metric_function>(<query>)
Copy

Onde:

data_metric_function

Especifica uma DMF do sistema ou definida pelo usuário.

query

Especifica uma consulta SQL em uma tabela ou exibição.

As colunas projetadas pela consulta devem corresponder aos argumentos da coluna na assinatura da DMF.

Nota

As DMFs do sistema a seguir não seguem essa sintaxe porque não recebem nenhum argumento:

Por exemplo, para chamar um DMF count_positive_numbers personalizado, que aceita três colunas como argumentos, execute o seguinte comando:

SELECT governance.dmfs.count_positive_numbers(
  SELECT c1, c2, c3
  FROM t);
Copy

Por exemplo, para chamar o DMF do sistema NULL_COUNT (função de métricas de dados do sistema) para visualizar o número de valores NULL na coluna ssn, execute o seguinte comando:

SELECT SNOWFLAKE.CORE.NULL_COUNT(
  SELECT ssn
  FROM hr.tables.empl_info);
Copy

Se um DMF personalizado aceitar argumentos de várias tabelas, cada consulta que projeta uma coluna deverá ser colocada entre parênteses. Por exemplo, se você quiser chamar manualmente o DMF REFERENTIAL_CHECK, execute o seguinte comando:

SELECT referential_check( (SELECT id FROM salesorders), (SELECT id FROM salespeople) );
Copy