View a markdown version of this page

Gravar resultados de qualidade de dados em tabelas do Data Catalog - AWS Glue

Gravar resultados de qualidade de dados em tabelas do Data Catalog

Você pode configurar as execuções de avaliação do AWS Glue Data Quality para gravar automaticamente os resultados em tabelas Apache Iceberg no AWS Glue Data Catalog. Depois de habilitar a saída de resultados, você pode consultar os resultados de qualidade de dados diretamente usando , montar painéis com ferramentas de visualização e manter um histórico centralizado dos resultados de qualidade de dados de toda a sua conta.

Você pode gravar os seguintes tipos de resultados de qualidade de dados nas tabelas do Data Catalog:

  • Resultados de regras: o resultado de aprovação ou reprovação em cada regra do conjunto de regras, incluindo as métricas avaliadas e os motivos da reprovação

  • Resultados de perfilamento: estatísticas coletadas por analisadores, incluindo valores escalares (como média e desvio padrão) e dados de distribuição (histogramas e distribuições de valores)

  • Resultados no nível da linha: resultados de avaliação por registro que identificam quais linhas específicas do conjunto de dados foram aprovadas ou reprovadas em cada regra

  • Resultados de observação: previsões de detecção de anomalias, incluindo valores esperados, limites de predição e se o valor real foi sinalizado como uma anomalia

Pré-requisitos

Para gravar resultados de qualidade de dados nas tabelas do Data Catalog, o perfil do IAM usado na execução da avaliação deverá ter as seguintes permissões:

  • Permissão para criar e atualizar bancos de dados e tabelas no AWS Glue Data Catalog

  • Permissão para gravar no local do Amazon S3 onde os dados de tabela Iceberg são armazenados

A execução da avaliação usa o perfil do IAM especificado para gravar nas tabelas de resultados. Esse é o mesmo perfil que tem acesso à tabela de origem dos dados.

Configurar a saída de resultados

Você configura a saída dos resultados de qualidade de dados usando o parâmetro --additional-run-options da API StartDataQualityRulesetEvaluationRun ou o parâmetro additional_options nos trabalhos do AWS Glue ETL. Por padrão, o AWS Glue Data Quality não grava os resultados nas tabelas do Data Catalog. Habilite explicitamente cada tipo de resultado que desejar gravar.

Cada tipo de resultado tem seu próprio bloco de configuração com uma estrutura CatalogTableConfig compartilhada. Se você não fornecer uma CatalogTableConfig, o AWS Glue Data Quality derivará os valores padrão automaticamente, inclusive o nome da tabela e o caminho do Amazon S3.

A estrutura CatalogTableConfig contém os seguintes campos:

  • DatabaseName (opcional): o nome do banco de dados do catálogo na tabela de destino. Se não especificado, um banco de dados padrão será criado.

  • TableName (opcional): o nome da tabela de destino. Se não especificado, um nome de tabela padrão será usado.

  • S3Location (opcional): o local do Amazon S3 onde os dados de tabela são armazenados. Formato: s3://amzn-s3-demo-bucket/prefix/. Se não especificado, os resultados serão armazenados em um local padrão.

  • CatalogId (opcional): o ID do AWS Glue Data Catalog no qual a tabela será criada. Se não especificado, AWS será usado como padrão.

Exemplo: configurar os resultados de regras e os resultados de perfilamento

aws glue start-data-quality-ruleset-evaluation-run \ --data-source '{ "GlueTable": { "DatabaseName": "my_database", "TableName": "my_table" } }' \ --role "arn:aws:iam::123456789012:role/GlueServiceRole" \ --ruleset-names '["my_ruleset"]' \ --additional-run-options '{ "DataQualityRuleResults": { "WriteDataQualityRuleResultsEnabled": true, "CatalogTableConfig": { "DatabaseName": "quality_results", "TableName": "rule_results" } }, "ProfilingResults": { "WriteProfilingResultsEnabled": true, "CatalogTableConfig": { "DatabaseName": "quality_results", "TableName": "profiles" } } }'

