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);
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)
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> ) [ , ... ] ] ]
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 colunac1
. 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);
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);
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> ) [ , ... ] ] ]
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 tabelamy_table
. Para adicionar uma expectativa para que você possa ser notificado quando houver dez ou mais valores NULL na colunac1
, 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);
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);
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'));
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;
Identificar violações de expectativa¶
Você pode identificar violações de expectativa usando o seguinte:
SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW – Uma tabela de eventos dedicada que registra resultados de qualidade de dados brutos.
Exibição DATA_QUALITY_MONITORING_EXPECTATION_STATUS – Exibição no esquema SNOWFLAKE.LOCAL que contém resultados nivelados.
Função DATA_QUALITY_MONITORING_EXPECTATION_STATUS – Função de tabela que retorna resultados de expectativas.
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'));
Exemplo: expectativas que existem para um DMF específico
SELECT *
FROM TABLE(
INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
METRIC_NAME => 'SNOWFLAKE.CORE.NULL_COUNT'));
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'));
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;
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;