Uso de expectativas para implementar verificações de qualidade de dados

Retornar um valor de uma função de métrica de dados (DMF) fornece informações úteis, mas pode ser difícil saber se isso indica um problema de qualidade de dados sem saber o que você considera aceitável para seus dados. Por exemplo, você pode considerar tabelas que contêm menos de dez valores NULL em uma determinada coluna como aprovadas na verificação de qualidade de dados. Nesse caso, você espera que o valor seja menor que 10 e só deseja ser notificado se ele exceder esse valor.

Uma expectativa permite definir critérios para determinar se os dados passam em uma verificação de qualidade de dados realizada por um DMF. Quando o DMF retorna um valor, esse valor é comparado a esse critério para determinar se os dados passaram ou não na verificação. Os valores de retorno que falham são relatados como violações de expectativa para que você possa tomar as medidas apropriadas com base nos dados.

O exemplo a seguir cria a expectativa de que a coluna C1 contenha menos de dez valores NULL.

ALTER VIEW v1
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (C1)
  EXPECTATION my_exp ( VALUE < 10);
Copy

Você pode definir expectativas para o sistema DMFs e o DMFs personalizado.

Definição do que atende à expectativa

Uma expectativa inclui uma expressão booleana que determina se a expectativa foi atendida ou não. Quando essa expressão é avaliada como TRUE, significa que o resultado do DMF correspondeu à sua expectativa.

Em uma expressão, a palavra-chave VALUE representa o valor retornado pelo DMF. Por exemplo, suponha que você tenha a seguinte definição de expectativa:

EXPECTATION my_exp (VALUE < 5)
Copy

O Snowflake substitui VALUE pelo valor retornado pelo DMF ao avaliar a expectativa. Se o DMF retornasse 3, a expectativa seria atendida porque a expressão é avaliada como TRUE.

Se uma expressão é avaliada como FALSE, o Snowflake a relata como uma violação de expectativa. Para obter informações sobre como rastrear essas violações, consulte Identificar violações de expectativa.

Uma expressão pode incluir os seguintes tipos de operadores:

Uma expressão não pode fazer referência a outras tabelas ou exibições ou funções definidas pelo usuário (UDFs).

Criar uma expectativa

Cada associação entre um DMF e um objeto pode ter uma ou mais expectativas.

Você pode adicionar uma expectativa ao associar o DMF com a tabela ou exibição, ou você pode adicioná-la à associação posteriormente. Você também pode modificar uma expectativa existente.

Após adicionar uma expectativa, você pode testá-la manualmente sem precisar esperar até que o DMF seja executado com base em sua programação.

Adicionar uma expectativa ao associar um DMF

Use um comando ALTER TABLE ou ALTER VIEW para associar um DMF a uma tabela ou exibição. Você pode adicionar expectativas à associação na mesma instrução SQL que cria a associação.

