Tutorial: Introdução às funções de métricas de dados¶
Introdução¶
Você pode concluir este tutorial usando uma planilha no Snowsight ou um cliente CLI como SnowSQL. Basta colar os exemplos de código e executá-los.
Ao fim deste tutorial, você terá aprendido a:
Criar uma função de métricas de dados (DMF) personalizada para medir a qualidade dos dados.
Gerenciar a DMF para otimizar o uso de crédito sem servidor.
Monitorar o uso de crédito sem servidor associado à chamada da DMF agendada.
Configuração do controle de acesso¶
Para concluir este tutorial, use uma única função personalizada que tenha todo o acesso necessário, incluindo seguinte:
Criação de um banco de dados, que posteriormente permitirá criar um esquema, criar uma DMF no esquema e criar uma tabela no esquema
Criar um warehouse para executar operações de consulta
Consultar a exibição com os resultados da chamada da DMF agendada
Consultar a exibição com informações de uso de computação sem servidor
Crie a função dq_tutorial_role
a ser usada durante todo o tutorial:
USE ROLE ACCOUNTADMIN; CREATE ROLE IF NOT EXISTS dq_tutorial_role;
Conceda os privilégios, a função de aplicativo e as funções de banco de dados à dq_tutorial_role
:
GRANT CREATE DATABASE ON ACCOUNT TO ROLE dq_tutorial_role; GRANT EXECUTE DATA METRIC FUNCTION ON ACCOUNT TO ROLE dq_tutorial_role; GRANT APPLICATION ROLE SNOWFLAKE.DATA_QUALITY_MONITORING_VIEWER TO ROLE dq_tutorial_role; GRANT DATABASE ROLE SNOWFLAKE.USAGE_VIEWER TO ROLE dq_tutorial_role; GRANT DATABASE ROLE SNOWFLAKE.DATA_METRIC_USER TO ROLE dq_tutorial_role;
Crie um warehouse para consultar a tabela com os dados e conceder o privilégio USAGE na função à função dq_tutorial_role
:
CREATE WAREHOUSE IF NOT EXISTS dq_tutorial_wh; GRANT USAGE ON WAREHOUSE dq_tutorial_wh TO ROLE dq_tutorial_role;
Confirme as concessões para a função dq_tutorial_role
:
SHOW GRANTS TO ROLE dq_tutorial_role;
Estabeleça uma hierarquia de funções e conceda a função a um usuário que possa concluir este tutorial (substitua o valor jsmith
):
GRANT ROLE dq_tutorial_role TO ROLE SYSADMIN; GRANT ROLE dq_tutorial_role TO USER jsmith;
Configuração de dados¶
Para facilitar o gerenciamento dos dados e da DMF para este tutorial, crie um banco de dados dedicado para conter estes objetos:
Criação de uma tabela¶
USE ROLE dq_tutorial_role;
CREATE DATABASE IF NOT EXISTS dq_tutorial_db;
CREATE SCHEMA IF NOT EXISTS sch;
CREATE TABLE customers (
account_number NUMBER(38,0),
first_name VARCHAR(16777216),
last_name VARCHAR(16777216),
email VARCHAR(16777216),
phone VARCHAR(16777216),
created_at TIMESTAMP_NTZ(9),
street VARCHAR(16777216),
city VARCHAR(16777216),
state VARCHAR(16777216),
country VARCHAR(16777216),
zip_code NUMBER(38,0)
);
Insira os valores em uma tabela¶
Adicione dados à tabela:
USE WAREHOUSE dq_tutorial_wh; INSERT INTO customers (account_number, city, country, email, first_name, last_name, phone, state, street, zip_code) VALUES (1589420, 'san francisco', 'usa', 'john.doe@', 'john', 'doe', 1234567890, null, null, null); INSERT INTO customers (account_number, city, country, email, first_name, last_name, phone, state, street, zip_code) VALUES (8028387, 'san francisco', 'usa', 'bart.simpson@example.com', 'bart', 'simpson', 1012023030, null, 'market st', 94102); INSERT INTO customers (account_number, city, country, email, first_name, last_name, phone, state, street, zip_code) VALUES (1589420, 'san francisco', 'usa', 'john.doe@example.com', 'john', 'doe', 1234567890, 'ca', 'concar dr', 94402), (2834123, 'san mateo', 'usa', 'jane.doe@example.com', 'jane', 'doe', 3641252911, 'ca', 'concar dr', 94402), (4829381, 'san mateo', 'usa', 'jim.doe@example.com', 'jim', 'doe', 3641252912, 'ca', 'concar dr', 94402), (9821802, 'san francisco', 'usa', 'susan.smith@example.com', 'susan', 'smith', 1234567891, 'ca', 'geary st', 94121), (8028387, 'san francisco', 'usa', 'bart.simpson@example.com', 'bart', 'simpson', 1012023030, 'ca', 'market st', 94102);
Crie e trabalhe com DMFs¶
Nas seções a seguir, criaremos uma DMF definida pelo usuário para medir a contagem de endereços de e-mail inválidos e, posteriormente, fazer o seguinte:
Agende a DMF para executar a cada 5 minutos.
Verifique as referências de tabela da DMF (encontre as tabelas em que a DMF está definida).
Consulte uma exibição integrada com o resultado da chamada da DMF agendada.
Remova a definição da DMF da tabela para evitar o uso de crédito sem servidor desnecessário.
Criar uma DMF¶
Crie uma função de métricas de dados (DMF) para retornar o número de endereços de e-mail em uma coluna que não corresponda à expressão regular especificada:
CREATE DATA METRIC FUNCTION IF NOT EXISTS invalid_email_count (ARG_T table(ARG_C1 STRING)) RETURNS NUMBER AS 'SELECT COUNT_IF(FALSE = ( ARG_C1 REGEXP ''^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$'')) FROM ARG_T';
Defina o cronograma na tabela¶
O cronograma de DMF define quando todas as DMFs na tabela são executadas. Atualmente, 5 minutos é o menor intervalo possível:
ALTER TABLE customers SET DATA_METRIC_SCHEDULE = '5 MINUTE';
Nota
Para fins do tutorial, o cronograma é definido para 5 minutos. No entanto, após otimizar seus casos de uso da DMF, experimente outras configurações de cronograma, como expressões cron ou eventos de acionamento associados às operações de DML que afetam a tabela.
Defina as DMFs na tabela e confira as referências¶
Associe a DMF à tabela:
ALTER TABLE customers ADD DATA METRIC FUNCTION invalid_email_count ON (email);
Como o cronograma é definido para 5 minutos, precisamos esperar 5 minutos para que o Snowflake chame a DMF e processe os resultados. Por enquanto, podemos verificar se a DMF está associada à tabela chamando a função de tabela Information Schema DATA_METRIC_FUNCTION_REFERENCES:
SELECT * FROM TABLE(INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_REFERENCES( REF_ENTITY_NAME => 'dq_tutorial_db.sch.customers', REF_ENTITY_DOMAIN => 'TABLE'));
Visualize os resultados da DMF:¶
Os resultados da chamada da DMF agendada são armazenados na exibição DATA_QUALITY_MONITORING_RESULTS. Para determinar o número de endereços de e-mail inválidos, consulte a exibição DATA_QUALITY_MONITORING_RESULTS para ver os resultados da chamada da DMF agendada:
SELECT scheduled_time, measurement_time, table_name, metric_name, value FROM SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS WHERE TRUE AND METRIC_NAME = 'INVALID_EMAIL_COUNT' AND METRIC_DATABASE = 'DQ_TUTORIAL_DB' LIMIT 100;
Os resultados mostram que a value
coluna contém 1
. Este número corresponde a um endereço de e-mail com formato incorreto, que corresponde à primeira instrução INSERT na seção Insira os valores em uma tabela.
Remova a definição das DMFs da tabela¶
Você estabeleceu que a DMF está funcionando conforme o esperado com base na definição da DMF, o cronograma e os resultados esperados.
Para evitar o uso desnecessário de crédito sem servidor, remova a definição da DMF da tabela:
ALTER TABLE customers DROP DATA METRIC FUNCTION invalid_email_count ON (email);
Usar DMF para retornar registros com falha¶
Nesta seção, você retornará registros que falharam na verificação da qualidade dos dados porque tinham valores em branco.
A função de métrica de qualidade de dados identifica as linhas que contêm dados que falharam na verificação de qualidade. Você pode executar uma verificação da métrica de dados para extrair e retornar esses registros.
Para retornar as linhas identificadas por uma DMF, siga estas etapas:
Crie uma tabela.
Adicione registros incorretos à tabela.
Execute a verificação da métrica de dados para retornar registros com valores em branco.
Exiba os resultados da verificação.
Atualize os registros com um novo valor.
Criação de uma tabela¶
Cole e execute a seguinte instrução para criar uma tabela.
CREATE or REPLACE table dq_tutorial_db.sch.employeesTable ( id NUMBER, name VARCHAR, last_name VARCHAR, email VARCHAR, zip_code NUMBER );
Insira os valores em uma tabela¶
Adicione dados com alguns registros incorretos, como valores em branco, à tabela:
INSERT INTO dq_tutorial_db.sch.employeesTable (id, name, last_name, email, zip_code) VALUES (8, 'John', 'Doe', 'johndoe@example.com', 12345), (23, '', 'Smith', 'smithj@example.com', 23456), (1, NULL, 'Taylor', 'taylorj@example.com', 34567), (99, 'Jane', 'Adams', 'jadams@example.com', 45678), (50, 'Alice', 'Brown', '', 56789), (51, NULL, 'Lee', 'lee@example.com', 67890), (234, 'Michael', '', 'michael@example.com', 78901), (56, 'Sara', 'Jones', 'sjones@example.com', 89012), (11, '', NULL, 'blanklast@example.com', 90123), (12, 'Tom', 'Harris', NULL, 10234);
Retornar o número de valores em branco executando a função de métrica de dados BLANK_COUNT¶
Execute a função de métrica de dados BLANK_COUNT para retornar o número de valores em branco:
SELECT snowflake.core.blank_count (SELECT name FROM dq_tutorial_db.sch.employeesTable)
Retornar as linhas executando a função SYSTEM$DATA_METRIC_SCAN¶
Para retornar as linhas da tabela que contêm valores em branco na coluna name
, execute a função SYSTEM$DATA_METRIC_SCAN na coluna name
.
SELECT * FROM TABLE(SYSTEM$DATA_METRIC_SCAN( REF_ENTITY_NAME => 'dq_tutorial_db.sch.employeesTable', METRIC_NAME => 'snowflake.core.blank_count', ARGUMENT_NAME => 'name' ));
Exibir os resultados da verificação métrica do sistema¶
Os resultados mostram as linhas da tabela employeeTable
que contêm valores em branco.
+-----+-------+--------------+-----------------------+-----------+------- --+
| ID | NAME | LAST_NAME | EMAIL | CREATEDAT | ZIP_CODE |
|-----+-------+--------------+-----------------------+----------------------|
| 23 | | Smith | smith@example.com | null | 23456 |
| 11 | | null | blanklast@example.com | null | 90123 |
+-----+-------+--------------+-----------------------+-----------+----------+
Atualizar registros com um novo valor¶
Para substituir os valores em branco na coluna name
, execute uma consulta na tabela de destino que inclua a função SYSTEM$DATA_METRIC_SCAN. Isso define os valores em branco na coluna name
para NULL executando o comando UPDATE em cada uma das linhas retornadas pela função do sistema:
UPDATE dq_tutorial_db.sch.employeesTable
SET name = null
WHERE dq_tutorial_db.sch.employeesTable.ID IN (
select ID from table(system$data_metric_scan(
REF_ENTITY_NAME => 'dq_tutorial_db.sch.employeesTable',
METRIC_NAME => 'snowflake.core.blank_count',
ARGUMENT_NAME => 'name'
)));
Depois que você atualiza os valores, a seguinte execução retorna 0:
SELECT snowflake.core.blank_count (SELECT name FROM dq_tutorial_db.sch.employeesTable)
Nesta seção, você extraiu registros com dados que não passaram na verificação de qualidade. Na próxima seção, você aprenderá a visualizar o consumo de crédito sem servidor.
Visualização de seu consumo de crédito sem servidor¶
Chamar funções de métricas de dados agendadas (DMFs) requer recursos de computação sem servidor. Você pode consultar a exibição Account Usage DATA_QUALITY_MONITORING_USAGE_HISTORY para ver o custo da DMF de computação sem servidor.
Como a visualização tem uma latência de 1 a 2 horas, aguarde esse tempo passar antes de consultar a exibição. Você pode retornar a esta etapa mais tarde.
Consulte a exibição e filtre os resultados para incluir o intervalo de sua DMF agendada:
USE ROLE dq_tutorial_role; SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.DATA_QUALITY_MONITORING_USAGE_HISTORY WHERE TRUE AND START_TIME >= CURRENT_TIMESTAMP - INTERVAL '3 days' LIMIT 100;
Limpeza, resumo e recursos adicionais¶
Parabéns! Você concluiu este tutorial.
Reserve alguns minutos para ver o resumo e os principais pontos abordados neste tutorial.
Considere fazer uma limpeza descartando os objetos criados neste tutorial. Saiba mais revisando outros tópicos na documentação do Snowflake.
Resumo e pontos principais¶
Em resumo, você aprendeu a fazer o seguinte:
Criar uma DMF personalizada para avaliar a qualidade dos dados e gerenciar a DMF para otimizar o uso de crédito sem servidor.
Monitorar o uso de crédito sem servidor associado à chamada da DMF agendada.
Descarte os objetos do tutorial¶
Se você planeja repetir o tutorial, pode manter os objetos que criou.
Caso contrário, descarte os objetos do tutorial da seguinte forma:
USE ROLE ACCOUNTADMIN;
DROP DATABASE dq_tutorial_db;
DROP WAREHOUSE dq_tutorial_wh;
DROP ROLE dq_tutorial_role;
Qual é o próximo passo?¶
Continue aprendendo sobre o Snowflake com os seguintes recursos:
Saiba mais sobre as DMFs começando por Introdução à qualidade de dados e funções de métricas de dados.
Conclua os outros tutoriais fornecidos pela Snowflake no tópico Tutoriais Snowflake.