Exemplo: configurar os resultados no nível da linha

Para resultados no nível da linha, é possível também especificar o tipo dos registros a serem incluídos e o número máximo de linhas a serem gravadas.

aws glue start-data-quality-ruleset-evaluation-run \ --data-source '{ "GlueTable": { "DatabaseName": "my_database", "TableName": "my_table" } }' \ --role "arn:aws:iam::123456789012:role/GlueServiceRole" \ --ruleset-names '["my_ruleset"]' \ --additional-run-options '{ "RowLevelResults": { "MaxRowsToWrite": 5000, "ResultType": "FAILED_ONLY", "CatalogTableConfig": { "DatabaseName": "quality_results", "TableName": "row_level_results" } } }'

O parâmetro ResultType aceita os seguintes valores:

  • FAILED_ONLY: gravar somente as linhas reprovadas em pelo menos uma regra de qualidade de dados.

  • PASSED_ONLY: gravar somente as linhas provadas em todas as regras de qualidade de dados.

  • ALL: gravar todas as linhas com seus resultados de avaliação.

Exemplo: configurar em trabalhos de ETL do AWS Glue

Nos trabalhos de ETL do AWS Glue, você configura a saída de resultados usando o parâmetro additional_options com chaves em notação de pontos:

result = EvaluateDataQuality.process_rows( frame=dynamic_frame, ruleset=ruleset, publishing_options={ "dataQualityEvaluationContext": "my_context", "enableDataQualityResultsPublishing": True }, additional_options={ "observations.scope": "ALL", "dataQualityResultsPublishing.strategy": "BEST_EFFORT", "dataQualityResultsPublishing.resultsFormat.profilingResults.writeProfilingResultsEnabled": "true", "dataQualityResultsPublishing.resultsFormat.profilingResults.catalogTableConfig.databaseName": "my_db", "dataQualityResultsPublishing.resultsFormat.profilingResults.catalogTableConfig.tableName": "profiling_results", "dataQualityResultsPublishing.resultsFormat.profilingResults.catalogTableConfig.s3Location": "s3://amzn-s3-demo-bucket/profiling/", "dataQualityResultsPublishing.resultsFormat.profilingResults.catalogTableConfig.catalogId": "123456789012" } )

Exemplo: configurar resultados de observação

Você pode configurar os resultados de observação da mesma forma que outros tipos de resultados. Os resultados de observação exigem que a detecção de anomalias seja habilitada (ObservationScope: ALL):

aws glue start-data-quality-ruleset-evaluation-run \ --data-source '{ "GlueTable": { "DatabaseName": "my_database", "TableName": "my_table" } }' \ --role "arn:aws:iam::123456789012:role/GlueServiceRole" \ --ruleset-names '["my_ruleset"]' \ --additional-run-options '{ "ObservationScope": "ALL", "ObservationResults": { "WriteObservationResultsEnabled": true, "CatalogTableConfig": { "DatabaseName": "quality_results", "TableName": "observation_results" } } }'

Esquemas de tabela

O AWS Glue Data Quality grava cada tipo de resultado em uma tabela Iceberg separada. Os resultados de regras, os resultados de perfilamento (incluindo a tabela de resultados de distribuição separada) e as tabelas de resultados de observação são particionados por catalog_id, database_name, table_name e day(stored_on) para permitir consultas eficientes. Você pode filtrar por stored_on diretamente para consultas baseadas em hora e o Iceberg lida com a remoção de partições automaticamente.

Tabela de resultados de regras

A tabela de resultados da regras armazena o resultado de aprovação ou reprovação em cada regra avaliada durante uma execução de qualidade de dados.