Por exemplo, a sintaxe para adicionar expectativas ao associar um DMF a uma tabela é a seguinte. As exibições usam uma sintaxe semelhante. Esta versão preliminar apresenta a cláusula destacada.

  ALTER TABLE <table>
    ADD DATA METRIC FUNCTION <dmf>
      ON (<col_name> [ , ... ] [ , TABLE<table_name>( <col_name> [ , ... ] ) )
      [ EXPECTATION <expectation_name> ( <expression> )
        [, <expectation_name> ( <expression> ) [ , ... ] ] ]
Copy

Onde:

  • expectation_name é uma cadeia de caracteres usada para identificar a expectativa. Você pode criar expectativas com o mesmo nome, desde que elas pertençam a associações diferentes.

  • expression é uma expressão booleana que determina se o DMF retornou um valor esperado. Consulte Definição do que atende à expectativa.

Exemplo: Adicionar uma única expectativa

Suponha que você esteja associando o DMF do sistema MAX à exibição v1 para verificar o valor máximo na coluna c1. Você espera que o valor máximo esteja entre 25 e 50.

ALTER VIEW v1
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.MAX ON (C1)
    EXPECTATION my_exp ( 25 < VALUE AND VALUE < 50);
Copy

Se o DMF do MAX retornar um valor fora dessa faixa de valores esperados, o Snowflake o registrará como uma violação de expectativa.

Exemplo: Adicionar múltiplas expectativas

Suponha que você queira ser notificado quando uma tabela não for atualizada em cinco minutos e, novamente, quando não for atualizada por 30 minutos. Você pode adicionar as seguintes expectativas e, em seguida, verificar quando essas expectativas foram violadas.

ALTER TABLE emp
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.FRESHNESS ON (last_updated)
  EXPECTATION lessThan5Mins (VALUE < 300), lessThan30Mins (VALUE < 1800);
Copy

Adicionar uma expectativa a uma associação existente

Use um comando ALTER TABLE ou ALTER VIEW para adicionar uma expectativa a uma associação existente entre um DMF e a tabela ou exibição.

Por exemplo, a sintaxe para adicionar expectativas a uma associação entre uma tabela e um DMF é a seguinte. As exibições usam uma sintaxe semelhante. Esta versão preliminar apresenta a cláusula destacada.

  ALTER TABLE <table>
    MODIFY DATA METRIC FUNCTION <dmf>
      ON (<col_name> [ , ... ] [ , TABLE<table_name>( <col_name> [ , ... ] ) )
      [ ADD EXPECTATION <expectation_name> ( <expression> )
        [, <expectation_name> ( <expression> ) [ , ... ] ] ]
Copy

Onde:

  • expectation_name é uma cadeia de caracteres usada para identificar a expectativa. Você pode criar expectativas com o mesmo nome, desde que elas pertençam a associações diferentes.

  • expression é uma expressão booleana que determina se o DMF retornou um valor esperado. Consulte Definição do que atende à expectativa.

Exemplo

Suponha que você tenha associado anteriormente o DMF do sistema NULL_COUNT à coluna c1 na tabela my_table. Para adicionar uma expectativa para que você possa ser notificado quando houver dez ou mais valores NULL na coluna c1, execute o seguinte código:

ALTER TABLE my_table
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (c1)
    ADD EXPECTATION my_exp (VALUE < 10);
Copy

Se o resultado de NULL_COUNT for 15, isso será relatado como uma violação de expectativa.

Modificar uma expectativa existente

Use uma cláusula MODIFY EXPECTATION para alterar a expressão de uma expectativa adicionada anteriormente a uma associação.

Por exemplo, suponha que você tenha adicionado anteriormente a expectativa my_exp à associação entre a tabela t1 e o DMF NULL_COUNT. Para modificar a expectativa de modo que ela seja violada quando houver 15 ou mais valores NULL na coluna c1, execute o seguinte:

ALTER TABLE t1
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (c1)
    MODIFY EXPECTATION my_exp (VALUE < 15);
Copy

A expressão anterior da expectativa é substituída por VALUE < 15.

Testar uma expectativa

Após adicionar expectativas, você pode chamar a função de sistema SYSTEM$EVALUATE_DATA_QUALITY_EXPECTATIONS para garantir que elas foram adicionadas corretamente e determinar se essas expectativas estão sendo violadas no momento.

Por exemplo, suponha que você tenha adicionado pelo menos uma expectativa à associação entre um DMF e a tabela t1. Para verificar se essas expectativas estão sendo violadas no momento, execute o seguinte:

SELECT *
  FROM TABLE(SYSTEM$EVALUATE_DATA_QUALITY_EXPECTATIONS(
      REF_ENTITY_NAME => 'my_db.sch.t1'));
Copy

Remover uma expectativa

Use uma cláusula DROP EXPECTATION para remover uma expectativa de uma associação e removê-la do sistema.

Por exemplo, suponha que você tenha adicionado anteriormente a expectativa my_exp à associação entre a coluna c1 na tabela t1 e o DMF NULL_COUNT. Para remover my_exp da associação e do DMF, execute o seguinte código:

ALTER TABLE t1
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT on (c1)
    DROP EXPECTATION my_exp;
Copy

Identificar violações de expectativa

Você pode identificar violações de expectativa usando o seguinte:

SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW

Os resultados de qualidade de dados são registrados na tabela de eventos dedicada SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW.

Se a associação entre um objeto e um DMF tiver uma expectativa, duas linhas serão adicionadas à tabela sempre que o Snowflake calcular o resultado do DMF. A primeira linha registra informações sobre o objeto ao qual o DMF está associado, o próprio DMF e o resultado da verificação de qualidade de dados. A segunda linha registra informações relacionadas à expectativa definida na associação do DMF, incluindo se a expectativa foi atendida ou violada. Se houver várias expectativas, haverá uma linha para cada expectativa.

O campo snow.data_metric.record_type na coluna resource_attribute indica se uma linha corresponde a uma expectativa. Esse campo tem dois valores possíveis:

  • EXPECTATION_VIOLATION_STATUS - Indica que a linha corresponde a uma expectativa.

  • EVALUATION_RESULT - Indica que a linha corresponde à avaliação do DMF.

Se a linha corresponder a uma expectativa, a coluna resource_attribute também contém os seguintes campos relacionados às expectativas:

  • snow.data_metric.expectation_id – Identificador gerado pelo sistema.

  • snow.data_metric.expectation_name – Nome da expectativa quando foi adicionada à associação.

  • snow.data_metric.expectation_expression – Expressão da expectativa.

Após determinar que uma linha corresponde à avaliação de uma expectativa, você pode verificar a coluna value para determinar se a expectativa foi violada. Se for TRUE, a expectativa foi violada.

Exibição DATA_QUALITY_MONITORING_EXPECTATION_STATUS

A Exibição DATA_QUALITY_MONITORING_EXPECTATION_STATUS, que existe no esquema SNOWFLAKE.LOCAL, simplifica as informações na tabela de eventos para facilitar o acesso aos resultados do DMF.

Função DATA_QUALITY_MONITORING_EXPECTATION_STATUS

A função de tabela DATA_QUALITY_MONITORING_EXPECTATION_STATUS retorna linhas que fornecem as mesmas informações disponíveis na exibição DATA_QUALITY_MONITORING_EXPECTATION_STATUS. A função usa um modelo de controle de acesso diferente do da exibição.

Monitorar o uso de expectativas

O Snowflake monitora todas as expectativas em sua conta. Você pode executar uma função ou consultar uma exibição ACCOUNT_USAGE para monitorar o uso de expectativas, incluindo a execução das seguintes tarefas:

  • Monitorar quais objetos têm uma expectativa definida para sua associação com um DMF.

  • Monitorar quais DMFs têm uma expectativa definida para sua associação com um objeto.

  • Descobrir se há uma expectativa definida para uma associação específica entre um objeto e um DMF.

  • Determinar a expressão booleana de uma expectativa para entender melhor uma verificação de qualidade de dados.

Executar uma função para rastrear expectativas

Você pode executar a função DATA_METRIC_FUNCTION_EXPECTATIONS para gerar expectativas definidas para um objeto específico, um DMF específico ou a associação entre um objeto e um DMF.

Exemplo: expectativas que existem para um objeto específico

SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
      REF_ENTITY_NAME => 'my_table',
      REF_ENTITY_DOMAIN => 'table'));
