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.

Use an ALTER TABLE or ALTER VIEW command to associate a DMF and specify which columns are passed as arguments. For example, the following command associates the NULL_COUNT system DMF with table t. When the DMF runs, it will return the number of NULL values in the column 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

Ajustar o cronograma das DMFs

The DATA_METRIC_SCHEDULE object parameter for a table, view, or materialized view controls how often DMFs run. By default, the schedule is set to one hour. All data metric functions on a table or view follow the same schedule.

You can use the following approaches to schedule your DMF to run:

  • 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.

Suspender DMFs

Você pode suspender uma DMF para impedir que seja executada mesmo que esteja associada a uma tabela. Como alternativa, você pode suspender todas as DMFs associadas a uma tabela com uma única instrução.

  • Para suspender uma DMF específica associada a uma tabela, modifique a associação para definir o parâmetro SUSPEND. Por exemplo:

    ALTER TABLE t1
      MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON ( col1 )
        SUSPEND;
    
    Copy

    Para retomar a execução da DMF, use outra instrução MODIFY DATA METRIC FUNCTION para definir o parâmetro RESUME.

  • Para suspender todas as DMFs associadas a uma tabela, defina o cronograma da tabela como uma cadeia de caracteres vazia. Por exemplo:

    ALTER TABLE t1 SET DATA_METRIC_SCHEDULE = '';
    
    Copy

    Para retomar a DMFs, defina o parâmetro DATA_METRIC_SCHEDULE como um valor válido.

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