Coluna Tipo Descrição
dq_result_id STRING Identificador exclusivo do resultado de qualidade dos dados.
rule_name STRING O nome da regra (por exemplo, Rule_1).
rule_description STRING A expressão DQDL da regra.
rule_result STRING O resultado da avaliação: PASS ou FAIL.
evaluation_message STRING Uma mensagem descrevendo o motivo da reprovação, se aplicável.
evaluated_metrics MAP<STRING, DOUBLE> As métricas avaliadas pela regra.
catalog_id STRING O ID do catálogo da tabela de origem.
database_name STRING O nome do banco de dados da tabela de origem.
table_name STRING O nome da tabela de origem.
ruleset_evaluation_run_id STRING O ID da execução da avaliação.
started_on TIMESTAMP Quando a avaliação começou.
completed_on TIMESTAMP Quando a avaliação foi concluída.
evaluated_rule STRING A expressão da regra avaliada após a resolução do operando.
ruleset_name STRING Nome do conjunto de regras que produziu esse resultado.

Tabela de resultados de perfilamento

A tabela a seguir descreve as colunas da tabela de resultados de perfilamento. Essa tabela armazena estatísticas escalares coletadas por analisadores e regras (como Mean, StandardDeviation e Completeness). O AWS Glue Data Quality armazena estatísticas de distribuição em uma tabela de resultados de distribuição separada.

Coluna Tipo Descrição
profile_id STRING Identificador exclusivo do perfil de qualidade dos dados.
statistic_id STRING Identificador exclusivo da estatística.
statistic_name STRING Nome da estatística (por exemplo, Mean, Completeness)
evaluation_level STRING O nível no qual a estatística é avaliada: Dataset, Column ou Multicolumn.
statistics_value DOUBLE O valor escalar da estatística.
statistic_properties MAP<STRING, STRING> Propriedades adicionais da estatística.
columns_referenced ARRAY<STRING> As colunas referenciadas pela estatística.
referenced_datasets ARRAY<STRING> Conjuntos de dados referenciados para a estatística.
column_name STRING O nome da coluna de destino.
dq_result_id STRING Identificador do resultado de qualidade de dados.
started_on TIMESTAMP Quando a avaliação começou.
completed_on TIMESTAMP Quando a avaliação foi concluída.
stored_on TIMESTAMP Quando o registro foi gravado na tabela.
catalog_id STRING O ID do catálogo da tabela de origem.
database_name STRING O nome do banco de dados de origem.
table_name STRING Nome da tabela de origem.
region STRING AWSRegião .
account_id STRING ID da conta da AWS.
ruleset_evaluation_run_id STRING O ID da execução da avaliação.

Tabela de resultados de distribuição

A tabela a seguir descreve as colunas da tabela de resultados de distribuição. Os resultados de distribuição são armazenados separadamente das estatísticas de perfilamento escalar, com uma linha para cada compartimento ou categoria. Você pode configurar essa tabela dentro do bloco ProfilingResults.DistributionResults.

Coluna Tipo Descrição
statistic_id STRING Identificador exclusivo da estatística de distribuição.
column_name STRING A coluna de origem (por exemplo, “idade” ou “departamento”).
data_type STRING O tipo de dados da coluna (por exemplo, “LongType”, “StringType”).
num_bins INT Número de compartimentos usados na distribuição.
bin_index INT Posição do compartimento baseada em 0.
bin_label STRING Para colunas categóricas: o valor distinto. NULL para colunas numéricas.
bin_lower_bound STRING Para colunas numéricas: a borda inferior do compartimento. NULL para colunas categóricas.
bin_upper_bound STRING Para colunas numéricas: a borda superior do compartimento. NULL para colunas categóricas.
bin_count BIGINT Contagem de frequência desse compartimento.
null_count INT Número de valores NULL excluídos da distribuição. Mesmo valor em todas as linhas para uma determinada estatística em uma execução. NULL quando nenhum valor nulo está presente.
tail_count INT Frequência agregada de valores categóricos além dos 20 primeiros. Mesmo valor em todas as linhas para uma determinada estatística em uma execução. NULL para histogramas numéricos.
profile_id STRING Identificador do perfil.
dq_result_id STRING Identificador do resultado de qualidade de dados.
ruleset_evaluation_run_id STRING Identificador da execução da avaliação.
started_on TIMESTAMP Quando a avaliação começou.
completed_on TIMESTAMP Quando a avaliação foi concluída.
stored_on TIMESTAMP Quando o registro foi gravado na tabela.
catalog_id STRING O ID do catálogo da tabela de origem.
database_name STRING O nome do banco de dados de origem.
table_name STRING Nome da tabela de origem.
region STRING AWSRegião .
account_id STRING ID da conta da AWS.

