View a markdown version of this page

Écrire les résultats relatifs à la qualité des données dans les tableaux du catalogue de données - AWS Glue

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Écrire les résultats relatifs à la qualité des données dans les tableaux du catalogue de données

Vous pouvez configurer les cycles d'évaluation de la qualité des données de AWS Glue pour écrire automatiquement les résultats dans les tables Apache Iceberg du catalogue de données AWS Glue. Une fois que vous avez activé la sortie des résultats, vous pouvez interroger directement les résultats de qualité de vos données, créer des tableaux de bord avec des outils de visualisation et gérer un historique centralisé des résultats de qualité des données sur votre compte.

Vous pouvez écrire les types de résultats de qualité des données suivants dans les tableaux du catalogue de données :

  • Résultats des règles  : résultat de réussite ou d'échec pour chaque règle de votre ensemble de règles, y compris les mesures évaluées et les raisons de l'échec

  • Résultats de profilage  : statistiques collectées par les analyseurs, y compris les valeurs scalaires (telles que la moyenne et l'écart type) et les données de distribution (histogrammes et distributions de valeurs)

  • Row-level résultats  : résultats Per-record d'évaluation qui identifient quelles lignes spécifiques de votre ensemble de données ont réussi ou échoué à chaque règle

  • Résultats des observations — Prédictions de détection des anomalies, y compris les valeurs attendues, les limites de prédiction et si la valeur réelle a été signalée comme une anomalie

Conditions préalables

Pour écrire les résultats de qualité des données dans les tables du catalogue de données, le rôle IAM que vous utilisez pour l'exécution de l'évaluation doit disposer des autorisations suivantes :

  • Autorisation de créer et de mettre à jour des bases de données et des tables dans le catalogue de données AWS Glue

  • Autorisation d'écrire vers l'emplacement Amazon S3 où les données de la table Iceberg sont stockées

L'exécution de l'évaluation utilise le rôle IAM que vous spécifiez pour écrire dans les tableaux de résultats. Il s'agit du même rôle qui a accès à la table de données source.

Configuration de la sortie des résultats

Vous configurez la sortie des résultats de qualité des données à l'aide du --additional-run-options paramètre de l'StartDataQualityRulesetEvaluationRunAPI ou du additional_options paramètre des tâches AWS Glue ETL. Par défaut, AWS Glue Data Quality n'écrit pas les résultats dans les tables du catalogue de données. Vous devez activer explicitement chaque type de résultat que vous souhaitez écrire.

Chaque type de résultat possède son propre bloc de configuration avec une CatalogTableConfig structure partagée. Si vous ne fournissez pas deCatalogTableConfig, AWS Glue Data Quality dérive automatiquement les valeurs par défaut, y compris le nom de la table et le chemin Amazon S3.

La CatalogTableConfig structure contient les champs suivants :

  • DatabaseName(facultatif) — Nom de la base de données du catalogue pour la table cible. Si ce n'est pas spécifié, une base de données par défaut est créée.

  • TableName(facultatif) — Le nom de la table cible. S'il n'est pas spécifié, un nom de table par défaut est utilisé.

  • S3Location (facultatif) : emplacement Amazon S3 où les données des tables sont stockées. Format :s3://amzn-s3-demo-bucket/prefix/. Si ce n'est pas spécifié, les résultats sont stockés dans un emplacement par défaut.

  • CatalogId(facultatif) — ID du catalogue de données AWS Glue dans lequel créer la table. S'il n'est pas spécifié, l'identifiant du AWS compte est utilisé par défaut.

Exemple : configurer les résultats des règles et les résultats du profilage

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" } } }'

Exemple : configurer les résultats au niveau des lignes

Pour les résultats au niveau des lignes, vous pouvez également spécifier le type d'enregistrements à inclure et le nombre maximum de lignes à écrire.

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" } } }'

Le paramètre ResultType accepte les valeurs suivantes :

  • FAILED_ONLY— Écrivez uniquement les lignes qui ont échoué à au moins une règle de qualité des données.

  • PASSED_ONLY— Écrivez uniquement les lignes qui respectent toutes les règles de qualité des données.

  • ALL— Écrivez toutes les lignes avec leurs résultats d'évaluation.

Exemple — Configuration dans les tâches ETL de AWS Glue

Dans les tâches AWS Glue ETL, vous configurez la sortie des résultats à l'aide du additional_options paramètre avec des touches de notation par points :

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" } )

Exemple — Configuration des résultats d'observation

Vous pouvez configurer les résultats d'observation de la même manière que les autres types de résultats. Les résultats des observations nécessitent l'activation de la détection des anomalies (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" } } }'

Schémas de tables

AWS Glue Data Quality écrit chaque type de résultat dans une table Iceberg distincte. Les résultats des règles, les résultats du profilage (y compris le tableau des résultats de distribution distinct) et les tableaux des résultats des observations sont partitionnés par catalog_id database_nametable_name, et day(stored_on) pour permettre des requêtes efficaces. Vous pouvez filtrer stored_on directement pour les requêtes temporelles et Iceberg gère automatiquement l'élagage des partitions.

Tableau des résultats des règles

Le tableau des résultats des règles enregistre le résultat de réussite ou d'échec pour chaque règle évaluée lors d'une analyse de la qualité des données.

Colonne Type Description
dq_result_id CHAÎNE Identifiant unique pour le résultat de qualité des données.
rule_name CHAÎNE Nom de la règle (par exemple,Rule_1).
rule_description CHAÎNE Expression DQDL pour la règle.
rule_result CHAÎNE Résultat de l'évaluation : PASS ouFAIL.
evaluation_message CHAÎNE Un message décrivant la raison de l'échec, le cas échéant.
evaluated_metrics CARTE<STRING, DOUBLE> Les métriques évaluées par la règle.
catalog_id CHAÎNE ID de catalogue de la table source.
database_name CHAÎNE Le nom de base de données de la table source.
table_name CHAÎNE Nom de la table source.
ruleset_evaluation_run_id CHAÎNE L'ID de l'évaluation exécutée.
started_on TIMESTAMP Quand l'évaluation a commencé.
completed_on TIMESTAMP Une fois l'évaluation terminée.
evaluated_rule CHAÎNE L'expression de règle évaluée après résolution des opérandes.
ruleset_name CHAÎNE Nom de l'ensemble de règles qui a produit ce résultat.

Tableau des résultats du profilage

Le tableau suivant décrit les colonnes du tableau des résultats du profilage. Ce tableau stocke les statistiques scalaires collectées par les analyseurs et les règles (telles que MeanStandardDeviation, etCompleteness). AWS Glue Data Quality stocke les statistiques de distribution dans un tableau de résultats de distribution distinct.

Colonne Type Description
profile_id CHAÎNE Identifiant unique pour le profil de qualité des données.
statistic_id CHAÎNE Identifiant unique pour la statistique.
statistic_name CHAÎNE Nom de la statistique (par exempleMean,Completeness)
evaluation_level CHAÎNE Niveau auquel la statistique est évaluée :Dataset,Column, ouMulticolumn.
statistics_value DOUBLE La valeur scalaire de la statistique.
statistic_properties CARTE<STRING, STRING> Propriétés supplémentaires de la statistique.
columns_referenced MATRICE <STRING> Les colonnes référencées par la statistique.
referenced_datasets MATRICE <STRING> Ensembles de données référencés pour la statistique.
column_name CHAÎNE Le nom de la colonne cible.
dq_result_id CHAÎNE Identifiant des résultats relatifs à la qualité des données.
started_on TIMESTAMP Quand l'évaluation a commencé.
completed_on TIMESTAMP Une fois l'évaluation terminée.
stored_on TIMESTAMP Quand l'enregistrement a été écrit sur la table.
catalog_id CHAÎNE ID de catalogue de la table source.
database_name CHAÎNE Nom de base de données de la table source.
table_name CHAÎNE Nom de la table source.
region CHAÎNE AWS Région.
account_id CHAÎNE AWS ID de compte.
ruleset_evaluation_run_id CHAÎNE L'ID de l'évaluation exécutée.

Tableau des résultats de distribution

Le tableau suivant décrit les colonnes du tableau des résultats de distribution. Les résultats de distribution sont stockés séparément des statistiques de profilage scalaire, avec une ligne par compartiment ou catégorie. Vous pouvez configurer cette table dans le ProfilingResults.DistributionResults bloc.

Colonne Type Description
statistic_id CHAÎNE Identifiant unique pour la statistique de distribution.
column_name CHAÎNE La colonne source (par exemple, « âge » ou « département »).
data_type CHAÎNE Type de données de la colonne (par exemple, "LongType«," StringType «).
num_bins INT Nombre de bacs utilisés pour la distribution.
bin_index INT Position de la poubelle sur la base 0.
bin_label CHAÎNE Pour les colonnes catégorielles : la valeur distincte. NULL pour les colonnes numériques.
bin_lower_bound CHAÎNE Pour les colonnes numériques : le bord inférieur du bac. NULL pour les colonnes catégorielles.
bin_upper_bound CHAÎNE Pour les colonnes numériques : le bord supérieur du bac. NULL pour les colonnes catégorielles.
bin_count BIGINT Nombre de fréquences pour ce bac.
null_count INT Nombre de valeurs NULL exclues de la distribution. Même valeur sur chaque ligne pour une statistique donnée au cours d'une exécution. NULL en l'absence de valeurs nulles.
tail_count INT Fréquence agrégée des valeurs catégorielles au-delà des 20 premières. Même valeur sur chaque ligne pour une statistique donnée au cours d'une exécution. NULL pour les histogrammes numériques.
profile_id CHAÎNE Identifiant de profil.
dq_result_id CHAÎNE Identifiant des résultats relatifs à la qualité des données.
ruleset_evaluation_run_id CHAÎNE Identifiant de l'exécution de l'évaluation.
started_on TIMESTAMP Quand l'évaluation a commencé.
completed_on TIMESTAMP Une fois l'évaluation terminée.
stored_on TIMESTAMP Quand l'enregistrement a été écrit sur la table.
catalog_id CHAÎNE ID de catalogue de la table source.
database_name CHAÎNE Nom de base de données de la table source.
table_name CHAÎNE Nom de la table source.
region CHAÎNE AWS Région.
account_id CHAÎNE AWS ID de compte.

Row-level tableau des résultats

Le tableau suivant décrit les colonnes du tableau des résultats au niveau des lignes. Vous pouvez utiliser ce tableau pour identifier les enregistrements spécifiques qui n'ont pas respecté vos règles de qualité des données.

Colonne Type Description
Colonnes sources Varie Toutes les colonnes des données sources d'origine.
data_quality_rules_pass MATRICE <STRING> Règles qui ont été adoptées pour ce record.
data_quality_rules_fail MATRICE <STRING> Règles qui ont échoué pour cet enregistrement.
data_quality_rules_skip MATRICE <STRING> Règles qui ont été ignorées pour cet enregistrement.
data_quality_evaluation_result CHAÎNE Le résultat global de l'évaluation pour cet enregistrement : Passed ouFailed.
dq_result_id CHAÎNE Identifiant unique pour le résultat de qualité des données.
ruleset_evaluation_run_id CHAÎNE L'ID de l'évaluation exécutée.
started_on TIMESTAMP Quand l'évaluation a commencé.
completed_on TIMESTAMP Une fois l'évaluation terminée.
stored_on TIMESTAMP Quand l'enregistrement a été écrit sur la table.
catalog_id CHAÎNE ID de catalogue de la table source.
database_name CHAÎNE Nom de base de données de la table source.
table_name CHAÎNE Nom de la table source.
region CHAÎNE AWS Région.
account_id CHAÎNE AWS ID de compte.

Tableau des résultats des observations

Le tableau des résultats d'observation stocke les prévisions de détection d'anomalies pour chaque statistique à chaque exécution d'évaluation. Le tableau inclut tous les résultats des prévisions : anomalies, valeurs normales et prédictions ignorées. Cela vous permet de générer des graphiques de tendance continus avec des bandes de prédiction.

Colonne Type Description
statistic_id CHAÎNE Identifiant de la statistique surveillée.
statistic_name CHAÎNE Nom de la statistique surveillée.
prediction_outcome CHAÎNE Résultat de la détection de l'anomalie :ANOMALY,NOT_ANOMALY, ouSKIPPED.
expected_value DOUBLE La valeur attendue prévue. NULL lorsque la prédiction est ignorée.
lower_bound DOUBLE La limite inférieure de la plage prédite. NULL lorsque la prédiction est ignorée.
upper_bound DOUBLE La limite supérieure de la plage prédite. NULL lorsque la prédiction est ignorée.
observation_message CHAÎNE Description de l'anomalie, si elle est détectée.
training_input CHAÎNE Si ce point de données est inclus dans le modèle de détection des anomalies : INCLUDED ouEXCLUDED.
ruleset_evaluation_run_id CHAÎNE L'ID de l'évaluation exécutée.
recorded_on TIMESTAMP Date à laquelle l'observation a été enregistrée.
stored_on TIMESTAMP Quand l'enregistrement a été écrit sur la table.
actual_value DOUBLE La valeur réelle observée pour la statistique.
training_status CHAÎNE État de la formation au modèle de détection d'anomalies (par exemple,PENDING,COMPLETED).
recommended_rules CHAÎNE Règles recommandées sur la base de la prédiction de détection des anomalies.
modified_rules CHAÎNE Règles modifiées avec des seuils mis à jour en fonction des prévisions.
catalog_id CHAÎNE ID de catalogue de la table source.
database_name CHAÎNE Nom de base de données de la table source.
table_name CHAÎNE Nom de la table source.
Note

Le tableau des résultats d'observation utilise un modèle d'écriture permettant d'ajouter uniquement. Lorsque vous excluez un point de données à l'aide de l'BatchPutDataQualityStatisticAnnotationAPI, une nouvelle ligne est ajoutée avec training_input set toEXCLUDED. Pour rechercher l'état le plus récent de chaque observation, utilisez l'stored_onhorodatage pour identifier la ligne la plus récente pour chaque combinaison de statistiques et d'exécutions.

Note

Ce tableau stocke également les observations de débordement de distribution, générées lorsque plus de 2 % des valeurs se situent en dehors des limites des bacs gelés. Ces lignes ont statistic_name = 'Distribution' et prediction_outcome sont nulles. Le observation_message champ contient la description du débordement.

Interroger les résultats avec

Une fois l'évaluation de la qualité des données terminée, vous pouvez interroger les tableaux de résultats directement à l'aide de. Les exemples suivants illustrent les modèles de requêtes courants.

Exemple : recherche de règles ayant échoué pour une exécution spécifique

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;

Exemple : Afficher les statistiques de profilage au fil du temps

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;

Exemple : identifier les lignes qui n'ont pas répondu à une règle spécifique

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

Exemple — Afficher un histogramme numérique

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;

Exemple — Afficher une distribution de valeurs catégorielles

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;

Exemple — Suivez la fréquence des catégories au fil du temps

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

Exemple : Afficher les tendances de détection des anomalies à l'aide de bandes de prédiction

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;

Exemple : demande l'état de la dernière observation après les annotations

Étant donné que le tableau des résultats d'observation utilise un modèle d'ajout uniquement, les annotations d'exclusion ajoutent de nouvelles lignes. Utilisez une requête de déduplication pour obtenir le dernier état de chaque observation :

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;

Considérations

Tenez compte des considérations suivantes lorsque vous écrivez des résultats de qualité des données dans les tableaux du catalogue de données :

  • AWS Glue Data Quality stocke les résultats au format Apache Iceberg, qui permet d'effectuer efficacement des requêtes temporelles et de procéder à l'élagage des partitions.

  • Une seule table de résultats peut stocker les résultats de plusieurs tables sources. Utilisez les colonnescatalog_id,database_name, et table_name partitionner pour filtrer les résultats pour une source spécifique.

  • AWS Glue Data Quality écrit les résultats des observations de manière asynchrone une fois l'exécution de l'évaluation terminée. Il peut y avoir un bref délai avant que les observations apparaissent dans le tableau.

  • Pour les statistiques de distribution dans le tableau des résultats de distribution, chaque compartiment ou catégorie est stocké dans une ligne distincte. Par exemple, un histogramme comportant 20 cases génère 20 lignes dans le tableau correspondant à cette statistique.