Copy

Exemplo: expectativas que existem para um DMF específico

SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
      METRIC_NAME => 'SNOWFLAKE.CORE.NULL_COUNT'));
Copy

Exemplo: expectativas que existem para uma associação específica entre um objeto e um DMF

SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
      METRIC_NAME => 'SNOWFLAKE.CORE.NULL_COUNT',
      REF_ENTITY_NAME => 'my_table',
      REF_ENTITY_DOMAIN => 'table'));
Copy

Consultar uma exibição para rastrear expectativas

A Exibição DATA_METRIC_FUNCTION_EXPECTATIONS no esquema ACCOUNT_USAGE contém todas as expectativas da sua conta. Você pode consultar a exibição para rastrear o uso de expectativas na sua conta e determinar a expressão booleana de cada expectativa.

Exemplo: retornar todas as expectativas para sua conta Snowflake

SELECT * FROM snowflake.account_usage.data_metric_function_expectations
  ORDER BY expectation_name;
Copy

Exemplo: identificar expectativas para uma função de métrica de dados específica

SELECT expectation_name,
    ref_database_name as object_database,
    ref_schema_name as object_schema,
    ref_entity_name as object_name
  FROM snowflake.account_usage.data_metric_function_expectations
  WHERE
    metric_database_name = 'SNOWFLAKE' AND
    metric_schema_name = 'CORE' AND
    metric_name = 'ROW_COUNT'
  ORDER BY expectation_name;
Copy