Tabela de resultados no nível da linha

A tabela a seguir descreve as colunas da tabela de resultados no nível da linha. Você pode usar essa tabela para identificar os registros específicos que foram reprovados pelas regras de qualidade de dados.

Coluna Tipo Descrição
Colunas de origem Varia Todas as colunas dos dados da fonte original.
data_quality_rules_pass ARRAY<STRING> Regras que foram aprovadas para esse registro.
data_quality_rules_fail ARRAY<STRING> Regras que foram reprovadas para esse registro.
data_quality_rules_skip ARRAY<STRING> Regras que foram ignoradas para esse registro.
data_quality_evaluation_result STRING O resultado geral da avaliação desse registro: Passed ou Failed.
dq_result_id STRING Identificador exclusivo do resultado de qualidade dos dados.
ruleset_evaluation_run_id STRING O ID da execução da avaliação.
started_on TIMESTAMP Quando a avaliação começou.
completed_on TIMESTAMP Quando a avaliação foi concluída.
stored_on TIMESTAMP Quando o registro foi gravado na tabela.
catalog_id STRING O ID do catálogo da tabela de origem.
database_name STRING O nome do banco de dados de origem.
table_name STRING Nome da tabela de origem.
region STRING AWSRegião .
account_id STRING ID da conta da AWS.

Tabela de resultados de observação

A tabela de resultados de observação armazena as previsões de detecção de anomalias para cada estatística em toda execução da avaliação. A tabela inclui todos os resultados des previsões: anomalias, valores normais e previsões ignoradas. Isso permite renderizar gráficos de tendências contínuas com faixas de previsão.

Coluna Tipo Descrição
statistic_id STRING Identificador da estatística que está sendo monitorada.
statistic_name STRING Nome da estatística monitorada.
prediction_outcome STRING O resultado da detecção de anomalias: ANOMALY, NOT_ANOMALY ou SKIPPED.
expected_value DOUBLE O valor esperado previsto. NULL quando a previsão é ignorada.
lower_bound DOUBLE O limite inferior do intervalo previsto. NULL quando a previsão é ignorada.
upper_bound DOUBLE O limite superior do intervalo previsto. NULL quando a previsão é ignorada.
observation_message STRING Uma descrição da anomalia, se detectada.
training_input STRING Se esse ponto de dados é incluído no modelo de detecção de anomalias: INCLUDED ou EXCLUDED.
ruleset_evaluation_run_id STRING O ID da execução da avaliação.
recorded_on TIMESTAMP Quando a observação foi registrada.
stored_on TIMESTAMP Quando o registro foi gravado na tabela.
actual_value DOUBLE O valor real observado da estatística.
training_status STRING Status do treinamento de modelo de detecção de anomalias (por exemplo, PENDING, COMPLETED).
recommended_rules STRING Regras recomendadas com base na previsão de detecção de anomalias.
modified_rules STRING Regras modificadas com limites atualizados com base nas previsões.
catalog_id STRING O ID do catálogo da tabela de origem.
database_name STRING O nome do banco de dados de origem.
table_name STRING Nome da tabela de origem.
nota

A tabela de resultados de observação usa um modelo de gravação somente acréscimo. Quando você exclui um ponto de dados usando a API BatchPutDataQualityStatisticAnnotation, uma nova linha é acrescentada com training_input definido como EXCLUDED. Para consultar o estado mais recente de cada observação, use o timestamp stored_on para identificar a linha mais recente de cada combinação de estatística e execução.

nota

Essa tabela também armazena observações de transbordamento de distribuição, geradas quando mais de 2% dos valores ficam fora dos limites de compartimento congelados. Essas linhas têm statistic_name = 'Distribution' e prediction_outcome é NULL. O campo observation_message contém a descrição do transbordamento.

Consultar resultados com

Depois que a avaliação de qualidade de dados é concluída, é possível consultar as tabelas de resultados diretamente usando . Os exemplos a seguir demonstram padrões comuns de consulta.

Exemplo: encontrar regras reprovadas em uma execução específica

SELECT rule_name, rule_description, evaluation_message, evaluated_metrics FROM quality_results.rule_results WHERE ruleset_evaluation_run_id = 'dqr-12345678' AND rule_result = 'FAIL' ORDER BY rule_name;

Exemplo: visualizar estatísticas de perfilamento ao longo do tempo

SELECT stored_on, statistics_value FROM quality_results.profiles WHERE database_name = 'my_database' AND table_name = 'my_table' AND statistic_name = 'Mean' AND columns_referenced = ARRAY['salary'] ORDER BY stored_on;

Exemplo: identificar linhas que foram reprovadas em uma regra específica

SELECT * FROM quality_results.row_level_results WHERE data_quality_evaluation_result = 'Failed' AND contains(data_quality_rules_fail, 'IsComplete "email"');

Exemplo: visualizar um histograma numérico

SELECT bin_index, bin_lower_bound, bin_upper_bound, bin_count FROM quality_results.distributions WHERE column_name = 'salary' AND ruleset_evaluation_run_id = 'dqrun-abc123' ORDER BY bin_index;

Exemplo: visualizar uma distribuição categórica de valores

SELECT bin_label, bin_count FROM quality_results.distributions WHERE column_name = 'department' AND ruleset_evaluation_run_id = 'dqrun-abc123' ORDER BY bin_count DESC;

Exemplo: acompanhar a frequência da categoria ao longo do tempo

SELECT started_on, bin_count FROM quality_results.distributions WHERE column_name = 'status' AND bin_label = 'active' ORDER BY started_on;

Exemplo: visualizar tendências de detecção de anomalias com faixas de previsão

SELECT o.recorded_on, p.statistics_value AS actual_value, o.expected_value, o.lower_bound, o.upper_bound, o.prediction_outcome FROM quality_results.profiles p JOIN quality_results.observation_results o ON p.statistic_id = o.statistic_id AND p.ruleset_evaluation_run_id = o.ruleset_evaluation_run_id WHERE p.database_name = 'my_database' AND p.table_name = 'my_table' AND p.statistic_name = 'RowCount' AND p.stored_on >= DATE '2025-03-01' ORDER BY p.stored_on;

Exemplo: consultar o estado da observação mais recente após as anotações

Como a tabela de resultados de observação usa um modelo somente acréscimo, as anotações de exclusão adicionam novas linhas. Use uma consulta de desduplicação para obter o estado mais recente de cada observação:

SELECT statistic_id, statistic_name, prediction_outcome, expected_value, lower_bound, upper_bound, training_input, stored_on FROM ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY statistic_id, ruleset_evaluation_run_id ORDER BY stored_on DESC ) AS rn FROM quality_results.observation_results WHERE database_name = 'my_database' AND table_name = 'my_table' ) WHERE rn = 1 ORDER BY stored_on;

Considerações

Leve em conta as seguintes considerações ao gravar resultados de qualidade de dados em tabelas do Data Catalog:

  • O AWS Glue Data Quality armazena os resultados no formato Apache Iceberg, que é compatível com consultas eficientes de viagem no tempo e remoção de partições.

  • Uma única tabela de resultados pode armazenar os resultados de várias tabelas de origem. Use as colunas de partição catalog_id, database_name e table_name para filtrar os resultados de uma fonte específica.

  • O AWS Glue Data Quality grava os resultados de observação de forma assíncrona após a conclusão da execução da avaliação. Pode haver um breve atraso até que as observações apareçam na tabela.

  • Nas estatísticas de distribuição na tabela de resultados de distribuição, cada compartimento ou categoria é armazenado como uma linha separada. Por exemplo, um histograma com 20 compartimentos gera 20 linhas na tabela para essa estatística.