

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.

# AWS Glue Qualité des données
<a name="glue-data-quality"></a>

AWS Glue La qualité des données vous permet de mesurer et de surveiller la qualité de vos données afin de prendre de bonnes décisions commerciales. Construit sur le DeeQu framework open source, AWS Glue Data Quality fournit une expérience gérée et sans serveur. AWS Glue Data Quality fonctionne avec le langage DQDL (Data Quality Definition Language), qui est un langage spécifique au domaine que vous utilisez pour définir des règles de qualité des données. Pour en savoir plus sur le langage DQDL et les types de règles pris en charge, consultez [Référence DQDL (Data Quality Definition Language)](dqdl.md).

Pour plus d'informations sur les produits et les tarifs, consultez la page de service relative à [AWS Glue Data Quality](https://aws.amazon.com/glue/features/data-quality).

## Avantages et fonctionnalités clés
<a name="glue-data-quality-key-features"></a>

 Les avantages et les principales caractéristiques de la qualité AWS Glue des données sont les suivants : 
+  **Sans serveur** : il n’y a pas d’installation, de correctifs ou de maintenance. 
+  **Démarrez rapidement** — AWS Glue Data Quality analyse rapidement vos données et crée des règles de qualité pour vous. Vous pouvez commencer en deux clics : « Créer des règles de qualité des données → Recommander des règles ». 
+  **Détectez les problèmes de qualité des données** : utilisez l'apprentissage automatique (ML) pour détecter les anomalies et les problèmes de qualité des hard-to-detect données. 
+  **Improvisez vos règles** : avec plus de 25 règles out-of-the-box DQ à partir de laquelle vous pouvez commencer, vous pouvez créer des règles adaptées à vos besoins spécifiques. 
+  **Évaluer la qualité et prendre des décisions métier en toute confiance** : une fois les règles évaluées, vous obtenez un score de qualité des données qui vous donne une vue d'ensemble de l'état de vos données. Utilisez le score de qualité des données pour prendre des décisions métier en toute confiance. 
+  **Concentrez-vous sur les données erronées** : la qualité AWS Glue des données vous aide à identifier les enregistrements exacts qui ont entraîné une baisse de vos scores de qualité. Identifiez-les facilement, mettez-les en quarantaine et corrigez-les. 
+  **Payez au fur** et à mesure : aucune licence annuelle n'est nécessaire pour utiliser AWS Glue Data Quality. 
+  **Pas de blocage** : AWS Glue Data Quality repose sur l'open source DeeQu, ce qui vous permet de conserver les règles que vous créez dans un langage ouvert. 
+  **Contrôles de qualité des données** : vous pouvez appliquer des contrôles de qualité des données sur Data Catalog et sur les pipelines ETL AWS Glue, ce qui vous permet de gérer la qualité des données au repos et en transit. 
+  **Détection de la qualité des données basée sur le ML** : utilisez l'apprentissage automatique (ML) pour détecter les anomalies et les problèmes de qualité hard-to-detect des données. 
+  **Langage ouvert pour exprimer les règles** : garantit que les règles de qualité des données sont créées de manière cohérente et simple. Les utilisateurs professionnels peuvent facilement exprimer les règles de qualité des données dans un langage clair qu’ils peuvent comprendre. Pour les ingénieurs, ce langage offre la flexibilité nécessaire pour générer du code, mettre en œuvre un contrôle de version cohérent et automatiser les déploiements. 

## Comment ça marche
<a name="glue-data-quality-how-it-works"></a>

Il existe deux points d'entrée pour la qualité AWS Glue des données : les jobs AWS Glue ETL AWS Glue Data Catalog et les jobs. Cette section fournit un aperçu des cas d'utilisation et des AWS Glue fonctionnalités pris en charge par chaque point d'entrée.

### Qualité des données pour AWS Glue Data Catalog
<a name="glue-data-quality-for-data-catalog"></a>

AWS Glue Data Quality évalue les objets stockés dans le. AWS Glue Data Catalog Cela permet aux non-codeurs de configurer facilement des règles de qualité des données. Ces personas incluent les gestionnaires de données et des analystes métier.



[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/rK1NGQu4Sgg/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/rK1NGQu4Sgg)




Vous pouvez choisir cette option pour les cas d'utilisation suivants :
+ Vous souhaitez effectuer des tâches de qualité des données sur des jeux de données que vous avez déjà catalogués dans AWS Glue Data Catalog.
+ Vous travaillez sur la gouvernance des données et avez besoin d'identifier ou d'évaluer en permanence les problèmes de qualité des données dans votre lac de données.

Vous pouvez gérer la qualité des données du catalogue de données à l'aide des interfaces suivantes :
+ La console AWS Glue de gestion
+ AWS Glue APIs

Pour commencer à utiliser AWS Glue Data Quality for the AWS Glue Data Catalog see[Premiers pas avec AWS Glue Data Quality pour le Data Catalog](data-quality-getting-started.md).

### Qualité des données pour les tâches AWS Glue ETL
<a name="glue-data-quality-for-etl"></a>

AWS Glue La qualité des données pour les tâches AWS Glue ETL vous permet d'effectuer des tâches *proactives* de qualité des données. Les tâches proactives vous aident à identifier et à filtrer les données défectueuses *avant* de charger un jeu de données dans votre lac de données.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/DUd5s_CFtBM/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/DUd5s_CFtBM)


Vous pouvez choisir la qualité des données pour les tâches ETL dans les cas d'utilisation suivants :
+ Vous souhaitez intégrer des tâches de qualité des données dans vos tâches ETL
+ Vous souhaitez écrire du code qui définit les tâches de qualité des données dans les scripts ETL
+ Vous souhaitez gérer la qualité des données qui circulent dans vos pipelines de données visuels

Vous pouvez gérer la qualité des données pour les tâches ETL à l'aide des interfaces suivantes :
+ AWS Glue Studio, AWS Glue Studio carnets de notes et sessions AWS Glue interactives
+ AWS Glue bibliothèques pour les scripts ETL
+ AWS Glue APIs

Pour commencer à utiliser la qualité des données pour les tâches ETL, consultez [Tutorial: Getting started with Data Quality](https://docs.aws.amazon.com/glue/latest/ug/gs-data-quality-chapter.html) dans le *Guide de l'utilisateur AWS Glue Studio *.

### Comparaison entre la qualité des données du catalogue de données et la qualité des données des tâches ETL
<a name="glue-data-quality-compare"></a>

Ce tableau fournit un aperçu des fonctionnalités prises en charge par chaque point d'entrée pour AWS Glue Data Quality.


****  

| Fonctionnalité | Qualité des données pour le catalogue de données | Qualité des données pour les tâches ETL | 
| --- | --- | --- | 
| Sources de données | Amazon S3 Amazon Redshift, sources JDBC compatibles avec le catalogue de données et formats de lacs de données transactionnels tels qu'Apache Iceberg, Apache Hudi et Delta Lake. AWS Lake Formation les formats OTF gérés sont également pris en charge avec certaines limitations. Amazon Athena les vues cataloguées dans le catalogue de AWS Glue données ne sont pas prises en charge. Veuillez consulter [Types de sources pris en charge](data-quality-getting-started.md#data-quality-get-started-supported-source-types).  | Toutes les sources de données sont prises en charge par AWS Glue, y compris les connecteurs personnalisés et les connecteurs tiers. | 
| Recommandations règles de la qualité des données | Pris en charge | Non pris en charge | 
| Rédiger et appliquer les règles DQDL | Pris en charge | Pris en charge | 
| Auto scaling (Mise à l'échelle automatique) | Non pris en charge | Pris en charge | 
| AWS Glue Support flexible | Non pris en charge | Pris en charge | 
| Planification | Pris en charge lors de l'évaluation des règles de la qualité des données et via Step Functions. | Pris en charge lors de l'utilisation des Step Functions et des flux de travail. | 
| Identification des enregistrements ayant échoué aux contrôles de qualité des données | Non pris en charge | Pris en charge | 
| Intégration à Amazon EventBridge | Pris en charge | Pris en charge | 
| Intégration à AWS Cloudwatch | Pris en charge | Pris en charge | 
| Écrire les résultats de la qualité des données dans Amazon S3 | Pris en charge | Pris en charge | 
| Qualité de données incrémentielle | Pris en charge par le pushdown de prédicats | Pris en charge par les AWS Glue signets | 
| AWS CloudFormation soutien | Pris en charge | Pris en charge | 
| Détection des anomalies basée sur le ML | Non pris en charge | Pris en charge | 
| Règles dynamiques | Non pris en charge | Pris en charge | 

## Considérations
<a name="glue-data-quality-considerations"></a>

Tenez compte des éléments suivants avant d'utiliser AWS Glue Data Quality :
+ Les règles de qualité des données ne peuvent pas évaluer les sources de données imbriquées ou de type liste. Consultez [Aplatissement de structs imbriqués](transforms-flatten.md). 

## Terminologie
<a name="data-quality-terms"></a>

La liste suivante définit les termes relatifs à la qualité AWS Glue des données.

**DQDL (Data Quality Definition Language)**  
Langage spécifique à un domaine que vous pouvez utiliser pour rédiger des règles de qualité AWS Glue des données.   
Pour en savoir plus sur DQDL, consultez le guide [Référence DQDL (Data Quality Definition Language)](dqdl.md).

**qualité des données **  
Décrit dans quelle mesure un ensemble de données répond à son objectif spécifique. AWS Glue La qualité des données évalue les règles par rapport à un ensemble de données afin de mesurer la qualité des données. Chaque règle vérifie des caractéristiques particulières comme l'actualisation ou l'intégrité des données. Pour quantifier la qualité des données, vous pouvez utiliser un *score de qualité des données*.

**score de qualité des données**  
Pourcentage de règles de qualité des données qui sont satisfaites (aboutissent à un résultat vrai) lorsque vous évaluez un ensemble de règles avec AWS Glue Data Quality.

**règle**  
Expression DQDL qui recherche une caractéristique spécifique dans vos données et renvoie une valeur booléenne. Pour de plus amples informations, veuillez consulter [Structure des règles](dqdl.md#dqdl-syntax-rule-structure).

**analyseur**  
Expression DQDL qui rassemble des statistiques de données. Un analyseur collecte des statistiques de données qui peuvent être utilisées par les algorithmes de machine learning pour détecter les anomalies et les problèmes de qualité hard-to-detect des données au fil du temps.

**jeu de règles**  
 AWS Glue Ressource qui comprend un ensemble de règles de qualité des données. Un jeu de règles doit être associé à une table dans AWS Glue Data Catalog. Lorsque vous enregistrez un jeu de règles, AWS Glue lui attribue un Amazon Resource Name (ARN).

**score de qualité des données**  
Pourcentage de règles de qualité des données qui sont respectées (génèrent « true ») lorsque vous évaluez un jeu de règles avec AWS Glue Data Quality.

**observation**  
Un aperçu non confirmé généré par AWS Glue en analysant les statistiques de données rassemblées à partir de règles et d’analyseurs au fil du temps.

## Restrictions
<a name="data-quality-limits"></a>

 AWS Glue Limites du service de qualité des données : 
+  Un ensemble de règles peut contenir 2 000 règles. Si vos ensembles de règles sont plus importants, nous vous recommandons de les diviser en plusieurs ensembles de règles. 
+  La taille de l’ensemble de règles est de 65 Ko. Si vos ensembles de règles sont plus importants, nous vous recommandons de les diviser en plusieurs ensembles de règles. 
+  AWS Glue Data Quality collecte des statistiques lorsque vous créez une règle ou un analyseur. Le stockage de ces statistiques est gratuit. Cependant, il existe une limite de 100 000 statistiques par compte, et ces statistiques seront conservées pendant un maximum de deux ans. 

## Notes de mise à jour relatives à la qualité AWS Glue des données
<a name="data-quality-release-notes"></a>

Cette rubrique décrit les fonctionnalités introduites dans AWS Glue Data Quality.

### Disponibilité générale : nouvelles fonctionnalités
<a name="data-quality-release-notes-ga"></a>

Les nouvelles fonctionnalités suivantes sont disponibles avec la disponibilité générale de AWS Glue Data Quality :
+ La capacité d'identifier les enregistrements ayant échoué aux contrôles de qualité des données est désormais prise en charge dans AWS Glue Studio
+ Nouveaux types de règles de qualité des données tels que la validation de l'intégrité référentielle des données entre deux jeux de données, la comparaison des données entre deux jeux de données et les vérifications du type de données.
+ Expérience utilisateur améliorée dans AWS Glue Data Catalog
+ Prise en charge d'Apache Iceberg, d'Apache Hudi et de Delta Lake
+ Prise en charge d'Amazon Redshift
+ Notification simplifiée avec Amazon EventBridge
+ AWS CloudFormation support pour la création d'ensembles de règles
+ Améliorations des performances : option de mise en cache dans ETL et AWS Glue Studio pour des performances plus rapides lors de l'évaluation de la qualité des données

### 27 novembre 2023 (aperçu)
<a name="data-quality-release-notes-preview"></a>
+  Les fonctionnalités de détection d’anomalies basées sur le ML sont désormais disponibles dans AWS Glue ETL et AWS Glue Studio. Grâce à cela, vous pouvez désormais détecter les anomalies et les problèmes de qualité des hard-to-detect données 
+  [Les règles dynamiques vous permettent de fournir des seuils dynamiques (ex :`RowCount> avg(last(10))`)](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-dynamic-rules) 

### 12 mars 2024
<a name="data-quality-release-notes-mar12"></a>
+  Améliorations DQDL 
  +  [Prise en charge de mots clés tels que NULL, BLANKS, WHITESPACES\$1ONLY](dqdl.md#dqdl-keywords-null-empty-whitespaces_only) 
  +  [Options permettant de spécifier la manière dont la qualité AWS Glue des données doit gérer les règles composites](dqdl.md#dqdl-syntax-rule-composition) 
  +  [ ColumnValues le type de règle n'autorisera pas le transfert de valeurs NULL lors des comparaisons](dqdl.md#dqdl-keywords-null-empty-whitespaces_only) 
  +  [Prise en charge de l’opérateur NOT dans DQDL](dqdl.md#dqdl-syntax-rule-expressions) 

### 26 juin 2024
<a name="data-quality-release-notes-jun26"></a>
+ Améliorations DQDL
  + DQDL prend désormais en charge la [clause Where](dqdl.md#dqdl-filtering-data-in-dqdl) afin que vous puissiez filtrer les données avant d’appliquer les règles DQ.

### 7 août 2024
<a name="data-quality-release-notes-aug7"></a>
+ La détection des anomalies et les règles dynamiques sont désormais généralement disponibles

### 22 novembre 2024
<a name="data-quality-release-notes-nov22-2024"></a>
+  [Les règles composites complexes vous permettent de créer des règles métier plus complexes avec une prise en charge imbriquée.](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-syntax-rule-composition) 
+  Nouveaux types de règles pour gérer la qualité des données de vos fichiers 
  +  [ FileFreshness ](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types-FileFreshness) 
  +  [ FileSize ](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types-FileSize) 
  +  [ FileUniqueness ](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types-FileUniqueness) 
  +  [ FileMatch ](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types-FileMatch) 
+ Contrôles de qualité des données par défaut dans les tâches ETL visuel

### 6 déc. 2024
<a name="data-quality-release-notes-dec6-2024"></a>
+ AWS Glue Data Quality prend désormais en charge Amazon SageMaker AI LakeHouse les tables et les tables Iceberg, Delta et HUDI AWS Lake Formation gérées dans AWS Glue ETL 5.0.

### 7 juillet 2025
<a name="data-quality-release-notes-jul7-2025"></a>
+  AWS Glue Qualité des données ; prend désormais en charge les tables Amazon S3, RMS, Lakehouse et les tables Iceberg AWS Lake Formation gérées dans Data Catalog. AWS Glue 

### 21 novembre 2025
<a name="data-quality-release-notes-nov21-2025"></a>
+ AWS Glue Data Quality prend désormais en charge l'étiquetage des règles pour améliorer les rapports. Vous pouvez organiser et analyser les résultats de qualité des données de manière plus efficace en interrogeant les résultats à l'aide d'étiquettes spécifiques afin d'identifier les règles défaillantes au sein de catégories particulières, de compter les résultats des règles par équipe ou par domaine et de créer des rapports ciblés pour les différentes parties prenantes. Pour de plus amples informations, veuillez consulter [Étiquettes](dqdl.md#dqdl-labels).
+ AWS Glue Data Quality prend désormais en charge les constantes dans le DQDL, ce qui vous permet de définir des valeurs constantes et de les référencer tout au long de votre script. Cela permet d'éviter les problèmes liés aux limites de taille des requêtes lors de l'utilisation d'instructions SQL volumineuses. Pour de plus amples informations, veuillez consulter [Constantes](dqdl.md#dqdl-constants).

# Détection d’anomalies dans Qualité des données d’AWS Glue
<a name="data-quality-anomaly-detection"></a>

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/IWHzrupqlGM/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/IWHzrupqlGM)




 Les ingénieurs gèrent des centaines de pipelines de données simultanément. Chaque pipeline peut extraire des données de différentes sources et les charger dans le lac de données ou d’autres référentiels de données. Pour garantir la fourniture de données de haute qualité pour la prise de décision, ils établissent des règles de qualité des données. Ces règles évaluent les données sur la base de critères fixes reflétant l’état actuel de l’activité. Cependant, lorsque l’environnement métier change, les propriétés des données changent, ce qui rend ces critères fixes obsolètes et entraîne une mauvaise qualité des données. 

 Par exemple, un ingénieur des données d'une entreprise de vente au détail a établi une règle qui valide que les ventes quotidiennes doivent dépasser un one-million-dollar certain seuil. Après quelques mois, les ventes quotidiennes ont dépassé les deux millions de dollars, rendant ainsi le seuil obsolète. L’ingénieur des données n’a pas pu mettre à jour les règles pour refléter les derniers seuils en raison de l’absence de notification et des efforts nécessaires pour analyser et mettre à jour manuellement la règle. Plus tard dans le mois, les utilisateurs métier ont remarqué une baisse de 25 % de leurs ventes. Après des heures d’enquête, les ingénieurs de données ont découvert qu’un pipeline ETL chargé d’extraire les données de certains magasins avait échoué sans générer d’erreurs. La règle dont les seuils étaient obsolètes a continué de fonctionner correctement sans que ce problème ne soit détecté. 

 Par ailleurs, des alertes proactives capables de détecter ces anomalies auraient pu permettre aux utilisateurs de repérer ce problème. En outre, le suivi de la saisonnalité dans l’activité peut mettre en évidence d’importants problèmes de qualité des données. Par exemple, les ventes au détail peuvent être les plus élevées le week-end et pendant les fêtes de fin d’année, alors qu’elles sont relativement faibles en semaine. Toute divergence par rapport à ce schéma peut indiquer des problèmes de qualité des données ou des changements dans le contexte métier. Les règles de qualité des données ne peuvent pas détecter les modèles saisonniers, car cela nécessite des algorithmes avancés capables de tirer des leçons des modèles précédents pour saisir la saisonnalité afin de détecter les écarts. 

 Enfin, les utilisateurs estiment qu’il est compliqué de créer et de maintenir des règles en raison de la nature technique du processus de création de règles et du temps nécessaire à leur création. Par conséquent, ils préfèrent d’abord explorer les informations relatives aux données avant de définir des règles. Les clients doivent pouvoir identifier facilement les anomalies, ce qui leur permet de détecter de manière proactive les problèmes de qualité et de prendre des décisions métier en toute confiance. 

## Comment ça marche
<a name="data-quality-anomaly-detection-how-it-works"></a>

**Note**  
 La détection des anomalies n'est prise en charge que dans AWS Glue ETL. Elle n’est pas prise en charge dans la qualité des données basée sur le catalogue de données. 

![\[La capture d’écran montre le processus de détection des anomalies liées à la qualité des données.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-anomaly-detection-process.png)


 AWS Glue Data Quality combine la puissance de la qualité des données basée sur des règles et des fonctionnalités de détection des anomalies pour fournir des données de haute qualité. Pour commencer, configurez d’abord les règles et les analyseurs, puis activez la détection des anomalies. 

### Rules
<a name="data-quality-anomaly-rules"></a>

 **Règles** : les règles expriment les attentes à l’égard de vos données dans un langage ouvert appelé DQDL (Data Quality Definition Language). Un exemple de règle est illustré ci-dessous. Cette règle sera efficace s’il n’y a aucune valeur vide ou NULL dans la colonne `passenger\$1count` : 

```
Rules = [
    IsComplete "passenger_count"
]
```

### Analyseurs
<a name="data-quality-anomaly-analyzers"></a>

 Dans les situations où vous connaissez les colonnes critiques, mais que vous ne connaissez pas suffisamment les données pour écrire des règles spécifiques, vous pouvez surveiller ces colonnes à l’aide d’analyseurs. Les analyseurs permettent de recueillir des statistiques de données sans définir de règles explicites. Un exemple de configuration des analyseurs est illustré ci-dessous : 

```
Analyzers = [
AllStatistics "fare_amount",
DistinctValuesCount "pulocationid",
RowCount
]
```

 Dans cet exemple, trois analyseurs sont configurés : 

1.  Le premier analyseur, `AllStatistics « fare\$1amount »`, capturera toutes les statistiques disponibles pour le champ `fare\$1amount`. 

1.  Le second analyseur, DistinctValuesCount « pulocationid », capturera le nombre de valeurs distinctes dans la colonne « pulocationid ». 

1.  Le troisième analyseur, `RowCount`, capturera le nombre total d'enregistrements de l'ensemble de données. 

 Les analyseurs constituent un moyen simple de recueillir des statistiques de données pertinentes sans définir de règles complexes. En surveillant ces statistiques, vous pouvez obtenir des informations sur la qualité des données et identifier les problèmes ou les anomalies potentiels qui peuvent nécessiter une enquête plus approfondie ou la création de règles spécifiques. 

### Statistiques des données
<a name="data-quality-anomaly-data-statistics"></a>

 Analyzers et Rules in AWS Glue Data Quality collectent des statistiques de données, également appelées profils de données. Ces statistiques fournissent des informations sur les caractéristiques et la qualité de vos données. Les statistiques collectées sont stockées au fil du temps au sein du service AWS Glue, ce qui vous permet de suivre et d'analyser les modifications de vos profils de données. 

 Vous pouvez facilement récupérer ces statistiques et les écrire sur Amazon S3 pour une analyse plus approfondie ou un stockage à long terme en invoquant le code approprié APIs. Cette fonctionnalité vous permet d’intégrer le profilage des données dans vos flux de travail de traitement des données et d’exploiter les statistiques collectées à diverses fins, telles que le suivi de la qualité des données et la détection des anomalies. 

 En stockant les profils de données dans Amazon S3, vous pouvez tirer parti de la capacité de mise à l’échelle, de la durabilité et de la rentabilité du service de stockage d’objets d’Amazon. En outre, vous pouvez tirer parti d'autres AWS services ou d'outils tiers pour analyser et visualiser les profils de données, ce qui vous permet de mieux comprendre la qualité de vos données et de prendre des décisions éclairées en matière de gestion et de gouvernance des données. 

 Voici un exemple de statistiques de données stockées au fil du temps. 

![\[La capture d’écran montre un graphique linéaire des statistiques sur la qualité des données au fil du temps.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-data-statistics-over-time.png)


**Note**  
 AWS Glue Data Quality ne collectera les statistiques qu'une seule fois, même si vous disposez à la fois de **Rule** et d'**Analyzer** pour les mêmes colonnes, ce qui rend le processus de génération de statistiques efficace. 

### Détection des anomalies
<a name="data-quality-anomaly-observation-detection"></a>

 AWS Glue Data Quality nécessite un minimum de trois points de données pour détecter les anomalies. Le service utilise un algorithme de machine learning pour tirer des leçons des tendances passées, puis prévoir les valeurs futures. Lorsque la valeur réelle ne se situe pas dans la plage prévue, AWS Glue Data Quality crée une observation d'anomalie. Elle offre une représentation visuelle de la valeur réelle et des tendances. Quatre valeurs sont affichées sur le graphique ci-dessous. 

![\[La capture d’écran montre un graphique linéaire des événements de détection d’anomalies de qualité des données au fil du temps.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-anomaly-detection-trend.png)


1.  La statistique réelle et son évolution dans le temps. 

1.  Une tendance dérivée en tirant des leçons de la tendance réelle. Cette donnée est utile pour comprendre l’orientation de la tendance. 

1.  Limite supérieure possible pour la statistique. 

1.  Limite inférieure possible pour la statistique. 

1.  Règles de qualité des données recommandées permettant de détecter ces problèmes à l’avenir. 

 Quelques points importants sont à noter concernant les anomalies : 
+  Lorsque des anomalies sont générées, les scores de qualité des données ne sont pas affectés. 
+  Lorsqu’une anomalie est détectée, elle est considérée comme normale pour les exécutions suivantes. L’algorithme de machine learning considérera cette valeur anormale comme entrée, sauf si elle est explicitement exclue. 

### Réentraînement
<a name="data-quality-anomaly-detection-retraining"></a>

 Il est essentiel de réentraîner le modèle de détection des anomalies pour détecter les bonnes anomalies. Lorsque des anomalies sont détectées, AWS Glue Data Quality inclut l'anomalie dans le modèle en tant que valeur normale. Pour garantir le bon fonctionnement de la détection des anomalies, il est important de fournir un feedback en reconnaissant ou en rejetant l'anomalie. AWS Glue Data Quality fournit des mécanismes à la fois dans AWS Glue Studio et APIs pour fournir des commentaires au modèle. Pour en savoir plus, consultez la documentation sur la configuration de la [détection des anomalies dans les pipelines AWS Glue ETL](data-quality-configuring-anomaly-detection-etl-jobs.md). 

## Détails de l’algorithme de détection des anomalies
<a name="data-quality-anomaly-detection-algorithm"></a>
+  L’algorithme de détection des anomalies examine les statistiques des données au fil du temps. L’algorithme prend en compte tous les points de données disponibles et ignore les statistiques explicitement exclues. 
+  Ces statistiques de données sont stockées dans le service AWS Glue et vous pouvez fournir des AWS KMS clés pour les chiffrer. Reportez-vous au guide de sécurité pour savoir comment fournir des AWS KMS clés pour chiffrer les statistiques de AWS Glue Data Quality. 
+  La composante temporelle est cruciale pour l’algorithme de détection des anomalies. Sur la base des valeurs passées, AWS Glue Data Quality détermine les limites supérieure et inférieure. Au cours de cette détermination, elle prend en compte la composante temporelle. Les limites seront différentes pour les mêmes valeurs sur un intervalle d’une minute, un intervalle horaire ou un intervalle quotidien. 

### Capture la saisonnalité
<a name="data-quality-anomaly-capturing-seasonality"></a>

 AWS L'algorithme de détection des anomalies de Glue Data Quality peut capturer les tendances saisonnières. Par exemple, il peut comprendre que les schémas des jours de semaine diffèrent des schémas du week-end. C'est ce que montre l'exemple ci-dessous, où AWS Glue Data Quality détecte une tendance saisonnière dans les valeurs des données. Vous n’avez pas besoin de faire quoi que ce soit pour activer cette fonctionnalité. Au fil du temps, AWS Glue Data Quality apprend les tendances saisonnières et détecte les anomalies lorsque ces tendances se cassent. 

![\[La capture d’écran montre un onglet de qualité des données présentant des anomalies lors de la capture des tendances saisonnières.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-capturing-seasonality.png)


### Cost
<a name="data-quality-anomaly-detection-cost"></a>

 Vous serez facturé en fonction du temps nécessaire pour détecter les anomalies. Chaque statistique est facturée 1 DPU pour le temps nécessaire à la détection des anomalies. Reportez-vous à [Tarification AWS Glue](https://aws.amazon.com/glue/pricing/) pour des exemples détaillés. 

### Considérations clés
<a name="data-quality-anomaly-detection-considerations"></a>

 Le stockage des statistiques est gratuit. Cependant, il existe une limite de 100 000 statistiques par compte. Ces statistiques seront conservées pendant deux ans au maximum. 

# Configurer les autorisations IAM pour AWS Glue Data Quality
<a name="data-quality-authorization"></a>

Cette rubrique fournit des informations pour vous aider à comprendre les actions et les ressources qu'un administrateur IAM peut utiliser dans le cadre d'une politique Gestion des identités et des accès AWS (IAM) pour AWS Glue Data Quality. Il inclut également des exemples de politiques IAM avec les autorisations minimales dont vous avez besoin pour utiliser AWS Glue Data Quality with the AWS Glue Data Catalog.

Pour plus d'informations sur la sécurité dans AWS Glue, consultez[Sécurité dans AWS Glue](security.md).

## Autorisations IAM pour AWS Glue Data Quality
<a name="data-quality-authorization-permissions"></a>

Le tableau suivant répertorie les autorisations dont les utilisateurs ont besoin pour effectuer des opérations spécifiques avec la qualité des données d' AWS Glue. Pour définir une autorisation précise pour AWS Glue Data Quality, vous pouvez spécifier ces actions dans l'`Action`élément d'une déclaration de politique IAM. 


**AWS Actions de Glue Data Quality**  

| Action | Description | Types de ressources | 
| --- | --- | --- | 
| glue:CreateDataQualityRuleset | Accorde l'autorisation de créer un jeu de règles de qualité des données. | ::dataQualityRuleset/<name> | 
| glue:DeleteDataQualityRuleset | Accorde l'autorisation de supprimer un jeu de règles de qualité des données. | ::dataQualityRuleset/<name> | 
| glue:GetDataQualityRuleset | Accorde l'autorisation de récupérer un jeu de règles de qualité des données. | ::dataQualityRuleset/<name> | 
| glue:ListDataQualityRulesets | Accorde l'autorisation de récupérer tous les jeux de règles de qualité des données. | ::dataQualityRuleset/\$1 | 
| glue:UpdateDataQualityRuleset | Accorde l'autorisation de mettre à jour un jeu de règles de qualité des données. | ::dataQualityRuleset/<name> | 
| glue:GetDataQualityResult |  Accorde l'autorisation de récupérer le résultat d'une exécution de tâche liée à la qualité des données. Cette action IAM fournit également des autorisations aux API suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/data-quality-authorization.html)  | ::dataQualityRuleset/<name> | 
| glue:ListDataQualityResults | Accorde l'autorisation de récupérer tous les résultats d'exécution de tâches liées à la qualité des données. | ::dataQualityRuleset/\$1 | 
| glue:CancelDataQualityRuleRecommendationRun | Accorde l'autorisation d'arrêter l'exécution d'une tâche de recommandation sur la qualité des données en cours. | ::dataQualityRuleset/\$1 | 
| glue:GetDataQualityRuleRecommendationRun | Accorde l'autorisation de récupérer l'exécution d'une tâche de recommandation sur la qualité des données. | ::dataQualityRuleset/\$1 | 
| glue:ListDataQualityRuleRecommendationRuns | Accorde l'autorisation de récupérer toutes les exécutions de tâches de recommandation sur la qualité des données. | ::dataQualityRuleset/\$1 | 
| glue:StartDataQualityRuleRecommendationRun | Accorde l'autorisation de démarrer l'exécution d'une tâche de recommandation sur la qualité des données. | ::dataQualityRuleset/\$1 | 
| glue:CancelDataQualityRulesetEvaluationRun | Accorde l'autorisation d'arrêter l'exécution d'une tâche sur la qualité des données en cours. | ::dataQualityRuleset/\$1 | 
| glue:GetDataQualityRulesetEvaluationRun | Accorde l'autorisation de récupérer l'exécution de tâches liées à la qualité des données. | ::dataQualityRuleset/\$1 | 
| glue:ListDataQualityRulesetEvaluationRuns | Accorde l'autorisation de récupérer toutes les exécutions de tâches liées à la qualité des données. | ::dataQualityRuleset/\$1 | 
| glue:StartDataQualityRulesetEvaluationRun | Accorde l'autorisation de démarrer l'exécution d'une tâche liée à la qualité des données. | ::dataQualityRuleset/<name> | 
| glue:PublishDataQuality | Accorde l’autorisation de publier des résultats sur la qualité des données. | ::dataQualityRuleset/<name> | 
| glue:GetDataQualityModel | Accorde l’autorisation de récupérer un modèle de qualité des données. | ::dataQualityRuleset/<name>, ::job/<name>  | 
| glue:GetDataQualityModelResult | Accorde l’autorisation de récupérer les résultats d’un modèle de qualité des données. | ::dataQualityRuleset/<name>, ::job/<name>  | 
| glue:PutDataQualityStatisticAnnotation |  Accorde l’autorisation d’ajouter des annotations aux statistiques. Cette action IAM fournit également des autorisations aux API suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/data-quality-authorization.html)  | ::dataQualityRuleset/<name>, ::job/<name>  | 
| glue:PutDataQualityProfileAnnotation | Accorde l’autorisation d’ajouter des annotations à toutes les statistiques d’un profil. | ::dataQualityRuleset/<name>, ::job/<name>  | 

## Configuration IAM requise pour planifier les exécutions d'évaluation
<a name="data-quality-iam-setup-evaluation-runs"></a>

### Autorisations IAM
<a name="data-quality-iam-setup-evaluation-runs-permissions"></a>

Pour exécuter des exécutions d'évaluation de la qualité des données planifiées, vous devez ajouter l'action `IAM:PassRole` à la politique d'autorisation.


**AWS EventBridge Autorisations requises par le planificateur**  

| Action | Description | Types de ressources | 
| --- | --- | --- | 
| iam:PassRole | Permet à IAM d'autoriser l'utilisateur à transmettre les rôles approuvés. | ARN du rôle utilisé pour appeler StartDataQualityRulesetEvaluationRun | 

Sans ces autorisations, l'erreur suivante se produit :

```
"errorCode": "AccessDenied"
"errorMessage": "User: arn:aws:sts::account_id:assumed-role/AWSGlueServiceRole is not 
authorized to perform: iam:PassRole on resource: arn:aws:iam::account_id:role/service-role/AWSGlueServiceRole 
because no identity-based policy allows the iam:PassRole action"
```

### Entités de confiance IAM
<a name="data-quality-iam-setup-evaluation-runs-trusted-entities"></a>

Les services AWS Glue et AWS EventBridge Scheduler doivent être répertoriés dans les entités de confiance afin de créer et d'exécuter un planning. `StartDataQualityEvaluationRun`

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "glue.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "scheduler.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

## Exemple de politiques IAM
<a name="data-quality-authorization-example-policy"></a>

Un rôle IAM pour AWS Glue Data Quality nécessite les types d'autorisations suivants :
+ Autorisations pour les opérations de qualité des données de AWS Glue afin que vous puissiez obtenir les règles de qualité des données recommandées et exécuter une tâche de qualité des données par rapport à une table du catalogue de données AWS Glue. Les exemples de politiques IAM présentés dans cette section incluent les autorisations minimales requises pour les opérations de AWS Glue Data Quality.
+ Autorisations qui donnent accès à la table de votre catalogue de données et aux données sous-jacentes. Ces autorisations varient en fonction de votre cas d'utilisation. Par exemple, pour les données que vous cataloguez dans Amazon S3, les autorisations doivent inclure l'accès à Amazon S3. 
**Note**  
Vous devez configurer ces autorisations Amazon S3 en plus des autorisations décrites dans cette section.

### Autorisations minimales pour obtenir les règles de qualité des données recommandées
<a name="example-policy-get-dq-rule-recommendations"></a>

Cet exemple de politique inclut les autorisations dont vous avez besoin pour générer des règles de qualité des données recommandées. 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowGlueRuleRecommendationRunActions",
      "Effect": "Allow",
      "Action": [
        "glue:GetDataQualityRuleRecommendationRun",
        "glue:PublishDataQuality",
        "glue:CreateDataQualityRuleset"
      ],
      "Resource": "arn:aws:glue:us-east-1:111122223333:dataQualityRuleset/*"
    },
	{
     "Sid": "AllowCatalogPermissions",
     "Effect": "Allow",
     "Action": [
        "glue:GetPartitions",
        "glue:GetTable"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "AllowS3GetObjectToRunRuleRecommendationTask",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::aws-glue-*"
    },
		{
			"Sid": "AllowPublishingCloudwatchLogs",
			"Effect": "Allow",
			"Action": [
			  "logs:CreateLogStream",
			  "logs:CreateLogGroup",
			  "logs:PutLogEvents"
			],
			"Resource": "*"
    }
  ]
}
```

------

### Autorisations minimales pour exécuter une tâche liée à la qualité des données
<a name="example-policy-run-dq-task"></a>

Cet exemple de politique inclut les autorisations dont vous avez besoin pour exécuter une tâche d'évaluation de la qualité des données. 

Les instructions de politique suivantes sont facultatives et dépendent de votre cas d'utilisation :
+ `AllowCloudWatchPutMetricDataToPublishTaskMetrics` : obligatoire si vous souhaitez publier des métriques d'exécution sur la qualité des données dans Amazon CloudWatch.
+ `AllowS3PutObjectToWriteTaskResults` : obligatoire si vous souhaitez écrire des résultats d'exécution sur la qualité des données dans Amazon S3.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowGlueGetDataQualityRuleset",
      "Effect": "Allow",
      "Action": [
        "glue:GetDataQualityRuleset"
      ],
      "Resource": "arn:aws:glue:us-east-1:111122223333:dataQualityRuleset/YOUR-RULESET-NAME"
    },
    {
      "Sid": "AllowGlueRulesetEvaluationRunActions",
      "Effect": "Allow",
      "Action": [
        "glue:GetDataQualityRulesetEvaluationRun",
        "glue:PublishDataQuality"
      ],
      "Resource": "arn:aws:glue:us-east-1:111122223333:dataQualityRuleset/*"
    },
    {
      "Sid": "AllowCatalogPermissions",
      "Effect": "Allow",
      "Action": [
        "glue:GetPartitions",
        "glue:GetTable"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "AllowS3GetObjectForRulesetEvaluationRun",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::aws-glue-*"
    },
    {
      "Sid": "AllowCloudWatchPutMetricDataToPublishTaskMetrics",
      "Effect": "Allow",
      "Action": [
        "cloudwatch:PutMetricData"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "cloudwatch:namespace": "Glue Data Quality"
        }
      }
    },
    {
      "Sid": "AllowS3PutObjectToWriteTaskResults",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject*"
      ],
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
    }
  ]
}
```

------

### Autorisations minimales pour exécuter une tâche ETL liée à la qualité des données
<a name="example-policy-run-dq-etl-job"></a>

 Cet exemple de politique inclut les autorisations dont vous avez besoin pour exécuter une tâche ETL liée à la qualité des données. 

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowGluePublishDataQualityResult",
      "Effect": "Allow",
      "Action": [
        "glue:PublishDataQuality"
      ],
      "Resource": "arn:aws:glue:us-east-1:111122223333:dataQualityRuleset/*"
    },
    {
      "Sid": "AllowGlueGetDataQualityResult",
      "Effect": "Allow",
      "Action": [
        "glue:GetDataQualityResult"
      ],
      "Resource": "arn:aws:glue:us-east-1:111122223333:dataQualityRuleset/*"
    },
    {
      "Sid": "AllowGlueDataQualityStatisticAnnotation",
      "Effect": "Allow",
      "Action": [
        "glue:PutDataQualityStatisticAnnotation"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:dataQualityRuleset/*",
        "arn:aws:glue:us-east-1:111122223333::job/{JobName}"
      ]
    },
    {
      "Sid": "AllowGlueDataQualityProfileAnnotation",
      "Effect": "Allow",
      "Action": [
        "glue:PutDataQualityProfileAnnotation"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:111122223333:dataQualityRuleset/*",
        "arn:aws:glue:us-east-1:111122223333::job/{JobName}"
      ]
    }
	]
}
```

------

# Premiers pas avec AWS Glue Data Quality pour le Data Catalog
<a name="data-quality-getting-started"></a>

 Cette section de mise en route fournit des instructions qui vous aideront à faire vos premiers pas avec AWS Glue Data Quality sur la console AWS Glue. Vous apprendrez à accomplir des tâches essentielles telles que la génération de recommandations de règles portant sur la qualité des données et l'évaluation d'un jeu de règles par rapport à vos données. 

**Topics**
+ [Conditions préalables](#data-quality-prereqs)
+ [Step-by-step exemple](#data-quality-step-by-step-example)
+ [Génération de recommandations de règles](#data-quality-get-recommendations)
+ [Recommandations sur les règles de surveillance](#data-quality-monitor-recommendations)
+ [Modification des ensembles de règles recommandés](#data-quality-edit-ruleset)
+ [Création d'un ensemble de règles](#data-quality-create-ruleset)
+ [Exécution d’un jeu de règles pour évaluer la qualité des données](#data-quality-run-data-quality-task)
+ [Affichage du score de qualité des données et des résultats](#data-quality-view-results)
+ [Utilisation de requêtes de prétraitement](#data-quality-preprocessing-queries)
+ [Types de sources pris en charge](#data-quality-get-started-supported-source-types)
+ [Rubriques en relation](#data-quality-get-started-related)

## Conditions préalables
<a name="data-quality-prereqs"></a>

 Avant d'utiliser AWS Glue Data Quality, vous devez vous familiariser avec l'utilisation du Data Catalog et des Crawlers dans AWS Glue. Avec AWS Glue Data Quality, vous pouvez évaluer la qualité des tables d'une base de données Data Catalog. Vous avez également besoin des éléments suivants : 
+  Une table dans le Data Catalog pour évaluer votre ensemble de règles de qualité des données. 
+  Un rôle IAM pour AWS Glue, à fournir lors de la génération de recommandations de règles ou de l'exécution d'une tâche liée à la qualité des données. Ce rôle doit avoir l'autorisation d'accéder aux ressources dont les différents processus AWS Glue Data Quality ont besoin pour s'exécuter en votre nom. Ces ressources incluent AWS Glue Amazon S3 et CloudWatch. Pour consulter des exemples de politiques qui incluent les autorisations minimales pour AWS Glue Data Quality, consultez [Exemple de politiques IAM](data-quality-authorization.md#data-quality-authorization-example-policy). 

   Pour en savoir plus sur les rôles IAM pour AWS Glue Glue, consultez [Create an IAM policy for the AWS Glue service](https://docs.aws.amazon.com/glue/latest/dg/create-service-policy.html) et [Create an IAM role for the AWS Glue service](https://docs.aws.amazon.com/glue/latest/dg/create-an-iam-role.html). Vous pouvez également consulter la liste de toutes les autorisations AWS Glue spécifiques à la qualité des données sur la page [Authorization for AWS Glue Data Quality actions](https://docs.aws.amazon.com/glue/latest/dg/data-quality-authorization.html). 
+  Une base de données avec au moins une table qui contient une variété de données. La table utilisée dans ce didacticiel est nommée `yyz-tickets`, avec la table `tickets`. Ces données sont une collection d'informations accessibles au public provenant de la ville de Toronto concernant les contraventions de stationnement. Si vous créez votre propre table, assurez-vous qu'elle est alimentée par une variété de données valides afin d'obtenir le meilleur ensemble de règles recommandées. 

## Step-by-step exemple
<a name="data-quality-step-by-step-example"></a>

 Pour un step-by-step exemple avec des exemples de jeux de données, consultez le billet de [blog AWS Glue Data Quality](https://aws.amazon.com/blogs/big-data/getting-started-with-aws-glue-data-quality-from-the-aws-glue-data-catalog/). 

## Génération de recommandations de règles
<a name="data-quality-get-recommendations"></a>

 Les recommandations de règles facilitent l'amélioration de la qualité des données sans écrire de code. Avec la qualité des données d' AWS , vous pouvez analyser vos données, identifier les règles et créer un ensemble de règles que vous pouvez évaluer dans le cadre d'une tâche liée à la qualité des données. Les exécutions de recommandations sont automatiquement supprimées après 90 jours.

**Pour générer des recommandations de règles de qualité des données**

1.  Ouvrez la console AWS Glue à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/). 

1.  Sélectionnez **Tables** dans le volet de navigation. Choisissez ensuite la table pour laquelle vous souhaitez générer des recommandations de règles de qualité des données. 

1.  Sur la page des détails du tableau, sélectionnez l'onglet **Data quality** pour accéder aux règles et aux paramètres de AWS Glue Data Quality pour votre tableau. 

1.  Dans l'onglet **Qualité des données**, choisissez **Ajouter des règles et surveiller la qualité des données**. 

1.  Sur la page **Générateur d'ensemble règles**, une alerte en haut de la page vous invite à démarrer une tâche de recommandation s'il n'y a pas d'exécution de recommandation de règles. 

1.  Choisissez **Recommander des règles** pour ouvrir la fenêtre modale et saisir vos paramètres pour la tâche de recommandation. 

1.  Choisissez un rôle IAM avec accès à AWS Glue. Ce rôle doit être autorisé à accéder aux ressources dont les différents processus de AWS Glue Data Quality ont besoin pour être exécutés en votre nom. 

1.  Une fois les champs remplis conformément à vos préférences, sélectionnez **Recommander des règles** pour démarrer l'exécution de la tâche de recommandation. Si des exécutions de recommandation sont en cours ou terminées, vous pouvez gérer vos exécutions dans cette alerte. Il se peut que vous deviez actualiser l'alerte pour afficher le changement du statut. Les exécutions de tâches de recommandation terminées et en cours apparaissent sur la page **Historique des exécutions** qui répertorie toutes les exécutions de recommandation des 90 derniers jours. 

### Signification des règles recommandées
<a name="data-quality-recommend-rules"></a>

 AWS Glue Data Quality génère des règles basées sur les données de chaque colonne de la table en entrée. Il utilise les règles pour identifier les limites potentielles dans lesquelles les données peuvent être filtrées afin de respecter les exigences de qualité. La liste suivante de règles générées inclut des exemples utiles pour comprendre la signification des règles et ce qu'elles peuvent faire lorsqu'elles sont appliquées à vos données. 

 Pour obtenir la liste complète des types de règles DQDL (Data Quality Definition Language) générés, veuillez consulter [Référence des types de règles DQDL](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-rule-types). 
+  `IsComplete "SET_FINE_AMOUNT"` : la règle `IsComplete` vérifie que la colonne est remplie pour une ligne donnée. Utilisez cette règle pour marquer les colonnes comme non facultatives dans les données. 
+  `Uniqueness "TICKET_NUMBER" > 0.95` : la règle `Uniqueness` vérifie que les données de la colonne atteignent un certain seuil d'unicité. Dans cet exemple, il a été déterminé que les données qui remplissent une ligne donnée pour `"TICKET_NUMBER"` étaient identiques à 95 % au maximum à toutes les autres lignes, ce qui suggère cette règle. 
+  `ColumnValues "PROVINCE" in ["ON", "QC", "AB", "NY",...]` : la règle `ColumnValues` définit des valeurs valides pour la colonne, en fonction du contenu existant de la colonne. Dans cet exemple, les données de chaque ligne correspondent à un code d'immatriculation à deux lettres pour un état ou une province. 
+  `ColumnLength "INFRACTION_DESCRIPTION" between 15 and 31` : la règle `ColumnLength` impose une restriction de longueur aux données d'une colonne. Cette règle est générée à partir des échantillons de données en fonction des longueurs minimale et maximale enregistrées pour une colonne de chaînes. 

## Recommandations sur les règles de surveillance
<a name="data-quality-monitor-recommendations"></a>

 Lorsque les recommandations de règles de qualité des données sont en cours d'exécution, la page **Ajouter des règles et surveiller la qualité des données** affiche des informations et des actions supplémentaires que vous pouvez effectuer dans la barre supérieure. 

 Lorsque les recommandations de règles sont en cours, vous pouvez choisir **Arrêter l'exécution** avant que la tâche de recommandation ne soit terminée. Pendant que la tâche est en cours, vous pouvez voir le statut **En cours**, ainsi que la date et l'heure du début de l'exécution. 

 Lorsque les recommandations de règles sont terminées, la barre de recommandations de règles affiche le nombre de règles recommandées, le statut de la dernière recommandation exécutée, ainsi que la date et l'horodatage de fin. 

 Vous pouvez ajouter les règles recommandées en choisissant **Insérer une recommandation de règle**. Pour consulter les règles précédemment recommandées, sélectionnez une date précise. Pour exécuter une nouvelle recommandation, sélectionnez **Plus d'actions**, puis sélectionnez **Règles recommandées**. 

 Définissez les paramètres par défaut en choisissant **Gérer les paramètres utilisateur**. Vous pouvez définir le chemin par défaut sur Amazon S3 pour stocker les ensembles de règles ou pour configurer un rôle par défaut pour exécuter le catalogue de données. 

## Modification des ensembles de règles recommandés
<a name="data-quality-edit-ruleset"></a>

Comme la qualité des données d' AWS Glue génère des règles basées sur les données existantes dont vous disposez, il est possible que certaines règles inattendues ou indésirables apparaissent dans les suggestions automatisées. Afin de tirer le meilleur parti des ensembles de règles recommandés, vous devez les évaluer et les modifier. Pour cette étape du didacticiel, vous reprenez les règles générées à l'étape précédente et les ajustez pour appliquer des qualités plus restrictives à certaines données. Vous assouplissez également d'autres règles afin de garantir que des données correctes et uniques puissent être ajoutées ultérieurement. 

**Modifier un ensemble de règles suggéré**

1.  Dans la console AWS Glue, choisissez **Data Catalog**, puis choisissez **Databases de données** dans le volet de navigation. Choisissez la table `tickets`. 

1. Sur la page des détails du tableau, choisissez l'onglet **Data quality** pour accéder aux règles et aux paramètres de AWS Glue Data Quality pour le tableau.

1.  Dans la section **Ensembles de règles**, sélectionnez l'ensemble de règles généré dans [Génération de recommandations de règles](#data-quality-get-recommendations). 

1.  Choisissez **Actions**, puis sélectionnez **Modifier** dans la fenêtre de la console. L'éditeur d'ensembles de règles se charge dans la console. Il inclut un volet d'édition pour vos règles et une référence rapide pour DQDL. 

1. Supprimer la ligne `2` du script. Cela permet d'assouplir l'exigence selon laquelle la taille de la base de données doit être limitée à un certain nombre de lignes. Après la modification, votre fichier doit contenir les éléments suivants sur les lignes 1 à 3 :

   ```
   Rules = [
       IsComplete "TAG_NUMBER_MASKED",
       ColumnLength "TAG_NUMBER_MASKED" between 6 and 9,
   ```

1. Supprimer la ligne `25` du script. Cela permet d'assouplir l'exigence selon laquelle 96 % des provinces enregistrées sont `ON`. Après la modification, votre fichier doit contenir les éléments suivants, de la ligne `24` à la fin de l'ensemble de règles :

   ```
   ColumnValues "PROVINCE" in ["ON", "QC", "AB", "NY", "AZ", "NS", "BC", "MI", "PQ", "MB", "PA", "FL", "SK", "NJ", "OH", "NB", "IL", "MA", "CA",
       "VA", "TX", "NF", "MD", "PE", "CT", "NC", "GA", "IN", "OR", "MN", "TN", "WI", "KY", "MO", "WA", "NH", "SC", "CO", "OK", "VT", "RI", "ME", "AL",
       "YT", "IA", "DE", "AR", "LA", "XX", "WV", "MT", "KS", "NT", "DC", "NV", "NE", "UT", "MS", "NM", "ID", "SD", "ND", "AK", "NU", "GO", "WY", "HI"],
   ColumnLength "PROVINCE" = 2
   ]
   ```

1. Changez la ligne `14` comme suit :

   ```
   IsComplete "TIME_OF_INFRACTION",
   ```

    Cela *renforce* l'exigence relative à la colonne en limitant la base de données aux seules contraventions qui contiennent une heure d'infraction enregistrée. Vous devez toujours considérer les contraventions sans heure d'infraction enregistrée comme des données non valides dans ce jeu de données. Cela diffère des situations dans lesquelles le partitionnement ou la transformation peuvent être plus appropriés pour une utilisation ou une inspection plus poussée des données afin de déterminer une règle de qualité.

1. Choisissez **Mettre à jour l'ensemble de règles** en bas de la page de la console.

## Création d'un ensemble de règles
<a name="data-quality-create-ruleset"></a>

 Un jeu de règles est un groupe de règles de qualité des données que vous évaluez par rapport à vos données. Dans la console AWS Glue, vous pouvez créer des ensembles de règles personnalisés à l'aide du langage DQDL (Data Quality Definition Language). 

**Pour créer un jeu de règles de qualité des données**

1.  Dans la console AWS Glue, choisissez **Data Catalog**, **Databases**, puis **Tables** dans le volet de navigation. Sélectionnez la table `tickets`. 

1. Ouvrez l'onglet **Data quality** (Qualité des données).

1.  Dans la section **Ensembles de règles** choisissez **Créer un ensemble de règles**. L'éditeur DQDL s'ouvre dans la console. Il dispose d'une zone de texte pour l'édition directe et d'une référence rapide pour les règles DQDL et le schéma de la table. 

1.  Commencez à ajouter des règles dans la zone de texte de l'éditeur DQDL. Vous pouvez soit écrire des règles directement à partir de ce didacticiel, soit utiliser la fonctionnalité du **générateur de règles DQDL** de l'éditeur de règles de qualité des données. 
**Note**  
 Sélectionnez un type de règle dans la liste, puis choisissez le signe plus pour insérer un exemple de syntaxe dans le volet d'édition. 
Remplacez les noms des colonnes par vos propres noms de colonnes. Les noms des colonnes de la table sont disponibles dans l'onglet **Schéma**. 
 Mettez à jour le paramètre d'expression selon vos besoins. Pour obtenir la liste complète des expressions prises en charge par DQDL, consultez [Expressions](dqdl.md#dqdl-syntax-rule-expressions). 

    Par exemple, les règles suivantes sont des contraintes pour la validation des données de la colonne `ticket_number` dans la table `tickets`. Pour ajouter les règles suivantes, utilisez le générateur de règles DQDL ou modifiez directement votre ensemble de règles : 

   ```
   IsComplete "ticket_number",
   IsUnique "ticket_number",
   ColumnValues "ticket_number" > 9000000000
   ```

1. Fournissez un nom pour votre exécution dans le champ **Nom de l'ensemble de règles**.

1. Choisissez **Enregistrer l'ensemble de règles**.

### Évaluation de la qualité des données sur plusieurs jeux de données
<a name="data-quality-create-ruleset-referential-integrity"></a>

 Vous pouvez définir des règles de qualité des données pour plusieurs ensembles de données à l'aide d'ensembles ReferentialIntegrity de DatasetMatch règles. ReferentialIntegrityvérifie si les données du jeu de données principal sont présentes dans d'autres ensembles de données. 

Pour ajouter un jeu de données de référence, cliquez sur l'onglet **Schéma**, puis sur **Mettre à jour les tables de référence**. Vous serez invité à sélectionner une base de données et une table. Vous pouvez ajouter la table, puis définir des règles de qualité des données. Les types de règles tels que AggregateMatch RowCountMatch ReferentialIntegrity, SchemaMatch, et permettent DatasetMatch d'effectuer des contrôles de qualité des données sur plusieurs ensembles de données. 

## Exécution d’un jeu de règles pour évaluer la qualité des données
<a name="data-quality-run-data-quality-task"></a>

 Lorsque vous exécutez une tâche de qualité des données, AWS Glue Data Quality évalue un ensemble de règles par rapport à vos données et calcule un score de qualité des données. Ce score représente le pourcentage de règles de qualité des données qui ont été acceptées pour l'entrée. 

**Pour exécuter une tâche liée à la qualité des données**

1. Dans la console AWS Glue, choisissez **Data Catalog**, **Databases**, puis **Tables** dans le volet de navigation. Sélectionnez le tableau `tickets`.

1. Choisissez l'onglet **Qualité des données**.

1. Dans la liste **Ensembles de règles**, sélectionnez l'ensemble de règles que vous souhaitez évaluer par rapport à la table. Pour cette étape, nous vous recommandons d'utiliser un ensemble de règles que vous avez déjà écrit ou modifié plutôt que des règles générées. Cliquez sur **Exécuter**. 

1.  Dans la fenêtre modale, choisissez votre rôle IAM. Ce rôle doit être autorisé à accéder aux ressources dont les différents processus de AWS Glue Data Quality ont besoin pour être exécutés en votre nom. Vous pouvez enregistrer le rôle IAM comme rôle par défaut ou le modifier en accédant à la page **Paramètres par défaut**. 

1.  Sous **Actions relatives à la qualité des données**, indiquez si vous souhaitez **publier des statistiques sur Amazon CloudWatch**. Lorsque cette option est sélectionnée, AWS Glue Data Quality publie des statistiques qui indiquent le nombre de règles passées et le nombre de règles qui ont échoué. Pour agir sur les métriques stockées de cette manière, vous pouvez utiliser des CloudWatch alarmes. Les indicateurs clés sont également publiés Amazon EventBridge pour vous permettre de configurer des alertes. Pour plus d'informations, consultez [Setting up alerts, deployments, and scheduling](https://docs.aws.amazon.com/glue/latest/dg/data-quality-alerts.html). 

1.  Sous **Fréquence d'exécution**, choisissez d'exécuter à la demande ou de planifier l'ensemble de règles. Lorsque vous planifiez un ensemble de règles, le nom de la tâche vous est demandé. Le calendrier sera créé dans Amazon EventBridge. Vous pouvez modifier votre calendrier dans Amazon EventBridge. 

1.  Pour enregistrer les résultats dans Amazon S3, choisissez un **emplacement pour les résultats de la qualité des données**. Le rôle IAM que vous avez précédemment sélectionné pour cette tâche doit disposer d'un accès à cet emplacement. 

1.  Sous **Configurations supplémentaires**, entrez le **nombre de travailleurs demandé** que AWS Glue doit affecter à votre tâche de qualité des données. 

1.  Vous pouvez éventuellement configurer un filtre au niveau de la source de données. Cela vous permet de réduire le nombre de données que vous lisez. Vous pouvez également utiliser un filtre pour exécuter des validations incrémentielles en sélectionnant des informations de partition et en les transmettant en tant que paramètres via des appels d'API. Pour améliorer les performances, vous pouvez fournir un prédicat de partition. 

1.  Cliquez sur **Exécuter**. Votre nouvelle tâche doit apparaître dans la liste **Data quality task runs** (Exécutions de tâches liées à la qualité des données). Lorsque la colonne **Statut d'exécution** de la tâche indique **Terminé**, vous pouvez consulter les résultats du score de qualité. Il se peut que vous deviez rafraîchir votre fenêtre de console pour que le statut soit correctement mis à jour. 

1.  Pour afficher la colonne contenant les détails des résultats de la qualité des données, cliquez sur l'icône « \$1 » pour développer l'ensemble de règles. Les résultats vous indiquent les règles qui ont réussi et échoué lors de l'évaluation, ainsi que les causes de l'échec des règles. 

## Affichage du score de qualité des données et des résultats
<a name="data-quality-view-results"></a>

**Pour voir la dernière exécution sur tous les ensembles de règles créés**

1.  Dans la console AWS Glue, choisissez **Tables** dans le volet de navigation. Choisissez ensuite la table pour laquelle vous souhaitez exécuter une tâche liée à la qualité des données. 

1.  Choisissez l'onglet **Qualité des données**. 

1.  L'**instantané de la qualité des données** montre une tendance générale des exécutions au fil du temps. Les 10 dernières exécutions de tous les ensembles de règles sont affichées par défaut. Pour filtrer par ensemble de règles, sélectionnez celui que vous souhaitez dans la liste déroulante. S'il y a moins de 10 exécutions, toutes les exécutions terminées disponibles sont affichées. 

1.  Dans la table **Qualité des données**, chaque ensemble de règles avec sa dernière exécution (le cas échéant) est affiché, ainsi que le score. En développant l'ensemble de règles, vous affichez les règles qu'il contient, ainsi que les résultats de l'exécution. 



**Pour voir la dernière exécution sur un ensemble de règles en particulier**

1.  Dans la console AWS Glue, choisissez **Tables** dans le volet de navigation. Choisissez ensuite la table pour laquelle vous souhaitez exécuter une tâche liée à la qualité des données. 

1.  Choisissez l'onglet **Qualité des données**. 

1.  Dans le tableau **Qualité des données**, choisissez un ensemble de règles spécifique. 

1.  Sur la page **Détails de l'ensemble de règles**, choisissez l'onglet **Historique des exécutions**. 

    Toutes les exécutions d'évaluation pour cet ensemble de règles particulier sont répertoriées dans la table de cet onglet. Vous pouvez consulter l'historique des scores et le statut des exécutions. 

1.  Pour obtenir plus d'informations sur une exécution en particulier, choisissez l'**ID d'exécution** pour accéder à la page **Détails de l'exécution d'évaluation**. Sur cette page, vous pouvez consulter des informations sur l'exécution et plus de détails sur le statut des résultats des règles individuelles. 

## Utilisation de requêtes de prétraitement
<a name="data-quality-preprocessing-queries"></a>

 AWS Glue Data Quality prend en charge les requêtes de prétraitement qui vous permettent de transformer vos données avant d'exécuter des contrôles de qualité des données. Cette fonctionnalité vous permet de : 
+ Créez des colonnes dérivées pour la validation de la qualité des données.
+ Filtrez les données en fonction de conditions spécifiques.
+ Effectuez des calculs ou des transformations pour les contrôles de qualité.
+ Validez les relations entre les colonnes.

**Note**  
 Cette fonctionnalité n'est prise en charge que dans la console APIs et n'est pas prise en charge via celle-ci. 

### Utilisation de requêtes de prétraitement avec la CLI et le SDK
<a name="data-quality-preprocessing-queries-cli-sdk"></a>

#### Les cycles de recommandation
<a name="data-quality-preprocessing-queries-recommendation-runs"></a>

 Les exemples suivants montrent comment utiliser des requêtes de prétraitement avec des séries de recommandations. 

 **AWS CLI :** 

```
aws glue start-data-quality-rule-recommendation-run \
  --data-source '{"DataQualityGlueTable": { \
    "DatabaseName": "mydatabase", \
    "TableName": "mytable", \
    "PreProcessingQuery": "SELECT sepal_length, sepal_width, petal_length, petal_width, class, (sepal_length + sepal_width) as sepal_total FROM `mydatabase.mytable`" \
  }}' \
  --role "arn:aws:iam::123456789012:role/GlueDataQualityRole" \
  --created-ruleset-name "my-ruleset-with-preprocessing"
```

 **SDK Java :** 

```
StartDataQualityRuleRecommendationRunRequest request = new StartDataQualityRuleRecommendationRunRequest()
    .withDataSource(new DataSource()
        .withDataQualityGlueTable(new DataQualityGlueTable()
            .withDatabaseName("mydatabase")
            .withTableName("mytable")
            .withPreProcessingQuery("SELECT sepal_length, sepal_width, " + 
                "(sepal_length + sepal_width) as sepal_total " +
                "FROM `mydatabase.mytable`")))
    .withRole("arn:aws:iam::123456789012:role/GlueDataQualityRole")
    .withCreatedRulesetName("my-ruleset-with-preprocessing");

glueClient.startDataQualityRuleRecommendationRun(request);
```

#### Exécutions d'évaluation des ensembles de règles
<a name="data-quality-preprocessing-queries-evaluation-runs"></a>

 Les exemples suivants montrent comment utiliser des requêtes de prétraitement avec des séries d'évaluation d'ensembles de règles. 

 **AWS CLI :** 

```
aws glue start-data-quality-ruleset-evaluation-run \
  --data-source '{"DataQualityGlueTable": { \
    "DatabaseName": "mydatabase", \
    "TableName": "mytable", \
    "PreProcessingQuery": "SELECT order_id, amount, (tax + shipping) as total_fees FROM `mydatabase.mytable`" \
  }}' \
  --role "arn:aws:iam::123456789012:role/GlueDataQualityRole" \
  --ruleset-names '["my-ruleset"]'
```

 **SDK Java :** 

```
StartDataQualityRulesetEvaluationRunRequest request = new StartDataQualityRulesetEvaluationRunRequest()
    .withDataSource(new DataSource()
        .withDataQualityGlueTable(new DataQualityGlueTable()
            .withDatabaseName("mydatabase")
            .withTableName("mytable")
            .withPreProcessingQuery("SELECT order_id, amount, " +
                "(tax + shipping) as total_fees " +
                "FROM `mydatabase.mytable`")))
    .withRole("arn:aws:iam::123456789012:role/GlueDataQualityRole")
    .withRulesetNames(Arrays.asList("my-ruleset"));

glueClient.startDataQualityRulesetEvaluationRun(request);
```

### Considérations relatives à la création de requêtes de prétraitement
<a name="data-quality-preprocessing-queries-considerations"></a>

 Lorsque vous rédigez une requête de prétraitement : 
+ La référence au tableau doit être mise en forme de manière à ``databaseName.tableName`` utiliser des backticks.
+ La requête doit être une instruction SELECT valide.
+ Les noms de colonnes figurant dans la sortie de la requête seront utilisés pour les règles de qualité des données.

 L'exemple suivant montre une requête de prétraitement : 

```
SELECT 
    sepal_length, 
    sepal_width, 
    petal_length, 
    petal_width, 
    class,
    (sepal_length + sepal_width) as sepal_total 
FROM `mydatabase.mytable`
```

### Limitations
<a name="data-quality-preprocessing-queries-limitations"></a>
+ La requête doit référencer le tableau à l'aide de backticks et du ``databaseName.tableName`` format complet.
+ La longueur maximale des requêtes est de 51 200 caractères.
+ La requête doit renvoyer au moins une ligne de données.
+ Toutes les colonnes référencées dans votre ensemble de règles doivent être présentes dans le résultat de la requête.

## Types de sources pris en charge
<a name="data-quality-get-started-supported-source-types"></a>


**Support des types de tables par AWS Lake Formation configuration**  

| Type de table | AWS Lake Formation - Accès à toutes les tables | AWS Lake Formation Activé avec des colonnes | AWS Lake Formation Activé avec des filtres de données |  AWS Lake Formation Support multi-comptes - Accès à toutes les tables | AWS Lake Formation Désactivé | 
| --- | --- | --- | --- | --- | --- | 
| Parquet | Pris en charge | Non pris en charge | Non pris en charge | Pris en charge | Pris en charge | 
| ORC | Pris en charge | Non pris en charge | Non pris en charge | Pris en charge | Pris en charge | 
| CSV, JSON, TSV | Pris en charge | Non pris en charge | Non pris en charge | Pris en charge | Pris en charge | 
| Avro | Pris en charge | Non pris en charge | Non pris en charge | Pris en charge | Pris en charge | 
| JSON | Pris en charge | Non pris en charge | Non pris en charge | Pris en charge | Pris en charge | 
| Iceberg | Pris en charge | Non pris en charge | Non pris en charge | Pris en charge | Pris en charge | 
| HUDI | Non pris en charge | Non pris en charge | Non pris en charge | Non pris en charge | Pris en charge | 
| Delta | Non pris en charge | Non pris en charge | Non pris en charge | Non pris en charge | Pris en charge | 
| RMS | Pris en charge\$1 | Pris en charge\$1 | Pris en charge\$1 | Non pris en charge | Non pris en charge | 
| Tables Amazon S3 | Pris en charge\$1 | Non pris en charge | Non pris en charge | Non applicable | Pris en charge | 
| Amazon RDS et Amazon Aurora | Non applicable | Ne s’applique pas | Ne s’applique pas | Non applicable | Non pris en charge | 
| JDBC | Non applicable | Ne s’applique pas | Ne s’applique pas | Non applicable | Pris en charge | 

 \$1 La prise en charge des tables Amazon S3 et de SageMaker Lakehouse dans AWS Glue Console n'est pas prise en charge. Actuellement, les exécutions de recommandations de table Amazon S3 et de catalogue de données SageMaker Lakehouse et les exécutions d'évaluation de la qualité des données du catalogue de données ne sont prises en charge que via la CLI. 

### Autres restrictions connues
<a name="w2aac49c43c47b7"></a>
+  Tables de liens symboliques de Delta Lake : non prises en charge pour les cycles de recommandation de AWS Glue Data Quality ou les cycles d'évaluation de la qualité des données du catalogue de données. 
+  Publication de tables Amazon S3 dans SageMaker Unified Studio : Actuellement, la publication de tables Amazon S3 sous forme d'actifs dans SageMaker Unified Studio n'est pas disponible ; la visualisation des exécutions de qualité des données de table Amazon S3 n'est donc pas disponible dans SageMaker Unified Studio. 

## Rubriques en relation
<a name="data-quality-get-started-related"></a>
+ [Référence du type de règle DQDL](dqdl-rule-types.md)
+ [Référence DQDL (Data Quality Definition Language)](dqdl.md)

# Évaluation de la qualité des données avec AWS Glue Studio
<a name="data-quality-gs-studio"></a>

 AWS Glue Data Quality évalue et contrôle la qualité de vos données en fonction de règles que vous définissez. Ainsi, les données qui nécessitent une action sont identifiables facilement. Dans AWS Glue Studio, vous pouvez ajouter des nœuds de qualité des données à votre tâche visuelle afin d'appliquer des règles de qualité des données aux tableaux de votre catalogue de données. Vous pouvez ensuite contrôler et évaluer les modifications apportées à vos jeux de données tout au long de leur évolution. Pour un aperçu de la manière d'utiliser la qualité des données de AWS Glue dans AWS Glue Studio, regardez la vidéo suivante.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/DUd5s_CFtBM/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/DUd5s_CFtBM)


 Voici les étapes générales décrivant l'utilisation d'AWS Glue Data Quality : 

1. **Création de règles de qualité des données** : créez des règles de qualité des données à l'aide du générateur de règles DQDL en choisissant les ensembles de règles intégrés que vous configurez. 

1.  **Configuration d'une tâche de qualité des données** : définissez des actions en fonction des résultats relatifs à la qualité des données et des options de sortie. 

1.  **Enregistrement et exécution d'une tâche de qualité des données** : créez et exécutez une tâche. L'enregistrement de la tâche inclut les ensembles de règles que vous avez créés pour la tâche. 

1.  **Contrôle et vérification des résultats relatifs à la qualité des données** : vérifiez les résultats une fois la tâche terminée. Vous pouvez également planifier l'exécution de la tâche à une date future. 

## Avantages
<a name="gs-data-quality-benefits"></a>

 Les analystes, les ingénieurs et les spécialistes des données peuvent utiliser le nœud Évaluer la qualité des données dans AWS Glue Studio pour analyser, configurer, surveiller et améliorer la qualité des données dans l'éditeur de tâches visuel. L'utilisation d'un nœud de qualité des données présente les avantages suivants : 
+  **Détection des problèmes de qualité des données** : la création de règles qui vérifient les caractéristiques de vos jeux de données permet de détecter les problèmes. 
+  **Démarrage simplifié** : vous pouvez commencer par utiliser des règles et des actions prédéfinies. 
+  **Intégration étroite** : vous pouvez utiliser des nœuds de qualité des données dans AWS Glue Studio, car la qualité des données de AWS Glue s'exécute au-dessus de AWS Glue Data Catalog. 

# Évaluation de la qualité des données pour les tâches ETL dans AWS Glue Studio
<a name="tutorial-data-quality"></a>

Dans ce didacticiel, vous ferez vos premiers pas avec la qualité des données de AWS Glue dans AWS Glue Studio. Vous allez apprendre comment : 
+  Créer des règles à l’aide du générateur de règles DQDL (Data Quality Definition Language). 
+  Spécifier les actions relatives à la qualité des données, les données de sortie et l’emplacement de sortie des résultats en matière de qualité des données. 
+  Vérifier les résultats en matière de qualité des données. 

 Pour vous entraîner avec un exemple, consultez le billet de blog [https://aws.amazon.com/blogs/big-data/getting-started-with-aws-glue-data-quality-for-etl-pipelines/](https://aws.amazon.com/blogs/big-data/getting-started-with-aws-glue-data-quality-for-etl-pipelines/). 

## Étape 1 : Ajout du nœud de transformation Évaluer la qualité des données à la tâche visuelle
<a name="tutorial-data-quality-step1"></a>

À ce stade, vous ajoutez le nœud d’évaluation de la qualité des données à l’éditeur de tâches visuel. 

**Pour ajouter le nœud de qualité des données, procédez comme suit  :**

1.  Dans la console AWS Glue Studio, choisissez **Visual avec une source et une cible** dans la section **Create job**, puis choisissez **Create**. 

1.  Choisissez le nœud  auquel vous souhaitez appliquer la transformation de qualité des données. Il s’agit généralement d’un nœud de transformation ou d’une source de données. 

1.  Ouvrez le panneau de ressources sur la gauche en cliquant sur l’icône « \$1 ». Recherchez ensuite **Évaluer la qualité des données** dans la barre de recherche, puis sélectionner **Évaluer la qualité des données** dans les résultats de la recherche. 

1.  L’éditeur de tâches visuel affiche la ramification du nœud de transformation **Évaluer la qualité des données** à partir du nœud que vous avez sélectionné. Sur le côté droit de la console, l’onglet **Transform** (Transformer) s’ouvre automatiquement. Si vous devez modifier le nœud parent, choisissez l’onglet **Propriétés du nœud**, puis choisissez le nœud parent dans le menu déroulant. 

    Lorsque vous choisissez un nouveau nœud parent, une nouvelle connexion est établie entre le nœud parent et le nœud **Évaluer la qualité des données** (Évaluer la qualité des données). Supprimez tous les nœuds parents indésirables. Un seul nœud parent peut être connecté à un nœud **Évaluer la qualité des données**. 

1.  La transformation Évaluer la qualité des données prend en charge plusieurs parents afin que vous puissiez valider les règles de qualité des données sur plusieurs jeux de données. Les règles qui prennent en charge plusieurs ensembles de données incluent ReferentialIntegrity DatasetMatch, SchemaMatch, RowCountMatch, et AggregateMatch. 

   Lorsque vous ajoutez plusieurs entrées à la transformation Évaluer la qualité des données, vous devez sélectionner votre entrée « principale ». Votre entrée principale est le jeu de données dont vous souhaitez valider la qualité des données. Tous les autres nœuds ou entrées sont traités comme des références. 

   Vous pouvez utiliser la transformation Évaluer la qualité des données pour identifier les enregistrements spécifiques qui ont échoué aux contrôles de qualité des données. Nous vous recommandons de choisir votre jeu de données principal, car de nouvelles colonnes qui signalent les enregistrements défectueux sont ajoutées au jeu de données principal. 

1.  Vous pouvez spécifier des alias pour les sources de données d’entrée. Les alias constituent un autre moyen de référencer la source d'entrée lorsque vous utilisez la ReferentialIntegrity règle. Comme une seule source de données peut être désignée comme source principale, chaque source de données supplémentaire que vous ajoutez nécessite un alias. 

   Dans l'exemple suivant, la ReferentialIntegrity règle spécifie la source de données d'entrée par le nom d'alias et effectue une one-to-one comparaison avec la source de données principale. 

   ```
   Rules = [
   	ReferentialIntegrity “Aliasname.name” = 1
   ]
   ```

## Étape 2 : Création d’une règle à l’aide de DQDL
<a name="tutorial-data-quality-step2"></a>

Cette étape permet de créer une règle avec DQDL. Dans le cadre de ce didacticiel, vous créez une règle unique à l’aide du type de règle **Exhaustivité**. Ce type de règle compare le pourcentage de valeurs complètes (non nulles) d’une colonne à une expression donnée. Pour plus d’informations sur l’utilisation de DQDL, consultez [DQDL](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html). 

1.  Dans l’onglet **Transformer**, ajoutez un **Type de règle** en cliquant sur le bouton **Insérer**. Le type de règle est alors ajouté à l’éditeur de règles dans lequel vous pouvez saisir les paramètres de la règle. 
**Note**  
 Lorsque vous modifiez des règles, assurez-vous qu’elles se trouvent entre crochets et qu’elles sont séparées par des virgules. Par exemple, une expression de règle complète a la syntaxe suivante :   

   ```
   Rules= [
       Completeness "year">0.8, Completeness "month">0.8
   ]
   ```
 Cet exemple spécifie le paramètre d’exhaustivité pour les colonnes « année » et « mois ». Pour que la règle soit transmise, ces colonnes doivent être « complètes » à plus de 80 % ou contenir des données dans plus de 80 % des instances pour chaque colonne respective. 

    Dans cet exemple, recherchez et insérez le type de règle **Completeness** (Exhaustivité). Le type de règle est alors ajouté à l’éditeur de règles. La syntaxe de ce type de règle est la suivante : `Completeness <COL_NAME> <EXPRESSION>`. 

   Une expression doit être fournie comme paramètre pour la plupart des types de règles afin de créer une réponse booléenne. Pour plus d’informations sur les expressions DQDL prises en charge, consultez [DQDL expressions](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-syntax). Vous ajoutez ensuite le nom de la colonne. 

1.  Dans le générateur de règles DQDL, choisissez l’onglet **Schéma**. Trouvez le nom de la colonne dans le schéma d’entrée à l’aide de la barre de recherche. Le schéma d’entrée affiche le nom de la colonne et le type de données. 

1.  Dans l’éditeur de règles, cliquez à droite du type de règle pour insérer le curseur au point d’insertion de la colonne. Vous pouvez également saisir le nom de la colonne dans la règle. 

    Par exemple, dans la liste des colonnes de la liste des schémas d’entrée, cliquez sur le bouton **Insérer** à côté de la colonne (ici, il s’agit de **année**). La colonne est alors ajoutée à la règle. 

1.  Ajoutez ensuite une expression pour évaluer la règle dans l’éditeur de règles. Comme le type de règle **Exhaustivité** vérifie le pourcentage de valeurs complètes (non nulles) dans une colonne par rapport à une expression donnée, saisissez une expression telle que `> 0.8`. Cette règle vérifie si la colonne contient plus de 80 % de valeurs complètes (non nulles). 

## Étape 3 : Configuration des résultats de la qualité des données
<a name="tutorial-data-quality-step3"></a>

 Une fois les règles de qualité des données créées, vous pouvez sélectionner des options supplémentaires pour spécifier la sortie du nœud de qualité des données. 

1.  Dans **Data quality transform output** (Sortie de transformation de la qualité des données), choisissez l’une des options suivantes : 
   +  **Données d’origine** : permet de fournir les données d’entrée d’origine. Lorsque vous choisissez cette option, un nouveau nœud enfant « rowLevelOutcomes » est ajouté à la tâche. Le schéma correspond au schéma du jeu de données principal qui a été transmis en tant qu’entrée à la transformation. Cette option est utile si vous souhaitez simplement transmettre les données et faire échouer la tâche en cas de problèmes de qualité. 

     Un autre cas d’utilisation est celui où vous souhaitez détecter des enregistrements défectueux qui ont échoué aux contrôles de qualité des données. Pour détecter les enregistrements défectueux, choisissez l’option **Ajouter de nouvelles colonnes pour indiquer les erreurs de qualité des données**. Cette action ajoute quatre nouvelles colonnes au schéma de la transformation « rowLevelOutcomes ». 
     +  **DataQualityRulesPass**(tableau de chaînes) — Fournit un tableau de règles ayant passé avec succès les contrôles de qualité des données. 
     +  **DataQualityRulesFail**(tableau de chaînes) — Fournit un tableau de règles ayant échoué aux contrôles de qualité des données. 
     +  **DataQualityRulesSkip**(tableau de chaînes) — Fournit un tableau de règles qui ont été ignorées. Les règles suivantes ne peuvent pas identifier les enregistrements d’erreur, car elles sont appliquées au niveau du jeu de données. 
       +  AggregateMatch 
       +  ColumnCount 
       +  ColumnExists 
       +  ColumnNamesMatchPattern 
       +  CustomSql 
       +  RowCount 
       +  RowCountMatch 
       +  StandardDeviation 
       +  Mean 
       +  ColumnCorrelation 
     +  **DataQualityEvaluationResult**— Indique le statut « Réussi » ou « Échec » au niveau de la ligne. Notez que vos résultats globaux peuvent être un ÉCHEC, mais que certains enregistrements peuvent avoir réussis. Par exemple, il se peut que la RowCount règle ait échoué, mais que toutes les autres règles aient réussi. Dans de tels cas, l’état de ce champ est « Réussi ». 

1.  **Résultats relatifs à la qualité des données** : permet de fournir les règles configurées et leur état de réussite ou d’échec. Cette option est utile si vous souhaitez écrire vos résultats dans Amazon S3 ou dans d’autres bases de données. 

1. **Paramètres de sortie de qualité des données** (facultatif) : choisissez **Paramètres de sortie de qualité des données** pour afficher le champ **Emplacement des résultats relatifs à la qualité des données**. Choisissez ensuite **Parcourir** pour rechercher un emplacement Amazon S3 à définir comme cible de sortie relative à la qualité des données. 

## Étape 4 : Configuration des actions relatives à la qualité des données
<a name="tutorial-data-quality-step4"></a>

 Vous pouvez utiliser des actions pour publier des métriques CloudWatch ou pour arrêter des tâches en fonction de critères spécifiques. Les actions ne sont disponibles qu’une fois la règle correspondante créée. Lorsque vous choisissez cette option, les mêmes métriques sont également publiées dans Amazon EventBridge. Vous pouvez utiliser ces options pour [créer des alertes de notification](https://docs.aws.amazon.com/glue/latest/dg/data-quality-alerts.html). 
+  **En cas d’échec d’un ensemble de règles** : vous pouvez choisir la procédure à suivre en cas d’échec d’un ensemble de règles pendant l’exécution de la tâche. Si vous souhaitez que la tâche échoue en cas d’échec de la qualité des données, choisissez le moment où la tâche doit échouer en sélectionnant l’une des options suivantes. Par défaut, cette action n’est pas sélectionnée et la tâche termine son exécution même si les règles de qualité des données échouent. 
  +  **Aucun** : si vous choisissez **Aucun** (par défaut), la tâche n’échoue pas et continue de s’exécuter malgré les échecs de l’ensemble de règles. 
  +  **Échec de la tâche après le chargement des données sur la cible** : la tâche échoue et aucune donnée n’est enregistrée. Pour enregistrer les résultats, choisissez un emplacement Amazon S3 où les résultats relatifs à la qualité des données seront enregistrés. 
  +  **Échec de la tâche sans chargement vers les données cibles** : cette option échoue immédiatement en cas d’erreur de qualité des données. Aucune cible de données n’est chargée, y compris les résultats de la transformation de la qualité des données. 

## Étape 5 : Consultation des résultats relatifs à la qualité des données
<a name="tutorial-data-quality-step5"></a>

 Une fois la tâche exécutée, choisissez l’onglet **Qualité des données** pour consulter les résultats relatifs à la qualité des données. 

1.  Pour chaque tâche exécutée, vous pouvez consulter les résultats relatifs à la qualité des données. Chaque nœud affiche un état de qualité des données et des informations détaillées. Choisissez un nœud pour afficher toutes les règles et l’état de chaque règle. 

1.  Choisissez **Télécharger les résultats** pour télécharger un fichier CSV contenant des informations sur l’exécution de la tâche et les résultats relatifs à la qualité des données. 

1.  Si plusieurs tâches exécutées sont associées à des résultats relatifs à la qualité des données, vous pouvez filtrer les résultats par date et par plage horaire. Choisissez *Filtrer par plage de dates et d’heures* pour agrandir la fenêtre de filtre. 

1.  Choisissez une plage relative ou une plage absolue. Pour les plages absolues, sélectionnez une date et entrez des valeurs pour l’heure de début et l’heure de fin à l’aide du calendrier. Lorsque vous avez terminé, choisissez **Appliquer**. 

## Qualité automatique des données
<a name="automatic-data-quality"></a>

 Lorsque vous créez une tâche AWS Glue ETL avec Amazon S3 comme cible, AWS Glue ETL active automatiquement une règle de qualité des données qui vérifie si les données chargées comportent au moins une colonne. Cette règle est conçue pour garantir que les données chargées ne sont pas vides ou endommagées. Toutefois, si cette règle échoue, la tâche n’échouera pas. Au contraire, vous remarquerez une réduction de votre score de qualité des données. En outre, la détection des anomalies est activée par défaut, ce qui permet de surveiller le nombre de colonnes des données. En cas de variations ou d'anomalies dans le nombre de colonnes, AWS Glue ETL vous informera de ces anomalies. Cette fonctionnalité vous aide à identifier les problèmes potentiels liés aux données et à prendre les mesures appropriées. Pour consulter la règle de qualité des données et sa configuration, vous pouvez cliquer sur la cible Amazon S3 dans votre tâche AWS Glue ETL. La configuration de la règle s’affiche, comme illustré dans la capture d’écran fournie. 

![\[La capture d’écran montre les options de qualité automatique des données disponibles à la sélection.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/automatic-data-quality.png)


 Vous pouvez ajouter des règles de qualité des données supplémentaires en sélectionnant **Modifier la configuration de la qualité des données**. 

## Métriques agrégées
<a name="data-quality-aggregated-metrics"></a>

Vous pouvez avoir besoin de métriques agrégées, telles que le nombre d’enregistrements réussis, échoués ou ignorés au niveau des règles ou des ensembles de règles pour créer des tableaux de bord. Afin d’obtenir les métriques agrégées et les métriques de règles pour chaque règle, activez d’abord les métriques agrégées en ajoutant l’option `publishAggregatedMetrics` à votre fonction `EvaluateDataQuality`.

Les options possibles pour `additional_options` `publishAggregatedMetrics` sont `ENABLED` et `DISABLED`. À titre d’exemple :

```
EvaluateDataQualityMultiframe = EvaluateDataQuality().process_rows(
    frame=medicare_dyf,
    ruleset=EvaluateDataQuality_ruleset,
    publishing_options={
        "dataQualityEvaluationContext": "EvaluateDataQualityMultiframe",
        "enableDataQualityCloudWatchMetrics": False,
        "enableDataQualityResultsPublishing": False,
    },
    additional_options={"publishAggregatedMetrics.status": "ENABLED"},
)
```

Si elle n’est pas spécifiée, la valeur `publishAggregatedMetrics.status` est `DISABLED` par défaut, tandis que les métriques de règles et les métriques agrégées seront désormais calculées. Cette fonctionnalité est actuellement prise en charge dans les sessions AWS Glue Interactive et dans les jobs Glue ETL. Cela n'est pas pris en charge dans Glue Catalog Data Quality APIs.

### Récupération des résultats des métriques agrégées
<a name="data-quality-aggregated-metrics-results"></a>

Quand `additionalOptions` `"publishAggregatedMetrics.status": "ENABLED"`, vous pouvez obtenir les résultats à deux endroits :

1. `AggregatedMetrics` et `RuleMetrics` sont renvoyés par le biais de `GetDataQualityResult()` lorsque vous indiquez le `resultId` où `AggregatedMetrics` et `RuleMetrics` incluent :

   **Métriques agrégées :**
   + Nombre total de lignes traitées
   + Nombre total de lignes transmises
   + Nombre total de lignes ayant échoué
   + Nombre total de règles traitées
   + Nombre total de règles transmises
   + Nombre total de règles ayant échoué  
![\[La capture d'écran montre les métriques agrégées et la structure des métriques de règles pour les évaluations de AWS Glue Data Quality.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-aggregated-metrics.png)

   En outre, au niveau d’une règle, les métriques suivantes sont fournies :

   **Métriques de règles :**
   + Lignes transmises
   + Lignes ayant échoué
   + Ligne ignorée
   + Nombre total de lignes traitées

1. `AggregatedMetrics` est renvoyé sous forme de trame de données supplémentaire et la trame de données `RuleOutcomes` est augmentée pour inclure `RuleMetrics`.

### Exemples d’implémentation
<a name="data-quality-aggregated-metrics-example"></a>

L’exemple suivant montre comment implémenter les métriques agrégées dans Scala :

```
// Script generated for node Evaluate Data Quality
val EvaluateDataQuality_node1741974822533_ruleset = """
  # Example rules: Completeness "colA" between 0.4 and 0.8, ColumnCount > 10
  Rules = [
      IsUnique "customer_identifier",
      RowCount > 10,
      Completeness "customer_identifier" > 0.5
  ]
"""

val EvaluateDataQuality_node1741974822533 = EvaluateDataQuality.processRows(frame=ChangeSchema_node1742850392012, ruleset=EvaluateDataQuality_node1741974822533_ruleset, publishingOptions=JsonOptions("""{"dataQualityEvaluationContext": "EvaluateDataQuality_node1741974822533", "enableDataQualityCloudWatchMetrics": "true", "enableDataQualityResultsPublishing": "true"}"""), additionalOptions=JsonOptions("""{"compositeRuleEvaluation.method":"ROW","observations.scope":"ALL","performanceTuning.caching":"CACHE_NOTHING", "publishAggregatedMetrics.status": "ENABLED"}"""))

println("--------------------------------ROW LEVEL OUTCOMES--------------------------------")
val rowLevelOutcomes_node = EvaluateDataQuality_node1741974822533("rowLevelOutcomes")

rowLevelOutcomes_node.show(10)

 println("--------------------------------RULE LEVEL OUTCOMES--------------------------------")

val ruleOutcomes_node = EvaluateDataQuality_node1741974822533("ruleOutcomes")

ruleOutcomes_node.show()

 println("--------------------------------AGGREGATED METRICS--------------------------------")

val aggregatedMetrics_node = EvaluateDataQuality_node1741974822533("aggregatedMetrics")

aggregatedMetrics_node.show()
```

### Exemple de résultats
<a name="data-quality-aggregated-metrics-sample-results"></a>

Les résultats sont renvoyés comme suit :

```
{
    "Rule": "IsUnique \"customer_identifier\"",
    "Outcome": "Passed",
    "FailureReason": null,
    "EvaluatedMetrics": {
        "Column.customer_identifier.Uniqueness": 1
    },
    "EvaluatedRule": "IsUnique \"customer_identifier\"",
    "PassedCount": 10,
    "FailedCount": 0,
    "SkippedCount": 0,
    "TotalCount": 10
}
{
    "Rule": "RowCount > 10",
    "Outcome": "Failed",
    "FailureReason": "Value: 10 does not meet the constraint requirement!",
    "EvaluatedMetrics": {
        "Dataset.*.RowCount": 10
    },
    "EvaluatedRule": "RowCount > 10",
    "PassedCount": 0,
    "FailedCount": 0,
    "SkippedCount": 10,
    "TotalCount": 10
}
{
    "Rule": "Completeness \"customer_identifier\" > 0.5",
    "Outcome": "Passed",
    "FailureReason": null,
    "EvaluatedMetrics": {
        "Column.customer_identifier.Completeness": 1
    },
    "EvaluatedRule": "Completeness \"customer_identifier\" > 0.5",
    "PassedCount": 10,
    "FailedCount": 0,
    "SkippedCount": 0,
    "TotalCount": 10
}
```

Les métriques agrégées sont les suivantes :

```
{ "TotalRowsProcessed": 10, "PassedRows": 10, "FailedRows": 0, "TotalRulesProcessed": 3, "RulesPassed": 2, "RulesFailed": 1 }
```

# Générateur de règles de qualité des données
<a name="data-quality-rule-builder"></a>

Avec le générateur de règles DQDL (Data Quality Definition Language), vous pouvez créer des règles de qualité pour évaluer vos données. Commencez par sélectionner un type de règle, puis spécifiez les paramètres dans l'éditeur de règles. L'éditeur de règles affiche également les erreurs et les avertissements éventuels lors de la création de règles. 

 Le [guide DQDL](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html) documente de manière exhaustive la création de règles à l'aide de la syntaxe DQDL, les types de règles intégrées et des exemples. 

## Nœud Évaluer la qualité des données
<a name="gs-data-quality-transform-expand-view"></a>

 En utilisant le nœud de transformation **Évaluer la qualité des données** et le générateur de règles DQDL, vous pouvez étendre l'espace de travail. 
+  Pour afficher l'onglet **Transformer** en mode plein écran, cliquez sur l'icône d'expansion dans le coin supérieur droit du panneau de détails du nœud. 
+  Pour développer l'éditeur de règles DQDL, cliquez sur l'icône **<<** pour développer l'éditeur de règles et réduire les onglets **Types de règles** et **Schéma**.   
![\[La capture d'écran montre un diagramme de tâche avec le nœud Évaluation de la qualité des données.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data_quality_example.png)

## Éléments
<a name="gs-data-quality-rule-builder-components"></a>

 26 types de règles sont intégrés à AWS Glue Studio. Chaque type de règle est associé à une description et à des exemples d'utilisation. 

### Types de règles de qualité des données
<a name="gs-data-quality-rule-types"></a>

 AWS Glue Studio fournit des types de règles intégrés qui facilitent la création de règles. Pour plus d'informations sur les types de règles, consultez la [Référence du type de règle DQDL](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-rule-types). 

### Schema
<a name="gs-data-quality-schema"></a>

 L'onglet **Schema** (Schéma) affiche les noms des colonnes et le type de données du nœud parent. Les schémas de plusieurs nœuds sont affichés. Vous pouvez consulter le schéma d'entrée, effectuer une recherche par nom de colonne et insérer la colonne dans l'éditeur de règles. 

![\[La capture d'écran illustre l'éditeur de règles avec une règle complète qui utilise le type de règle Exhaustivité.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data_quality_schema.png)


### Éditeur de règles
<a name="gs-dataquality-rule-editor"></a>

 L'éditeur de règles est un éditeur de texte permettant d'écrire et de modifier des règles. Si vous sélectionnez un type de règle dans le générateur de règles DQDL, il est ajouté à l'éditeur de règles. Vous pouvez ensuite spécifier des paramètres, ajouter des règles ou en modifier selon vos besoins en modifiant le texte. AWS Glue Studio valide les règles dans l'éditeur de règles et affiche les erreurs et les avertissements, le cas échéant. 

 **Erreurs et avertissements** 

 Si une règle n'est pas conforme à la syntaxe des règles DQDL, l'éditeur de règles affiche plusieurs indicateurs d'erreur visuels : 
+  L'éditeur de règles affiche une icône d'erreur de couleur rouge sur la ligne contenant l'erreur. 
+  L'éditeur de règles affiche le nombre d'erreurs à côté de l'icône d'erreur rouge. 
+  Lorsque vous cliquez sur la ligne contenant l'erreur, des descriptions et l'emplacement de l'erreur (ligne et colonne) s'affichent en bas de l'éditeur de règles. 

![\[La capture d'écran illustre l'éditeur de règles DQDL avec des indicateurs d'erreur sur la ligne 1 et le nombre d'erreurs au bas de l'éditeur de règles. La description de l'erreur se trouve ci-dessous.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data_quality_rule_editor_error.png)


## 
<a name="gs-data-quality-settings"></a>

 **Actions relatives à la qualité des données** 

 Par défaut, cette action n'est pas sélectionnée et la tâche s'exécute même si les règles de qualité des données ne sont pas respectées. 

 Choisissez l'une des actions suivantes. Vous pouvez utiliser des actions pour publier les résultats des tâches CloudWatch ou les arrêter en fonction de critères spécifiques. Les actions ne sont disponibles qu’une fois la règle correspondante créée. 
+  **Publier les résultats** sur CloudWatch : lorsque vous exécutez une tâche, ajoutez-les à CloudWatch. 
+  **Échec d'une tâche en cas de problème de qualité des données** : si les règles de qualité des données ne sont pas respectées, la tâche échoue. 

 **Sortie de transformation de la qualité des données** 
+  **Données d'origine** : permet de fournir les données d'entrée d'origine. Cette option est particulièrement utile pour interrompre la tâche en cas de détection de problèmes de qualité. 
+  **Métriques de qualité des données** : permet de générer les règles configurées et leur état de réussite ou d'échec. Cette option est utile si vous souhaitez effectuer une action personnalisée. 

 **Paramètres de sortie de qualité des données** 

 Définissez l'emplacement des résultats relatifs à la qualité des données en spécifiant l'emplacement Amazon S3 comme cible de sortie. 

# Configuration de la détection des anomalies dans les jobs AWS Glue ETL
<a name="data-quality-configuring-anomaly-detection-etl-jobs"></a>

 Pour commencer à détecter les anomalies dans AWS Glue Studio, ouvrez une tâche AWS Glue Studio et cliquez sur **Evaluate Data Quality Transform**. 

 En activant cette fonctionnalité, AWS Glue Data Quality analysera vos données au fil du temps afin de détecter les anomalies. Elle fournit des statistiques et des observations précieuses sur vos données, vous permettant de prendre des mesures en cas d’anomalie identifiée. 

 Consultez la documentation sur la [détection des anomalies](data-quality-anomaly-detection.md) pour comprendre le fonctionnement interne de cette fonctionnalité. 

## Activation de la détection des anomalies
<a name="data-quality-enabling-anomaly-detection"></a>

**Pour activer la détection d’anomalies dans AWS Glue Studio :**

1.  Choisissez le nœud **Qualité des données** dans votre tâche, puis cliquez sur l’onglet **Détection des anomalies**. Activez l’option **Activer la détection des anomalies**.   
![\[La capture d’écran montre la sélection de l’option « Activer la détection des anomalies ». Peut être activée ou désactivée.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-enable-anomaly-detection.png)

1.  Définissez les données à surveiller pour détecter les anomalies en choisissant **Ajouter un analyseur**. Vous pouvez remplir deux champs : statistiques et données. 
   +  Les **statistiques** sont des informations sur la forme et les autres propriétés de vos données. Vous pouvez sélectionner une ou plusieurs statistiques à la fois ou sélectionner **Toutes les statistiques**. Les statistiques incluent : l'exhaustivité, l'unicité, la moyenne, la somme StandardDeviation, l'entropie DistinctValuesCount, UniqueValueRatio etc. Pour plus de détails, consultez la documentation sur les [analyseurs](dqdl.md#dqdl-analyzers). 
   +  Les **données** sont les colonnes de votre jeu de données. Vous pouvez choisir toutes les colonnes ou des colonnes individuelles.   
![\[La capture d’écran montre les champs pour les statistiques et les données. Vous avez la possibilité de sélectionner les statistiques à appliquer à votre jeu de données et les colonnes concernées.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-add-analyzer.png)

1.  Choisissez **Ajouter une zone de détection d’anomalies** pour enregistrer vos modifications. Lorsque vous avez créé des analyseurs, vous pouvez les consulter dans la section **Portée de la détection d’anomalies**. 

    Vous pouvez également utiliser le menu **Actions** pour modifier vos analyseurs, ou choisir l’onglet **Éditeur de jeu de règles** et modifier l’analyseur directement dans le bloc-notes de l’éditeur de jeu de règles. Vous verrez les analyseurs que vous avez enregistrés juste en dessous de toutes les règles que vous avez créées. 

   ```
   Rules = [
   
   ]
   
   Analyzers = [
       Completeness “id”
   ]
   ```

 Une fois l'ensemble de règles et les analyseurs mis à jour configurés, AWS Glue Data Quality surveille en permanence les flux de données entrants. Le service peut signaler des anomalies potentielles par le biais d’alertes ou d’arrêts de tâches, en fonction de vos paramètres. Cette surveillance proactive permet de garantir la qualité et l’intégrité des données dans l’ensemble de vos pipelines de données. 

 Dans la section suivante, vous apprendrez comment surveiller efficacement les anomalies identifiées par le système. Vous apprendrez également à consulter et à analyser les statistiques de données recueillies par AWS Glue Data Quality. En outre, vous apprendrez à fournir des commentaires au modèle de machine learning qui alimente la fonctionnalité de détection des anomalies. Cette boucle de rétroaction est essentielle pour améliorer la précision du modèle et garantir qu’il peut détecter efficacement les anomalies conformes aux exigences spécifiques de votre entreprise et à vos modèles de données. 

# Affichage des scores de qualité des données et des anomalies
<a name="data-quality-viewing-scores-and-anomalies"></a>

 Dans cette section, nous allons explorer le tableau de bord de qualité des données et les différentes fonctionnalités qu’il fournit. 

## Visualisation et compréhension des métriques de qualité des données de haut niveau et des tendances
<a name="data-quality-visualize-metrics-and-trends"></a>

 Une fois que votre tâche a abouti, cliquez sur l’onglet **Qualité des données** pour afficher les scores de qualité des données et les anomalies. 

![\[La capture d’écran montre l’onglet Qualité des données sélectionné, ainsi que les scores et les métriques.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-visualize-data-quality-metrics.png)


 Les composants suivants de l’onglet Qualité des données fournissent des informations utiles. 

1.  Cliquez sur l’onglet **Qualité des données** pour afficher les métriques de qualité des données. 

1.  Sélectionnez un ID d’exécution de tâche spécifique pour afficher le score de qualité des données. 

1.  Ce volet affiche trois informations importantes. Vous pouvez choisir chacune d’elles pour accéder à des tables spécifiques afin de visualiser les anomalies, les statistiques de données ou les règles. 
   +  Score de qualité des données lorsque les règles sont configurées. 
   +  Nombre de statistiques recueillies par Règles et Analyseurs. 
   +  Nombre total d’anomalies détectées. 

1.  Ce graphique de tendance montre l’évolution de la qualité des données au fil du temps. Vous pouvez survoler la tendance et atteindre un moment précis où les scores de qualité des données se sont détériorés. 

1.  L’évolution des anomalies au fil du temps vous indiquera le nombre d’anomalies détectées au fil du temps. 

1.  Onglets : 
   +  L’onglet Règles est l’onglet par défaut qui affiche la liste de toutes les règles et leur état. Les règles évaluées sont utiles dans le cas de règles dynamiques pour afficher la valeur réelle à laquelle la règle a été évaluée. 
   +  L’onglet Statistiques répertorie toutes les statistiques, ce qui vous permet de visualiser les métriques et les tendances au fil du temps. 
   +  L’onglet Anomalies affiche la liste des anomalies détectées. 

## Affichage des anomalies et entraînement de l’algorithme de détection des anomalies
<a name="data-quality-visualize-anomalies"></a>

![\[La capture d’écran montre l’onglet Anomalies avec les métriques.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-visualize-anomaly-detection.png)


 Appels pour l’image ci-dessus : 

1.  Lorsque des anomalies sont détectées, cliquez sur l’anomalie ou sélectionnez l’onglet Anomalies. 

1.  AWS Glue Data Quality fournit une explication détaillée de l'anomalie, de la valeur réelle et de la plage prévue 

1.  AWS Glue Data Quality indique une courbe de tendance. Elle présente la valeur réelle, une tendance dérivée basée sur les valeurs réelles (ligne rouge), la limite supérieure et la limite inférieure 

1.  AWS Glue Data Quality recommande des règles de qualité des données qui peuvent être utilisées pour capturer les modèles futurs. Vous pouvez copier toutes les règles qui vous sont recommandées et les appliquer à votre nœud de qualité des données pour capturer efficacement ces modèles. 

1.  Vous pouvez fournir des entrées au modèle de machine learning (ML) pour exclure les valeurs anormales, afin de garantir que les futures exécutions détectent les anomalies avec précision. Si vous n'excluez pas explicitement les anomalies, AWS Glue Data Quality les prendra automatiquement en compte dans le modèle pour les prévisions futures. Il est important de noter que seule la dernière exécution reflétera les entrées de modèle que vous fournissez. Par exemple, si vous revenez en arrière et que vous avez exclu des points anormaux lors de quelques exécutions précédentes, le modèle ne reflétera pas ces modifications à moins que vous ne consultiez et ne mettiez à jour les entrées du modèle lors de la dernière exécution. Le modèle continuera à utiliser les entrées fournies précédemment jusqu’à ce que vous apportiez les ajustements nécessaires lors de la dernière exécution. En gérant activement l’exclusion des valeurs anormales, vous pouvez affiner la compréhension par le modèle de ML de ce qui constitue une anomalie par rapport à vos modèles de données et à vos exigences spécifiques, ce qui permet une détection plus précise des anomalies au fil du temps. 

## Affichage des statistiques des données au fil du temps et fourniture des informations d’entraînement
<a name="data-quality-visualize-data-statistics-over-time"></a>

 Parfois, vous souhaiterez peut-être consulter les statistiques ou les profils de données et voir comment ils progressent au fil du temps. Pour ce faire, choisissez **Statistiques** ou ouvrez l’onglet **Statistiques**. Vous pouvez ensuite consulter les dernières statistiques recueillies par AWS Glue Data Quality. 

![\[La capture d’écran montre l’onglet Statistiques avec les jeux de données et les statistiques de colonne.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-visualize-data-statistics-over-time.png)


 Cliquez sur **Afficher les tendances** pour voir l’évolution de chacune des statistiques au fil du temps. 

![\[La capture d’écran montre l’onglet Statistiques avec les jeux de données et les statistiques de colonne.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-view-trends-over-time.png)


1.  Vous pouvez sélectionner la statistique pour une colonne spécifiée. 

1.  Vous pouvez suivre l’évolution des tendances. 

1.  Vous pouvez sélectionner des valeurs anormales et choisir de les exclure ou de les inclure. En fournissant ces informations, l’algorithme exclura ou inclura les points de données anormaux identifiés et réentraînera le modèle. Ce processus de réentraînement garantit une détection précise des anomalies à l’avenir, car le modèle tire les leçons des commentaires que vous avez fournis pour déterminer les valeurs qui doivent être considérées comme anormales ou non. 

    Grâce à cette boucle de rétroaction, vous pouvez affiner la compréhension par l’algorithme de ce qui constitue une anomalie par rapport à vos modèles de données spécifiques et à vos exigences métier. En excluant les valeurs qui ne doivent pas être signalées comme des anomalies, ou en incluant des valeurs qui ont été oubliées, le modèle réentraîné pourra mieux différencier les points de données attendus des points de données réellement anormaux. 

# Qualité des données pour les tâches ETL dans les blocs-notes AWS Glue Studio
<a name="data-quality-gs-studio-notebooks"></a>

Dans ce didacticiel, vous apprendrez à utiliser la qualité des données deAWS Glue pour les tâches Extraction, transformation et chargement (ETL) dans les blocs-notes AWS Glue Studio. 

Vous pouvez utiliser des blocs-notes dans AWS Glue Studio pour modifier des scripts de tâche et afficher le résultat sans avoir à exécuter une tâche complète. Vous pouvez également ajouter du markdown et enregistrer les blocs-notes sous forme de fichiers `.ipynb` et de scripts de tâche. Notez que vous pouvez démarrer un bloc-notes sans installation locale de logiciels ni gestion de serveurs. Lorsque vous êtes satisfait de votre code, vous pouvez utiliser AWS Glue Studio pour convertir facilement votre bloc-notes en une tâche AWS Glue. 

L'ensemble de données que vous utilisez dans cet exemple comprend les données de paiement des prestataires de soins médicaux téléchargées à partir de deux ensembles de données *Data.cms.gov* : « Résumé des fournisseurs de systèmes de paiement potentiels pour les 100 principaux groupes liés au diagnostic - FY2011 » et « Données sur les frais d'hospitalisation pour l'exercice 2011 ». 

Après le téléchargement des données, nous avons modifié le jeu de données de manière à introduire quelques enregistrements erronés à la fin du fichier. Ce fichier modifié est situé dans un compartiment Amazon S3 public à l'adresse `s3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv`. 

## Conditions préalables
<a name="w2aac49c54c14"></a>
+  Rôle AWS Glue avec l'autorisation Amazon S3 d'écrire dans votre compartiment Amazon S3 de destination 
+  Un nouveau bloc-notes (consultez [Getting started with notebooks in AWS Glue Studio](https://docs.aws.amazon.com/glue/latest/ug/notebook-getting-started.html)) 

## Création d'une tâche ETL dans AWS Glue Studio
<a name="data-quality-notebooks-example"></a>

**Pour créer une tâche ETL**

1.  Changez la version de la séance pour AWS Glue 3.0. 

    Pour ce faire, supprimez toutes les cellules de code standard avec le magic suivant et exécutez la cellule. Notez que ce code standard est automatiquement fourni dans la première cellule lorsqu'un nouveau bloc-notes est créé.

   ```
   %glue_version 3.0
   ```

1.  Copiez et collez le code suivant et exécutez-le dans la cellule. 

   ```
   import sys
   from awsglue.transforms import *
   from awsglue.utils import getResolvedOptions
   from pyspark.context import SparkContext
   from awsglue.context import GlueContext
   from awsglue.job import Job
   
   sc = SparkContext.getOrCreate()
   glueContext = GlueContext(sc)
   spark = glueContext.spark_session
   job = Job(glueContext)
   ```

1.  Dans la cellule suivante, importez la classe `EvaluateDataQuality` qui évalue la qualité des données de AWS Glue. 

   ```
   from awsgluedq.transforms import EvaluateDataQuality
   ```

1. Dans la cellule suivante, lisez les données source à l'aide du fichier .csv stocké dans le compartiment public Amazon S3. 

   ```
   medicare = spark.read.format(
   "csv").option(
   "header", "true").option(
   "inferSchema", "true").load(
   's3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv')
   medicare.printSchema()
   ```

1.  Convertissez les données au format AWS Glue DynamicFrame. 

   ```
   from awsglue.dynamicframe import DynamicFrame
   medicare_dyf = DynamicFrame.fromDF(medicare,glueContext,"medicare_dyf")
   ```

1.  Créez l'ensemble de règles au format DQDL (Data Quality Definition Language).

   ```
   EvaluateDataQuality_ruleset = """
       Rules = [
           ColumnExists "Provider Id",
           IsComplete "Provider Id",
           ColumnValues  " Total Discharges " > 15
   ]
       ]
   """
   ```

1.  Validez le jeu de données par rapport à l'ensemble de règles. 

   ```
   EvaluateDataQualityMultiframe = EvaluateDataQuality().process_rows(
       frame=medicare_dyf,
       ruleset=EvaluateDataQuality_ruleset,
       publishing_options={
           "dataQualityEvaluationContext": "EvaluateDataQualityMultiframe",
           "enableDataQualityCloudWatchMetrics": False,
           "enableDataQualityResultsPublishing": False,
       },
       additional_options={"performanceTuning.caching": "CACHE_NOTHING"},
   )
   ```

1.  Passez en revue les résultats.

   ```
   ruleOutcomes = SelectFromCollection.apply(
       dfc=EvaluateDataQualityMultiframe,
       key="ruleOutcomes",
       transformation_ctx="ruleOutcomes",
   )
   
   ruleOutcomes.toDF().show(truncate=False)
   ```

    Sortie : 

   ```
   --------------------------------------+-------+-----------------------------------------------------+-------------------------------------------+
   |Rule                                  |Outcome|FailureReason                                        |EvaluatedMetrics                           |
   +--------------------------------------+-------+-----------------------------------------------------+-------------------------------------------+
   |ColumnExists "Provider Id"            |Passed |null                                                 |{}                                         |
   |IsComplete "Provider Id"              |Passed |null                                                 |{Column.Provider Id.Completeness -> 1.0}   |
   |ColumnValues " Total Discharges " > 15|Failed |Value: 11.0 does not meet the constraint requirement!|{Column. Total Discharges .Minimum -> 11.0}|
   +--------------------------------------+-------+-----------------------------------------------------+-------------------------------------------+
   ```

1.  Filtrez les lignes ayant réussi et examinez les lignes ayant échoué dans les résultats au niveau des lignes de la qualité des données. 

   ```
   owLevelOutcomes = SelectFromCollection.apply(
   dfc=EvaluateDataQualityMultiframe,
   key="rowLevelOutcomes",
   transformation_ctx="rowLevelOutcomes",
   )
   
   rowLevelOutcomes_df = rowLevelOutcomes.toDF() # Convert Glue DynamicFrame to SparkSQL DataFrame
   rowLevelOutcomes_df_passed = rowLevelOutcomes_df.filter(rowLevelOutcomes_df.DataQualityEvaluationResult == "Passed") # Filter only the Passed records.
   rowLevelOutcomes_df.filter(rowLevelOutcomes_df.DataQualityEvaluationResult == "Failed").show(5, truncate=False) # Review the Failed records
   ```

    Sortie : 

   ```
   +----------------------------------------+-----------+-------------------------------------+--------------------------+-------------+--------------+-----------------+------------------------------------+------------------+-------------------------+------------------------+-------------------------+--------------------------+----------------------------------------+----------------------------+---------------------------+
   |DRG Definition                          |Provider Id|Provider Name                        |Provider Street Address   |Provider City|Provider State|Provider Zip Code|Hospital Referral Region Description| Total Discharges | Average Covered Charges | Average Total Payments |Average Medicare Payments|DataQualityRulesPass      |DataQualityRulesFail                    |DataQualityRulesSkip        |DataQualityEvaluationResult|
   +----------------------------------------+-----------+-------------------------------------+--------------------------+-------------+--------------+-----------------+------------------------------------+------------------+-------------------------+------------------------+-------------------------+--------------------------+----------------------------------------+----------------------------+---------------------------+
   |039 - EXTRACRANIAL PROCEDURES W/O CC/MCC|10005      |MARSHALL MEDICAL CENTER SOUTH        |2505 U S HIGHWAY 431 NORTH|BOAZ         |AL            |35957            |AL - Birmingham                     |14                |$15131.85                |$5787.57                |$4976.71                 |[IsComplete "Provider Id"]|[ColumnValues " Total Discharges " > 15]|[ColumnExists "Provider Id"]|Failed                     |
   |039 - EXTRACRANIAL PROCEDURES W/O CC/MCC|10046      |RIVERVIEW REGIONAL MEDICAL CENTER    |600 SOUTH THIRD STREET    |GADSDEN      |AL            |35901            |AL - Birmingham                     |14                |$67327.92                |$5461.57                |$4493.57                 |[IsComplete "Provider Id"]|[ColumnValues " Total Discharges " > 15]|[ColumnExists "Provider Id"]|Failed                     |
   |039 - EXTRACRANIAL PROCEDURES W/O CC/MCC|10083      |SOUTH BALDWIN REGIONAL MEDICAL CENTER|1613 NORTH MCKENZIE STREET|FOLEY        |AL            |36535            |AL - Mobile                         |15                |$25411.33                |$5282.93                |$4383.73                 |[IsComplete "Provider Id"]|[ColumnValues " Total Discharges " > 15]|[ColumnExists "Provider Id"]|Failed                     |
   |039 - EXTRACRANIAL PROCEDURES W/O CC/MCC|30002      |BANNER GOOD SAMARITAN MEDICAL CENTER |1111 EAST MCDOWELL ROAD   |PHOENIX      |AZ            |85006            |AZ - Phoenix                        |11                |$34803.81                |$7768.90                |$6951.45                 |[IsComplete "Provider Id"]|[ColumnValues " Total Discharges " > 15]|[ColumnExists "Provider Id"]|Failed                     |
   |039 - EXTRACRANIAL PROCEDURES W/O CC/MCC|30010      |CARONDELET ST  MARYS HOSPITAL        |1601 WEST ST MARY'S ROAD  |TUCSON       |AZ            |85745            |AZ - Tucson                         |12                |$35968.50                |$6506.50                |$5379.83                 |[IsComplete "Provider Id"]|[ColumnValues " Total Discharges " > 15]|[ColumnExists "Provider Id"]|Failed                     |
   +----------------------------------------+-----------+-------------------------------------+--------------------------+-------------+--------------+-----------------+------------------------------------+------------------+-------------------------+------------------------+-------------------------+--------------------------+----------------------------------------+----------------------------+---------------------------+
   only showing top 5 rows
   ```

    Notez que AWS Glue Data Quality a ajouté quatre nouvelles colonnes (DataQualityRulesPass DataQualityRulesFail, DataQualityRulesSkip, et DataQualityEvaluationResult). Ces colonnes indiquent les enregistrements qui ont réussi, les enregistrements qui ont échoué, les règles ignorées pour l'évaluation au niveau des lignes et les résultats globaux au niveau des lignes. 

1.  Écrivez la sortie dans un compartiment Amazon S3 pour analyser les données et visualiser les résultats.

   ```
   #Write the Passed records to the destination. 
   
   glueContext.write_dynamic_frame.from_options(
          frame = rowLevelOutcomes_df_passed,
          connection_type = "s3",
          connection_options = {"path": "s3://glue-sample-target/output-dir/medicare_parquet"},
          format = "parquet")
   ```

# Référence DQDL (Data Quality Definition Language)
<a name="dqdl"></a>

Le langage DQDL (Data Quality Definition Language) est un langage spécifique au domaine que vous utilisez pour définir des règles pour AWS Glue Data Quality.

Ce guide présente les concepts clés de DQDL pour vous aider à vous familiariser avec ce langage. Il fournit également une référence pour les types de règles DQDL, avec syntaxe et exemples. Avant d'utiliser ce guide, nous vous recommandons de vous familiariser avec AWS Glue Data Quality. Pour de plus amples informations, veuillez consulter [AWS Glue Qualité des données](glue-data-quality.md). 

**Note**  
 DynamicRules ne sont pris en charge que dans l'AWS GlueETL. 

**Contents**
+ [Syntaxe DQDL](#dqdl-syntax)
  + [Structure des règles](#dqdl-syntax-rule-structure)
  + [Règles composites](#dqdl-syntax-rule-composition)
    + [Fonctionnement des règles composites](#dqdl-syntax-composite-rules)
  + [Expressions](#dqdl-syntax-rule-expressions)
    + [Mots-clés pour NULL, EMPTY et WHITESPACES\$1ONLY](#dqdl-keywords-null-empty-whitespaces_only)
    + [Filtrage avec la clause Where](#dqdl-filtering-data-in-dqdl)
  + [Constantes](#dqdl-constants)
  + [Étiquettes](#dqdl-labels)
    + [Syntaxe pour les étiquettes DQDL](#dqdl-labels-syntax)
      + [Contraintes liées aux étiquettes](#dqdl-labels-constraints)
    + [Récupération d'étiquettes DQDL](#dqdl-labels-retrieving)
      + [Résultats des règles](#dqdl-labels-rule-outcomes)
      + [Résultats au niveau des lignes](#dqdl-labels-row-level-results)
      + [Réponse de l'API](#dqdl-labels-api-response)
  + [Règles dynamiques](#dqdl-dynamic-rules)
  + [Analyseurs](#dqdl-analyzers)
  + [Commentaires](#dqdl-syntax-comments)
+ [Référence du type de règle DQDL](dqdl-rule-types.md)
  + [AggregateMatch](dqdl-rule-types-AggregateMatch.md)
  + [ColumnCorrelation](dqdl-rule-types-ColumnCorrelation.md)
  + [ColumnCount](dqdl-rule-types-ColumnCount.md)
  + [ColumnDataType](dqdl-rule-types-ColumnDataType.md)
  + [ColumnExists](dqdl-rule-types-ColumnExists.md)
  + [ColumnLength](dqdl-rule-types-ColumnLength.md)
  + [ColumnNamesMatchPattern](dqdl-rule-types-ColumnNamesMatchPattern.md)
  + [ColumnValues](dqdl-rule-types-ColumnValues.md)
  + [Intégralité](dqdl-rule-types-Completeness.md)
  + [CustomSQL](dqdl-rule-types-CustomSql.md)
  + [DataFreshness](dqdl-rule-types-DataFreshness.md)
  + [DatasetMatch](dqdl-rule-types-DatasetMatch.md)
  + [DistinctValuesCount](dqdl-rule-types-DistinctValuesCount.md)
  + [Entropie](dqdl-rule-types-Entropy.md)
  + [IsComplete](dqdl-rule-types-IsComplete.md)
  + [IsPrimaryKey](dqdl-rule-types-IsPrimaryKey.md)
  + [IsUnique](dqdl-rule-types-IsUnique.md)
  + [Mean](dqdl-rule-types-Mean.md)
  + [ReferentialIntegrity](dqdl-rule-types-ReferentialIntegrity.md)
  + [RowCount](dqdl-rule-types-RowCount.md)
  + [RowCountMatch](dqdl-rule-types-RowCountMatch.md)
  + [StandardDeviation](dqdl-rule-types-StandardDeviation.md)
  + [Somme](dqdl-rule-types-Sum.md)
  + [SchemaMatch](dqdl-rule-types-SchemaMatch.md)
  + [Unicité](dqdl-rule-types-Uniqueness.md)
  + [UniqueValueRatio](dqdl-rule-types-UniqueValueRatio.md)
  + [DetectAnomalies](dqdl-rule-types-DetectAnomalies.md)
  + [FileFreshness](dqdl-rule-types-FileFreshness.md)
  + [FileMatch](dqdl-rule-types-FileMatch.md)
  + [FileUniqueness](dqdl-rule-types-FileUniqueness.md)
  + [FileSize](dqdl-rule-types-FileSize.md)

## Syntaxe DQDL
<a name="dqdl-syntax"></a>

Un document DQDL est sensible à la casse et contient un *jeu de règles*, qui regroupe les règles individuelles de qualité des données. Pour construire un jeu de règles, vous devez créer une liste nommée `Rules` (en majuscules), délimitée par une paire de crochets. La liste doit contenir une ou plusieurs règles DQDL séparées par des virgules, comme dans l’exemple suivant.

```
Rules = [
   IsComplete "order-id",
   IsUnique "order-id"
]
```

### Structure des règles
<a name="dqdl-syntax-rule-structure"></a>

La structure d’une règle DQDL dépend du type de la règle. Toutefois, les règles DQDL respectent généralement le format suivant.

```
<RuleType> <Parameter> <Parameter> <Expression>
```

`RuleType` est le nom sensible à la casse du type de règle que vous souhaitez configurer. Par exemple, `IsComplete`, `IsUnique` ou `CustomSql`. Les paramètres varient en fonction du type de règle. Pour obtenir une référence complète des types de règles DQDL et de leurs paramètres, consultez [Référence du type de règle DQDL](dqdl-rule-types.md).

### Règles composites
<a name="dqdl-syntax-rule-composition"></a>

 DQDL prend en charge les opérateurs logiques suivants que vous pouvez utiliser pour combiner des règles. Ces règles sont appelées règles composites. 

**and**  
L’opérateur logique `and` génère `true` si et seulement si les règles qu’il connecte sont `true`. Sinon, la règle combinée génère `false`. Chaque règle que vous connectez à l’opérateur `and` doit être entourée de parenthèses.  
L’exemple suivant utilise l’opérateur `and` pour combiner deux règles DQDL.  

```
(IsComplete "id") and (IsUnique "id")
```

**or**  
L’opérateur logique `or` génère `true` si et seulement si une ou plusieurs des règles qu’il connecte sont `true`. Chaque règle que vous connectez à l'opérateur `or` doit être entourée de parenthèses.  
L'exemple suivant utilise l'opérateur `or` pour combiner deux règles DQDL.  

```
(RowCount "id" > 100) or (IsPrimaryKey "id")
```

Le même opérateur peut être utilisé pour connecter plusieurs règles. La combinaison de règles suivante est donc autorisée.

```
(Mean "Star_Rating" > 3) and (Mean "Order_Total" > 500) and (IsComplete "Order_Id")
```

Vous pouvez combiner les opérateurs logiques en une seule expression. Par exemple :

```
(Mean "Star_Rating" > 3) and ((Mean "Order_Total" > 500) or (IsComplete "Order_Id"))
```

Vous pouvez également créer des règles imbriquées plus complexes.

```
(RowCount > 0) or ((IsComplete "colA") and (IsUnique "colA"))
```

#### Fonctionnement des règles composites
<a name="dqdl-syntax-composite-rules"></a>

 Par défaut, les règles composites sont évaluées en tant que règles individuelles pour l’ensemble du jeu de données ou de la table, puis les résultats sont combinés. En d’autres termes, elles évaluent d’abord l’ensemble de la colonne, puis appliquent l’opérateur. Ce comportement par défaut est expliqué ci-dessous à l’aide d’un exemple : 

```
# Dataset

+------+------+
|myCol1|myCol2|
+------+------+
|     2|     1|
|     0|     3|
+------+------+

# Overall outcome

+----------------------------------------------------------+-------+
|Rule                                                      |Outcome|
+----------------------------------------------------------+-------+
|(ColumnValues "myCol1" > 1) OR (ColumnValues "myCol2" > 2)|Failed |
+----------------------------------------------------------+-------+
```

 Dans l’exemple ci-dessus, AWS Glue Data Quality évalue d’abord `(ColumnValues "myCol1" > 1)`, ce qui entraînera un échec. Ensuite, il évaluera `(ColumnValues "myCol2" > 2)` ce qui entraînera également un échec. La combinaison des deux résultats sera considérée comme un ÉCHEC. 

 Toutefois, si vous préférez un comportement de type SQL, dans lequel vous devez évaluer la ligne entière, vous devez définir explicitement le paramètre `ruleEvaluation.scope` comme indiqué dans `additionalOptions`, dans l’extrait de code ci-dessous. 

```
object GlueApp {
  val datasource = glueContext.getCatalogSource(
    database="<db>",
    tableName="<table>",
    transformationContext="datasource"
  ).getDynamicFrame()

  val ruleset = """
    Rules = [
        (ColumnValues "age" >= 26) OR (ColumnLength "name" >= 4)        
    ]
  """

  val dq_results = EvaluateDataQuality.processRows(
    frame=datasource,
    ruleset=ruleset,
    additionalOptions=JsonOptions("""
        {
          "compositeRuleEvaluation.method":"ROW"
        }
      """
    )
  )
}
```

 Dans AWS Glue Data Catalog, vous pouvez facilement configurer cette option dans l'interface utilisateur, comme indiqué ci-dessous. 

![\[La capture d’écran montre une fenêtre de paramètres de règles composites dans laquelle vous pouvez choisir la configuration d’évaluation des règles entre ligne et colonne. Si vous choisissez Row, les règles composites se comporteront comme une règle unique évaluant la ligne entière. Si vous choisissez Column, les règles composites évalueront les règles individuelles dans l’ensemble du jeu de données et combineront les résultats.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/composite-rule-settings.png)


 Une fois définies, les règles composites se comporteront comme une règle unique évaluant la ligne entière. L’exemple suivant illustre ce comportement. 

```
# Row Level outcome

+------+------+------------------------------------------------------------+---------------------------+
|myCol1|myCol2|DataQualityRulesPass                                        |DataQualityEvaluationResult|
+------+------+------------------------------------------------------------+---------------------------+
|2     |1     |[(ColumnValues "myCol1" > 1) OR (ColumnValues "myCol2" > 2)]|Passed                     |
|0     |3     |[(ColumnValues "myCol1" > 1) OR (ColumnValues "myCol2" > 2)]|Passed                     |
+------+------+------------------------------------------------------------+---------------------------+
```

 Certaines règles ne peuvent pas être prises en charge dans cette fonctionnalité, car leur résultat global repose sur des seuils ou des ratios. Elles sont répertoriées ci-dessous. 

 Règles basées sur des ratios : 
+  Exhaustivité 
+  DatasetMatch 
+  ReferentialIntegrity 
+  Unicité 

 Règles dépendantes de seuils : 

 Lorsque les règles suivantes sont incluses dans un seuil, elles ne sont pas prises en charge. Cependant, les règles qui n’impliquent pas `with threshold` restent prises en charge. 
+  ColumnDataType 
+  ColumnValues 
+  CustomSQL 

### Expressions
<a name="dqdl-syntax-rule-expressions"></a>

Si un type de règle ne produit pas de réponse booléenne, vous devez fournir une expression en tant que paramètre afin de créer une réponse booléenne. Par exemple, la règle suivante vérifie la moyenne de toutes les valeurs d’une colonne par rapport à une expression afin de renvoyer un résultat vrai ou faux.

```
Mean "colA" between 80 and 100
```

Certains types de règles tels que `IsUnique` et `IsComplete` renvoient déjà une réponse booléenne.

Le tableau suivant répertorie les expressions pouvant être utilisées dans les règles DQDL. 


**Expressions DQDL prises en charge**  

| Expression | Description | Exemple | 
| --- | --- | --- | 
| =x | Correspond à true si la réponse du type de règle est égale àx. |  <pre>Completeness "colA" = "1.0",<br />ColumnValues "colA" = "2022-06-30"</pre>  | 
|  \$1=x  | x devient vrai si la réponse du type de règle n'est pas égale àx. |  <pre>ColumnValues "colA" != "a",<br />ColumnValues "colA" != "2022-06-30"</pre>  | 
| > x | Correspond à true si la réponse du type de règle est supérieure àx. |  <pre>ColumnValues "colA" > 10</pre>  | 
| < x | Correspond à true si la réponse du type de règle est inférieure àx. |  <pre>ColumnValues "colA" < 1000,<br />ColumnValues "colA" < "2022-06-30"</pre>  | 
| >= x | Permet de déterminer true si la réponse du type de règle est supérieure ou égale àx. |  <pre>ColumnValues "colA" >= 10</pre>  | 
| <= x | Permet de déterminer true si la réponse du type de règle est inférieure ou égale àx. |  <pre>ColumnValues "colA" <= 1000</pre>  | 
| entre x  et y | Se traduit par true si la réponse du type de règle se situe dans une plage spécifiée (exclusif). Utilisez ce type d’expression uniquement pour les types numériques et date. |  <pre>Mean "colA" between 8 and 100,<br />ColumnValues "colA" between "2022-05-31" and "2022-06-30"</pre>  | 
|  pas entre x et y  |  Se traduit par true si la réponse du type de règle ne se situe pas dans une plage spécifiée (inclusif). Vous ne devez utiliser ce type d’expression que pour les types numériques et les dates.  |  <pre>ColumnValues "colA" not between "2022-05-31" and "2022-06-30"</pre>  | 
| dans [a, b, c, ...] | Se traduit par true si la réponse du type de règle se trouve dans le jeu spécifié. |  <pre>ColumnValues "colA" in [ 1, 2, 3 ],<br />ColumnValues "colA" in [ "a", "b", "c" ]</pre>  | 
| pas dans [a, b, c, ...] | Se traduit par true si la réponse du type de règle ne se trouve pas dans le jeu spécifié. |  <pre>ColumnValues "colA" not in [ 1, 2, 3 ],<br />ColumnValues "colA" not in [ "a", "b", "c" ]</pre>  | 
| allumettes /ab\$1c/i | Se traduit par true si la réponse du type de règle correspond à une expression régulière. |  <pre>ColumnValues "colA" matches "[a-zA-Z]*"</pre>  | 
| ne correspond pas /ab\$1c/i | Se traduit par true si la réponse du type de règle ne correspond pas à une expression régulière. |  <pre>ColumnValues "colA" not matches "[a-zA-Z]*"</pre>  | 
| now() | Fonctionne uniquement avec le type de règle ColumnValues pour créer une expression de date. |  <pre>ColumnValues "load_date" > (now() - 3 days)</pre>  | 
| matches/in […]/not matches/notdans [...] with threshold | Spécifie le pourcentage de valeurs qui correspondent aux conditions de la règle. Fonctionne uniquement avec les types de règles ColumnValues, ColumnDataType et CustomSQL. |  <pre>ColumnValues "colA" in ["A", "B"] with threshold > 0.8,<br />ColumnValues "colA" matches "[a-zA-Z]*" with threshold between 0.2 and 0.9<br />ColumnDataType "colA" = "Timestamp" with threshold > 0.9</pre>  | 

#### Mots-clés pour NULL, EMPTY et WHITESPACES\$1ONLY
<a name="dqdl-keywords-null-empty-whitespaces_only"></a>

 Si vous souhaitez vérifier si une colonne de chaîne contient une valeur nulle, vide ou une chaîne contenant uniquement des espaces blancs, vous pouvez utiliser les mots clés suivants : 
+  NULL/null : ce mot clé se traduit par true pour une valeur `null` d’une colonne de chaîne. 

   `ColumnValues "colA" != NULL with threshold > 0.5` renverrait true si plus de 50 % de vos données ne contiennent pas de valeurs nulles. 

   `(ColumnValues "colA" = NULL) or (ColumnLength "colA" > 5)` renverrait true pour toutes les lignes qui ont une valeur nulle ou dont la longueur est supérieure à 5. *Notez que cela nécessitera l'utilisation de l'option « compositeRuleEvaluation .method » = « ROW ».* 
+  EMPTY/empty : ce mot clé se traduit par true pour une valeur de chaîne vide (“”) dans une colonne de chaîne. Certains formats de données transforment les valeurs nulles d’une colonne de chaînes en chaînes vides. Ce mot clé permet de filtrer les chaînes vides dans vos données. 

   `(ColumnValues "colA" = EMPTY) or (ColumnValues "colA" in ["a", "b"])` renverrait true si une ligne est vide, « a » ou « b ». *Notez que cela nécessite l'utilisation de l'option « compositeRuleEvaluation .method » = « ROW ».* 
+  WHITESPACES\$1ONLY/whitespaces\$1only : ce mot clé prend la valeur true pour une chaîne contenant uniquement des espaces blancs (« ») dans une colonne de chaîne. 

   `ColumnValues "colA" not in ["a", "b", WHITESPACES_ONLY]` renverrait true si une ligne n’est ni « a » ni « b », ni de simples espaces blancs. 

   Règles prises en charge : 
  +  [ColumnValues](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-rule-types-ColumnValues) 

 Pour une expression numérique ou basée sur une date, si vous souhaitez vérifier si une colonne contient une valeur nulle, vous pouvez utiliser les mots clés suivants. 
+  NULL/null : ce mot clé se traduit par true pour une valeur nulle d’une colonne de chaîne. 

   `ColumnValues "colA" in [NULL, "2023-01-01"]` renverrait true si une date de votre colonne est `2023-01-01` ou nulle. 

   `(ColumnValues "colA" = NULL) or (ColumnValues "colA" between 1 and 9)` renverrait true pour toutes les lignes qui ont une valeur nulle ou dont les valeurs sont comprises entre 1 et 9. *Notez que cela nécessitera l'utilisation de l'option « compositeRuleEvaluation .method » = « ROW ».* 

   Règles prises en charge : 
  +  [ColumnValues](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-rule-types-ColumnValues) 

#### Filtrage avec la clause Where
<a name="dqdl-filtering-data-in-dqdl"></a>

**Note**  
 La clause Where n'est prise en charge que dans AWS Glue 4.0. 

 Vous pouvez filtrer vos données lorsque vous créez des règles. Cela s’avère utile lorsque vous souhaitez appliquer des règles conditionnelles. 

```
<DQDL Rule> where "<valid SparkSQL where clause> "
```

 Le filtre doit être spécifié avec le mot clé `where`, suivi d’une instruction SparkSQL valide placée entre guillemets `("")`. 

 Si vous souhaitez ajouter la clause Where à une règle avec un seuil, elle doit être spécifiée avant la condition de seuil. 

```
<DQDL Rule> where "valid SparkSQL statement>" with threshold <threshold condition>
```

 Avec cette syntaxe, vous pouvez écrire des règles comme les suivantes. 

```
Completeness "colA" > 0.5 where "colB = 10"
ColumnValues "colB" in ["A", "B"] where "colC is not null" with threshold > 0.9
ColumnLength "colC" > 10 where "colD != Concat(colE, colF)"
```

 Nous allons vérifier que l’instruction SparkSQL fournie est valide. Si elle n’est pas valide, l’évaluation des règles échouera et nous lancerons un `IllegalArgumentException` au format suivant : 

```
Rule <DQDL Rule> where "<invalid SparkSQL>" has provided an invalid where clause :
<SparkSQL Error>
```

 **Comportement de la clause Where lorsque l’identification des enregistrements d’erreur au niveau des lignes est activée** 

 Avec AWS Glue Data Quality, vous pouvez identifier les enregistrements spécifiques qui ont échoué. Lorsque vous appliquez une clause Where à des règles qui prennent en charge les résultats au niveau des lignes, nous étiquetons les lignes filtrées par la clause Where en tant que `Passed`. 

 Si vous préférez étiqueter séparément les lignes filtrées en tant que `SKIPPED`, vous pouvez définir les paramètres `additionalOptions` suivants pour la tâche ETL. 

```
object GlueApp {
  val datasource = glueContext.getCatalogSource(
    database="<db>",
    tableName="<table>",
    transformationContext="datasource"
  ).getDynamicFrame()

  val ruleset = """
    Rules = [
       IsComplete "att2" where "att1 = 'a'"        
    ]
  """

  val dq_results = EvaluateDataQuality.processRows(
    frame=datasource,
    ruleset=ruleset,
    additionalOptions=JsonOptions("""
        {
          "rowLevelConfiguration.filteredRowLabel":"SKIPPED"
        }
      """
    )
  )
}
```

 À titre d’exemple, reportez-vous à la règle et à la trame de données suivantes : 

```
IsComplete att2 where "att1 = 'a'"
```


| id | att1 | att2 | Résultats au niveau des lignes (par défaut) | Résultats au niveau des lignes (option ignorée) | Commentaires | 
| --- | --- | --- | --- | --- | --- | 
| 1 | a | f | PASSED | PASSED |  | 
| 2 | b | d | PASSED | SKIPPED | La ligne est filtrée, car att1 n’est pas "a". | 
| 3 | a | null | ÉCHEC | ÉCHEC |  | 
| 4 | a | f | PASSED | PASSED |  | 
| 5 | b | null | PASSED | SKIPPED | La ligne est filtrée, car att1 n’est pas "a". | 
| 6 | a | f | PASSED | PASSED |  | 

### Constantes
<a name="dqdl-constants"></a>

 Dans DQDL, vous pouvez définir des valeurs constantes et les référencer tout au long de votre script. Cela permet d'éviter les problèmes liés aux limites de taille des requêtes, par exemple lorsque vous travaillez avec des instructions SQL volumineuses susceptibles de dépasser les limites autorisées. En affectant ces valeurs aux constantes, vous pouvez simplifier votre DQDL et éviter d'atteindre ces limites. 

 L'exemple suivant montre comment définir et utiliser une constante : 

```
mySql = "select count(*) from primary"

Rules = [
    CustomSql $mySql between 0 and 100
]
```

 Dans cet exemple, la requête SQL est affectée à la constante`mySql`, qui est ensuite référencée dans la règle à l'aide du `$` préfixe. 

### Étiquettes
<a name="dqdl-labels"></a>

 Les étiquettes constituent un moyen efficace d'organiser et d'analyser les résultats relatifs à la qualité des données. Vous pouvez interroger les résultats à l'aide d'étiquettes spécifiques pour identifier les règles défaillantes au sein de catégories particulières, compter les résultats des règles par équipe ou par domaine et créer des rapports ciblés pour les différentes parties prenantes. 

 Par exemple, vous pouvez appliquer toutes les règles relatives à l'équipe financière à l'aide d'une étiquette `"team=finance"` et générer un rapport personnalisé pour présenter les indicateurs de qualité spécifiques à l'équipe financière. Vous pouvez étiqueter les règles de haute priorité avec `"criticality=high"` pour hiérarchiser les efforts de correction. Les étiquettes peuvent être créées dans le cadre du DQDL. Vous pouvez interroger les étiquettes dans le cadre des résultats des règles, des résultats au niveau des lignes et des réponses des API, ce qui facilite l'intégration à vos flux de travail de surveillance et de reporting existants. 

**Note**  
 Les étiquettes ne sont disponibles que dans AWS Glue ETL et ne sont pas disponibles dans le Data Quality basé sur le catalogue de données AWS Glue. 

#### Syntaxe pour les étiquettes DQDL
<a name="dqdl-labels-syntax"></a>

 Le DQDL prend en charge les étiquettes par défaut et spécifiques aux règles. Les libellés par défaut sont définis au niveau de l'ensemble de règles et s'appliquent automatiquement à toutes les règles de cet ensemble de règles. Les règles individuelles peuvent également avoir leurs propres étiquettes, et comme les étiquettes sont implémentées sous forme de paires clé-valeur, les étiquettes spécifiques aux règles peuvent remplacer les étiquettes par défaut lorsque vous utilisez la même clé. 

 L'exemple suivant montre comment utiliser les libellés par défaut et spécifiques aux règles : 

```
DefaultLabels=["frequency"="monthly"]

Rules = [
    // Auto includes the default label ["frequency"="monthly"]
    ColumnValues "col" > 21,
    // Add ["foo"="bar"] to default label. Labels for this rule would be ["frequency"="monthly", "foo"="bar"]
    Rule 1 with threshold > 0.8 labels=["foo"="bar"],
    // Override default label. Labels for this rule would be ["frequency"="daily", "foo"="bar"]
    Rule 2 with threshold > 0.8 labels=["foo"="bar", "frequency"="daily"]
    // Labels must be applied to the entire composite rule (parentheses required)
    (Rule 1 AND Rule 2) labels=["foo"="bar]
]
```

##### Contraintes liées aux étiquettes
<a name="dqdl-labels-constraints"></a>

 Les étiquettes sont soumises aux contraintes suivantes : 
+ Un maximum de 10 étiquettes par règle DQDL.
+ Les étiquettes sont spécifiées sous forme de liste de paires clé-valeur.
+ La clé et la valeur de l'étiquette distinguent les majuscules et minuscules.
+ La longueur maximale de la clé d'étiquette est de 128 caractères. La clé d'étiquette ne doit pas être vide ou nulle.
+ La longueur maximale de la valeur d'étiquette est de 256 caractères. La valeur de l'étiquette peut être vide ou nulle.

#### Récupération d'étiquettes DQDL
<a name="dqdl-labels-retrieving"></a>

 Vous pouvez récupérer des étiquettes DQDL à partir des résultats des règles, des résultats au niveau des lignes et des réponses d'API. 

##### Résultats des règles
<a name="dqdl-labels-rule-outcomes"></a>

 Les étiquettes DQDL sont toujours visibles dans les résultats des règles. Aucune configuration supplémentaire n'est nécessaire pour les activer. 

##### Résultats au niveau des lignes
<a name="dqdl-labels-row-level-results"></a>

 Les étiquettes DQDL sont désactivées par défaut dans les résultats au niveau des lignes, mais elles peuvent être activées dans. `AdditionalOptions` `EvaluateDataQuality` 

 L'exemple suivant montre comment activer les étiquettes dans les résultats au niveau des lignes : 

```
val evaluateResult = EvaluateDataQuality.processRows(
    frame=AmazonS3_node1754591511068,
    ruleset=example_ruleset,
    publishingOptions=JsonOptions("""{
        "dataQualityEvaluationContext": "evaluateResult",
        "enableDataQualityCloudWatchMetrics": "true",
        "enableDataQualityResultsPublishing": "true"
    }"""),
    additionalOptions=JsonOptions("""{
        "performanceTuning.caching":"CACHE_NOTHING",
        "observations.scope":"ALL",
        "rowLevelConfiguration.ruleWithLabels":"ENABLED"
    }""")
)
```

 Lorsqu'elle est activée, la trame de données de résultats au niveau des lignes inclut des étiquettes pour chaque règle dans les colonnes`DataQualityRulesPass`, et`DataQualityRulesFail`. `DataQualityRulesSkip` 

##### Réponse de l'API
<a name="dqdl-labels-api-response"></a>

 Les étiquettes DQDL sont toujours visibles dans les réponses de l'API sous un nouveau champ `Labels` de l'`RuleResults`objet. 

 L'exemple suivant montre des libellés dans une réponse d'API : 

```
{
    "ResultId": "dqresult-example",
    "ProfileId": "dqprofile-example",
    "Score": 0.6666666666666666,
    "RulesetName": "EvaluateDataQuality_node1754591514205",
    "EvaluationContext": "EvaluateDataQuality_node1754591514205",
    "StartedOn": "2025-08-22T19:36:10.448000+00:00",
    "CompletedOn": "2025-08-22T19:36:16.368000+00:00",
    "JobName": "anniezc-test-labels",
    "JobRunId": "jr_068f6d7a45074d9105d14e4dee09db12c3b95664b45f6ee44fa29ed7e5619ba8",
    "RuleResults": [
        {
            "Name": "Rule_0",
            "Description": "IsComplete colA",
            "EvaluationMessage": "Input data does not include column colA!",
            "Result": "FAIL",
            "EvaluatedMetrics": {},
            "EvaluatedRule": "IsComplete colA",
            "Labels": {
                "frequency": "monthly"
            }
        },
        {
            "Name": "Rule_1",
            "Description": "Rule 1 with threshold > 0.8",
            "Result": "PASS",
            "EvaluatedMetrics": {},
            "EvaluatedRule": "Rule 1 with threshold > 0.8",
            "Labels": {
                "frequency": "monthly",
                "foo": "bar"
            }
        },
        {
            "Name": "Rule_3",
            "Description": "Rule 2 with threshold > 0.8",
            "Result": "PASS",
            "EvaluatedMetrics": {},
            "EvaluatedRule": "Rule 2 with threshold > 0.8",
            "Labels": {
                "frequency": "daily",
                "foo": "bar"
            }
        }
    ]
}
```

### Règles dynamiques
<a name="dqdl-dynamic-rules"></a>

**Note**  
Les règles dynamiques ne sont prises en charge que dans AWS Glue ETL et ne le sont pas dans AWS Glue Data Catalog.

 Vous pouvez désormais créer des règles dynamiques pour comparer les métriques actuelles produites par vos règles avec leurs valeurs historiques. Ces comparaisons historiques sont rendues possibles en utilisant l’opérateur `last()` dans les expressions. Par exemple, la règle `RowCount > last()` fonctionne lorsque le nombre de lignes de l’exécution en cours est supérieur au nombre de lignes précédent le plus récent pour le même jeu de données. `last()` prend un argument de nombre naturel facultatif décrivant le nombre de métriques précédentes à prendre en compte ; `last(k)` où `k >= 1` renvoyera aux dernières métriques `k`. 
+ Si aucun point de données n’est disponible, `last(k)` renverra la valeur par défaut 0,0.
+ Si moins de `k` métriques sont disponibles, `last(k)` renverra toutes les métriques précédentes.

 Pour former des expressions valides, utilisez `last(k)`, où `k > 1` nécessite une fonction d’agrégation pour réduire plusieurs résultats historiques en un seul nombre. Par exemple, `RowCount > avg(last(5))` vérifiera si le nombre de lignes du jeu de données actuel est strictement supérieur à la moyenne des cinq dernières lignes du même jeu de données. `RowCount > last(5)` générera une erreur, car le nombre de lignes du jeu de données actuel ne peut pas être comparé de manière significative à une liste. 

 Fonctions d’agrégation prises en charge : 
+ `avg`
+ `median`
+ `max`
+ `min`
+ `sum`
+ `std` (écart-type)
+ `abs` (valeur absolue)
+  `index(last(k), i)` permet de sélectionner la `i`e valeur la plus récente parmi les dernières `k`. `i` est indexé à partir de zéro, donc `index(last(3), 0)` renverra le point de données le plus récent et `index(last(3), 3)` générera une erreur, car il n’y a que trois points de données et nous essayons d’indexer le 4e le plus récent. 

 **Exemples d'expressions** 

 **ColumnCorrelation** 
+ `ColumnCorrelation "colA" "colB" < avg(last(10))`

 **DistinctValuesCount** 
+ `DistinctValuesCount "colA" between min(last(10))-1 and max(last(10))+1`

 La plupart des types de règles comportant des conditions ou des seuils numériques prennent en charge les règles dynamiques. Consultez le tableau fourni, [Analyseurs et règles](#dqdl-analyzers-table) pour vérifier si les règles dynamiques sont disponibles pour le type de règle que vous utilisez. 

 **Exclure les statistiques des règles dynamiques** 

 Vous devrez parfois exclure les statistiques de données de vos calculs de règles dynamiques. Supposons que vous ayez effectué un chargement de données historiques et que vous ne vouliez pas que cela ait un impact sur vos moyennes. Pour ce faire, ouvrez le job dans AWS Glue ETL et choisissez l'onglet **Data Quality**, puis sélectionnez **Statistics** et sélectionnez les statistiques que vous souhaitez exclure. Vous pourrez voir un graphique de tendance ainsi qu’un tableau de statistiques. Sélectionnez les valeurs que vous souhaitez exclure, puis choisissez **Exclure les statistiques**. Les statistiques exclues ne seront désormais pas incluses dans les calculs de règles dynamiques. 

![\[La capture d’écran affiche l’option permettant d’exclure ou d’inclure des statistiques dans le menu déroulant après avoir sélectionné une statistique.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-excluding-statistics-from-dynamic-rules.png)


### Analyseurs
<a name="dqdl-analyzers"></a>

**Note**  
 Les analyseurs ne sont pas pris en charge dans AWS Glue Data Catalog. 

 Les règles DQDL utilisent des fonctions appelées *analyseurs* pour rassembler des informations sur vos données. Ces informations sont utilisées par l’expression booléenne d’une règle afin de décider si cette dernière doit être considérée comme réussie ou échouée. Par exemple, la RowCount règle `RowCount > 5 ` utilisera un analyseur de nombre de lignes pour découvrir le nombre de lignes de votre ensemble de données et comparer ce nombre à l'expression `> 5` pour vérifier s'il existe plus de cinq lignes dans le jeu de données actuel. 

 Il est parfois préférable, plutôt que de créer des règles, de créer des analyseurs et de les configurer pour qu’ils génèrent des statistiques utiles à la détection d’anomalies. Dans de tels cas, vous pouvez créer des analyseurs. Les analyseurs se distinguent des règles de la manière suivante. 


| Caractéristiques | Analyseurs | Rules | 
| --- | --- | --- | 
| Partie du jeu de règles | Oui | Oui | 
| Génère des statistiques | Oui | Oui | 
| Génère des observations | Oui | Oui | 
| Peut évaluer et affirmer une condition | Non | Oui | 
| Vous pouvez configurer des actions telles que l’arrêt des tâches en cas d’échec ou la poursuite du traitement des tâches | Non | Oui | 

 Les analyseurs peuvent exister indépendamment sans règles, vous offrant ainsi la possibilité de les configurer rapidement et de créer progressivement des règles de qualité des données. 

 Certains types de règles peuvent être saisis dans le bloc `Analyzers` de votre jeu de règles afin d’exécuter les règles nécessaires aux analyseurs et rassembler des informations sans avoir à valider une quelconque condition. Certains analyseurs ne sont pas associés à des règles et ne peuvent être saisis que dans le bloc `Analyzers`. Le tableau ci-dessous précise pour chaque élément s’il est pris en charge en tant que règle ou en tant qu’analyseur autonome, avec des informations supplémentaires pour chaque type de règle. 

 **Exemple d'ensemble de règles avec analyseur** 

 Le jeu de règles suivant utilise : 
+ une règle dynamique permettant de vérifier si la croissance d’un jeu de données est supérieure à sa moyenne mobile au cours des trois dernières exécutions de tâches
+ un analyseur `DistinctValuesCount` permettant d’enregistrer le nombre de valeurs distinctes dans la colonne `Name` du jeu de données
+ un analyseur `ColumnLength` permettant de suivre la taille `Name` minimale et maximale au fil du temps

 Les résultats des métriques de l’analyseur peuvent être consultés dans l’onglet Qualité des données de votre exécution de tâche. 

```
Rules = [
   RowCount > avg(last(3))
]
Analyzers = [
   DistinctValuesCount "Name",
   ColumnLength "Name"
]
```

 AWS Glue Data Quality prend en charge les analyseurs suivants. 


| Nom de l’analyseur | Fonctionnalité | 
| --- | --- | 
| RowCount | Calcule le nombre de lignes pour un jeu de données | 
| Completeness | Calcule le pourcentage de complétude d’une colonne | 
| Uniqueness | Calcule le pourcentage d’unicité d’une colonne | 
| Mean | Calcule la moyenne d’une colonne numérique | 
| Sum | Calcule la somme d’une colonne numérique | 
| StandardDeviation | Calcule l’écart type d’une colonne numérique | 
| Entropy | Calcule l’entropie d’une colonne numérique | 
| DistinctValuesCount | Calcule le nombre de valeurs distinctes dans une colonne | 
| UniqueValueRatio | Calcule le ratio de valeurs uniques dans une colonne | 
| ColumnCount | Calcule le nombre de colonnes d’un jeu de données | 
| ColumnLength | Calcule la longueur d’une colonne | 
| ColumnValues | Calcule le minimum et le maximum pour les colonnes numériques Calcule le minimum ColumnLength et le maximum ColumnLength pour les colonnes non numériques | 
| ColumnCorrelation | Calcule les corrélations de colonnes pour des colonnes données | 
| CustomSql | Calcule les statistiques renvoyées par le CustomSQL | 
| AllStatistics | Calcule les statistiques suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/dqdl.html)  | 

### Commentaires
<a name="dqdl-syntax-comments"></a>

Vous pouvez utiliser le caractère « \$1 » pour ajouter un commentaire à votre document DQDL. Tout ce qui se trouve après le caractère « \$1 » et jusqu’à la fin de la ligne est ignoré par DQDL.

```
Rules = [
    # More items should generally mean a higher price, so correlation should be positive
    ColumnCorrelation "price" "num_items" > 0
]
```

# Référence du type de règle DQDL
<a name="dqdl-rule-types"></a>

Cette section fournit une référence pour chaque type de règle pris en charge par AWS Glue Data Quality.

**Note**  
Le langage DQDL ne prend actuellement pas en charge les données de colonnes imbriquées ou de type liste.
Les valeurs entre crochets dans le tableau ci-dessous seront remplacées par les informations fournies dans les arguments des règles.
Les règles nécessitent généralement un argument supplémentaire pour l’expression.


| Ruletype | Description | Arguments | Métriques rapportées | Prise en charge en tant que règle ? | Prise en charge en tant qu’analyseur ? | Renvoie des résultats au niveau des lignes ? | Prise en charge des règles dynamiques ? | Génère des observations | Prise en charge de la syntaxe de clause Where ? | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AggregateMatch | Vérifie si deux jeux de données correspondent en comparant des métriques récapitulatives telles que le montant total des ventes. Utile pour permettre aux institutions financières de vérifier si toutes les données sont ingérées à partir de systèmes sources. | Une ou plusieurs agrégations |  Lorsque les noms de la première et de la deuxième colonne d’agrégation correspondent : `Column.[Column].AggregateMatch` Lorsque les noms de la première et de la deuxième colonne d’agrégation sont différents : `Column.[Column1,Column2].AggregateMatch`  | Oui | Non | Non | Non | Non | Non | 
| AllStatistics | Analyseur autonome permettant de rassembler plusieurs métriques pour la colonne fournie d’un jeu de données. | Un seul nom de colonne |  Pour les colonnes de tous types : `Dataset.*.RowCount` `Column.[Column].Completeness` `Column.[Column].Uniqueness` Métriques supplémentaires pour les colonnes à valeur de chaîne : `ColumnLength metrics` Métriques supplémentaires pour les colonnes à valeur numérique : `ColumnValues metrics`  | Non | Oui | Non | Non | Non | Non | 
| ColumnCorrelation | Vérifie dans quelle mesure deux colonnes sont corrélées. | Exactement deux noms de colonne | Multicolumn.[Column1,Column2].ColumnCorrelation | Oui | Oui | Non | Oui | Non | Oui | 
| ColumnCount | Vérifie si des colonnes sont supprimées. | Aucune | Dataset.\$1.ColumnCount | Oui | Oui | Non | Oui | Oui | Non | 
| ColumnDataType | Vérifie si une colonne est conforme à un type de données. | Exactement un nom de colonne | Column.[Column].ColumnDataType.Compliance | Oui | Non | Non | Oui, dans l’expression de seuil au niveau de la ligne | Non | Oui | 
| ColumnExists | Vérifie si des colonnes existent dans un jeu de données. Cela permet aux clients de créer des plateformes de données en libre-service pour s'assurer que certaines colonnes sont disponibles. | Exactement un nom de colonne | N/A | Oui | Non | Non | Non | Non | Non | 
| ColumnLength | Vérifie si la longueur des données est cohérente. | Exactement un nom de colonne |  `Column.[Column].MaximumLength` `Column.[Column].MinimumLength` Métrique supplémentaire lorsque le seuil au niveau de la ligne est fourni : `Column.[Column].ColumnValues.Compliance`  | Oui | Oui | Oui, lorsque le seuil au niveau de la ligne est fourni | Non | Oui. Génère uniquement des observations en analysant les longueurs minimale et maximale | Oui | 
| ColumnNamesMatchPattern | Vérifie si les noms de colonnes correspondent aux modèles définis. Utile pour les équipes de gouvernance afin d'assurer la cohérence des noms de colonnes.  | Une expression régulière pour les noms de colonne | Dataset.\$1.ColumnNamesPatternMatchRatio | Oui | Non | Non | Non | Non | Non | 
| ColumnValues | Vérifie si les données sont cohérentes par rapport aux valeurs définies. Cette règle prend en charge les expressions régulières. | Exactement un nom de colonne |  `Column.[Column].Maximum` `Column.[Column].Minimum` Métrique supplémentaire lorsque le seuil au niveau de la ligne est fourni : `Column.[Column].ColumnValues.Compliance`  | Oui | Oui | Oui, lorsque le seuil au niveau de la ligne est fourni | Non | Oui. Génère uniquement des observations en analysant les valeurs minimales et maximales | Oui | 
| Exhaustivité | Vérifie la présence de données vides ou NULLs incomplètes. | Exactement un nom de colonne | `Column.[Column].Completeness` | Oui | Oui | Oui | Oui | Oui | Oui | 
| CustomSql |  Les clients peuvent implémenter presque tous les types de contrôles de qualité des données dans SQL. |  Une instruction SQL (Facultatif) Un seuil au niveau de la ligne  |  `Dataset.*.CustomSQL` Métrique supplémentaire lorsque le seuil au niveau de la ligne est fourni : `Dataset.*.CustomSQL.Compliance`  | Oui | Non | Oui, lorsque le seuil au niveau de la ligne est fourni | Oui | Non | Non | 
| DataFreshness | Vérifie si les données sont récentes. | Exactement un nom de colonne | Column.[Column].DataFreshness.Compliance | Oui | Non | Oui | Non | Non | Oui | 
| DatasetMatch | Compare deux jeux de données et détermine s'ils sont synchronisés. |  Nom d’un jeu de données de référence Un mappage de colonnes (Facultatif) Colonnes pour vérifier les correspondances  | Dataset.[ReferenceDatasetAlias].DatasetMatch | Oui | Non | Oui | Oui | Non | Non | 
| DistinctValuesCount | Vérifie la présence de valeurs dupliquées. | Exactement un nom de colonne | Column.[Column].DistinctValuesCount | Oui | Oui | Oui | Oui | Oui | Oui | 
| DetectAnomalies | Vérifie la présence d’anomalies dans les métriques rapportées par un autre type de règle. | Un type de règle | Métrique(s) rapportée(s) par l’argument du type de règle | Oui | Non | Non | Non | Non | Non | 
| Entropie | Vérifie l'entropie des données. | Exactement un nom de colonne | Column.[Column].Entropy | Oui | Oui | Non | Oui | Non | Oui | 
| IsComplete | Vérifie si 100 % des données sont complètes. | Exactement un nom de colonne | Column.[Column].Completeness | Oui | Non | Oui | Non | Non | Oui | 
| IsPrimaryKey | Vérifie si une colonne est une clé primaire (non NULL et unique). | Exactement un nom de colonne |  Pour une seule colonne : `Column.[Column].Uniqueness` Pour plusieurs colonnes : `Multicolumn.[CommaDelimitedColumns].Uniqueness`  | Oui | Non | Oui | Non | Non | Oui | 
| IsUnique | Vérifie si 100 % des données sont uniques. | Exactement un nom de colonne | Column.[Column].Uniqueness | Oui | Non | Oui | Non | Non | Oui | 
| Mean | Vérifie si la moyenne correspond au seuil défini. | Exactement un nom de colonne | Column.[Column].Mean | Oui | Oui | Oui | Oui | Non | Oui | 
| ReferentialIntegrity | Vérifie si deux jeux de données ont une intégrité référentielle. |  Un ou plusieurs noms de colonne provenant du jeu de données Un ou plusieurs noms de colonne provenant du jeu de données de référence  | Column.[ReferenceDatasetAlias].ReferentialIntegrity | Oui | Non | Oui | Oui | Non | Non | 
| RowCount | Vérifie si le nombre d'enregistrements correspond à un seuil. | Aucune | Dataset.\$1.RowCount | Oui | Oui | Non | Oui | Oui | Oui | 
| RowCountMatch | Vérifie si le nombre d'enregistrements entre deux jeux de données correspond. | Alias de jeu de données de référence | Dataset.[ReferenceDatasetAlias].RowCountMatch | Oui | Non | Non | Oui | Non | Non | 
| StandardDeviation | Vérifie si l'écart type correspond au seuil. | Exactement un nom de colonne | Column.[Column].StandardDeviation | Oui | Oui | Oui | Oui | Non | Oui | 
| SchemaMatch | Vérifie si le schéma entre deux jeux de données correspond. | Alias de jeu de données de référence | Dataset.[ReferenceDatasetAlias].SchemaMatch | Oui | Non | Non | Oui | Non | Non | 
| Somme | Vérifie si la somme correspond à un seuil défini. | Exactement un nom de colonne | Column.[Column].Sum | Oui | Oui | Non | Oui | Non | Oui | 
| Unicité | Vérifie si l'unicité du jeu de données correspond au seuil. | Exactement un nom de colonne | Column.[Column].Uniqueness | Oui | Oui | Oui | Oui | Non | Oui | 
| UniqueValueRatio | Vérifie si le ratio de valeur unique correspond au seuil. | Exactement un nom de colonne | Column.[Column].UniqueValueRatio | Oui | Oui | Oui | Oui | Non | Oui | 
| FileFreshness | Vérifie si les fichiers dans Amazon S3 sont récents. | Chemin d’accès au fichier ou au dossier et seuil. |  `Dataset.*.FileFreshness.Compliance` `Dataset.*.FileCount`  | Oui | Non | Non | Non | Non | Non | 
| FileMatch | Vérifie si le contenu du fichier correspond à une somme de contrôle ou à un autre fichier. Cette règle utilise des sommes de contrôle pour s’assurer que deux fichiers sont identiques. | Chemin d’accès au fichier ou au dossier source et chemin d’accès au fichier ou au dossier cible. | Aucune statistique n’est générée. | Oui | Non | Non | Non | Non | Non | 
| FileSize | Vérifie si la taille d’un fichier correspond à une condition spécifiée. | Chemin d’accès au fichier ou au dossier et seuil. | `Dataset.*.FileSize.Compliance` `Dataset.*.FileCount` `Dataset.*.MaximumFileSize` `Dataset.*.MinimumFileSize`  | Oui | Non | Non | Non | Non | Non | 
| FileUniqueness | Vérifie si les fichiers sont uniques à l’aide de sommes de contrôle. | Chemin d’accès au fichier ou au dossier et seuil. | `Dataset.*.FileUniquenessRatio` `Dataset.*.FileCount`  | Oui | Non | Non | Non | Non | Non | 

**Topics**
+ [AggregateMatch](dqdl-rule-types-AggregateMatch.md)
+ [ColumnCorrelation](dqdl-rule-types-ColumnCorrelation.md)
+ [ColumnCount](dqdl-rule-types-ColumnCount.md)
+ [ColumnDataType](dqdl-rule-types-ColumnDataType.md)
+ [ColumnExists](dqdl-rule-types-ColumnExists.md)
+ [ColumnLength](dqdl-rule-types-ColumnLength.md)
+ [ColumnNamesMatchPattern](dqdl-rule-types-ColumnNamesMatchPattern.md)
+ [ColumnValues](dqdl-rule-types-ColumnValues.md)
+ [Intégralité](dqdl-rule-types-Completeness.md)
+ [CustomSQL](dqdl-rule-types-CustomSql.md)
+ [DataFreshness](dqdl-rule-types-DataFreshness.md)
+ [DatasetMatch](dqdl-rule-types-DatasetMatch.md)
+ [DistinctValuesCount](dqdl-rule-types-DistinctValuesCount.md)
+ [Entropie](dqdl-rule-types-Entropy.md)
+ [IsComplete](dqdl-rule-types-IsComplete.md)
+ [IsPrimaryKey](dqdl-rule-types-IsPrimaryKey.md)
+ [IsUnique](dqdl-rule-types-IsUnique.md)
+ [Mean](dqdl-rule-types-Mean.md)
+ [ReferentialIntegrity](dqdl-rule-types-ReferentialIntegrity.md)
+ [RowCount](dqdl-rule-types-RowCount.md)
+ [RowCountMatch](dqdl-rule-types-RowCountMatch.md)
+ [StandardDeviation](dqdl-rule-types-StandardDeviation.md)
+ [Somme](dqdl-rule-types-Sum.md)
+ [SchemaMatch](dqdl-rule-types-SchemaMatch.md)
+ [Unicité](dqdl-rule-types-Uniqueness.md)
+ [UniqueValueRatio](dqdl-rule-types-UniqueValueRatio.md)
+ [DetectAnomalies](dqdl-rule-types-DetectAnomalies.md)
+ [FileFreshness](dqdl-rule-types-FileFreshness.md)
+ [FileMatch](dqdl-rule-types-FileMatch.md)
+ [FileUniqueness](dqdl-rule-types-FileUniqueness.md)
+ [FileSize](dqdl-rule-types-FileSize.md)

# AggregateMatch
<a name="dqdl-rule-types-AggregateMatch"></a>

Vérifie le ratio de deux agrégations de colonnes par rapport à une expression donnée. Ce type de règle fonctionne sur plusieurs jeux de données. Les deux agrégations de colonnes sont évaluées et un ratio est produit en divisant le résultat de la première agrégation de colonnes par le résultat de la seconde agrégation de colonnes. Le ratio est vérifié par rapport à l'expression fournie pour produire une réponse booléenne.

**Syntaxe**

**Agrégation de colonnes**

```
AggregateMatch <AGG_OPERATION> (<OPTIONAL_REFERENCE_ALIAS>.<COL_NAME>)
```
+ **AGG\$1OPERATION** : l'opération à utiliser pour l'agrégation. À l'heure actuelle, `sum` et `avg` sont pris en charge.

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **OPTIONAL\$1REFERENCE\$1ALIAS** : ce paramètre doit être fourni si la colonne provient d'un jeu de données de référence et non du jeu de données principal. Si vous utilisez cette règle dans le catalogue de données AWS Glue, votre alias de référence doit suivre le format « »<database\$1name>. <table\$1name>. <column\$1name>

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **COL\$1NAME** : le nom de la colonne à agréger.

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court

**Exemple : moyenne**

```
"avg(rating)"
```

**Exemple : somme**

```
"sum(amount)"
```

**Exemple : moyenne de la colonne dans le jeu de données de référence**

```
"avg(reference.rating)"
```

**Règle**

```
AggregateMatch <AGG_EXP_1> <AGG_EXP_2> <EXPRESSION>
```
+ **AGG\$1EXP\$11** : la première agrégation de colonnes.

  Types de colonnes pris en charge : octet, décimal, double, virgule flottante, entier, long, court

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **AGG\$1EXP\$12** : la deuxième agrégation de colonnes.

  Types de colonnes pris en charge : octet, décimal, double, virgule flottante, entier, long, court

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour de plus amples informations, veuillez consulter [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : correspondance agrégée à l'aide de la somme**

L'exemple de règle suivant vérifie si la somme des valeurs de la colonne `amount` est exactement égale à la somme des valeurs de la colonne `total_amount`.

```
AggregateMatch "sum(amount)" "sum(total_amount)" = 1.0
```

**Exemple : correspondance agrégée à l'aide de la moyenne**

L'exemple de règle suivant vérifie si la moyenne des valeurs de la colonne `ratings` est égale à au moins 90 % de la moyenne des valeurs de la colonne `ratings` dans le jeu de données `reference`. Le jeu de données de référence est fourni en tant que source de données supplémentaire dans l'expérience ETL ou le catalogue de données.

Dans AWS Glue ETL, vous pouvez utiliser :

```
AggregateMatch "avg(ratings)" "avg(reference.ratings)" >= 0.9
```

Dans le catalogue de données AWS Glue, vous pouvez utiliser :

```
AggregateMatch "avg(ratings)" "avg(database_name.tablename.ratings)" >= 0.9
```

**Comportement null**

 La règle `AggregateMatch` ignorera les lignes contenant des valeurs NULL dans le calcul des méthodes d’agrégation (somme/moyenne). Par exemple : 

```
+---+-----------+
|id |units      |
+---+-----------+
|100|0          | 
|101|null       |
|102|20         |
|103|null       |
|104|40         |
+---+-----------+
```

 La moyenne de la colonne `units` sera (0 \$1 20 \$1 40) / 3 = 20. Les lignes 101 et 103 ne sont pas prises en compte dans ce calcul. 

# ColumnCorrelation
<a name="dqdl-rule-types-ColumnCorrelation"></a>

Vérifie la *corrélation* entre deux colonnes par rapport à une expression donnée. AWS Glue Data Quality utilise le coefficient de corrélation de Pearson pour mesurer la corrélation linéaire entre deux colonnes. Le résultat est un nombre compris entre -1 et 1 qui mesure la force et la direction de la relation. 

**Syntaxe**

```
ColumnCorrelation <COL_1_NAME> <COL_2_NAME> <EXPRESSION>
```
+ **COL\$11\$1NAME** – Nom de la première colonne par rapport à laquelle vous souhaitez évaluer la règle de qualité des données.

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **COL\$12\$1NAME** – Nom de la deuxième colonne par rapport à laquelle vous souhaitez évaluer la règle de qualité des données.

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour plus d'informations, consultez [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : corrélation de colonnes**

L'exemple de règle suivant vérifie si le coefficient de corrélation entre les colonnes `height` et `weight` présente une forte corrélation positive (valeur de coefficient supérieure à 0,8).

```
ColumnCorrelation "height" "weight" > 0.8
```

```
ColumnCorrelation "weightinkgs" "Salary" > 0.8 where "weightinkgs > 40"
```

 **Exemples de règles dynamiques** 
+ `ColumnCorrelation "colA" "colB" between min(last(10)) and max(last(10))`
+ `ColumnCorrelation "colA" "colB" < avg(last(5)) + std(last(5))`

**Comportement null**

 La règle `ColumnCorrelation` ignorera les lignes contenant des valeurs `NULL` dans le calcul de la corrélation. Par exemple : 

```
+---+-----------+
|id |units      |
+---+-----------+
|100|0          | 
|101|null       |
|102|20         |
|103|null       |
|104|40         |
+---+-----------+
```

 Les lignes 101 et 103 seront ignorées, et la valeur `ColumnCorrelation` sera 1.0. 

# ColumnCount
<a name="dqdl-rule-types-ColumnCount"></a>

Vérifie le nombre de colonnes du jeu de données principal par rapport à une expression donnée. Dans l'expression, vous pouvez spécifier le nombre de colonnes ou une plage de colonnes à l'aide d'opérateurs tels que `>` et `<`.

**Syntaxe**

```
ColumnCount <EXPRESSION>
```
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour de plus amples informations, veuillez consulter [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : vérification numérique du nombre de colonnes**

L'exemple de règle suivant vérifie si le nombre de colonnes est compris dans une plage donnée.

```
ColumnCount between 10 and 20
```

**Exemples de règles dynamiques**
+ `ColumnCount >= avg(last(10))`
+ `ColumnCount between min(last(10))-1 and max(last(10))+1`

# ColumnDataType
<a name="dqdl-rule-types-ColumnDataType"></a>

 Vérifie si les valeurs d’une colonne donnée peuvent être converties vers le type fourni dans Apache Spark. Accepte une expression `with threshold` pour vérifier la présence d'un sous-ensemble des valeurs de la colonne. 

 **Syntaxe** 

```
ColumnDataType <COL_NAME> = <EXPECTED_TYPE>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  Types de colonnes pris en charge : type de chaîne

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **EXPECTED\$1TYPE** : le type attendu des valeurs de la colonne.

  Valeurs prises en charge : booléen, date, horodatage, entier, double, flottant, long

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **EXPRESSION** : une expression facultative pour spécifier le pourcentage de valeurs qui doivent être du type attendu.

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court

 **Exemple : les entiers de type colonne en tant que chaînes** 

 L’exemple de règle suivant vérifie si les valeurs de la colonne donnée, qui est de type chaîne, peuvent être converties en entiers.

```
ColumnDataType "colA" = "INTEGER"
```

 **Exemple : les entiers de type colonne en tant que chaînes de caractères vérifient un sous-ensemble de valeurs.** 

 L’exemple de règle suivant vérifie si plus de 90 % des valeurs de la colonne donnée, qui est de type chaîne, peuvent être converties en entiers. 

```
ColumnDataType "colA" = "INTEGER" with threshold > 0.9
```

# ColumnExists
<a name="dqdl-rule-types-ColumnExists"></a>

Vérifie si une colonne existe.

**Syntaxe**

```
ColumnExists <COL_NAME>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : n'importe quel type de colonne

**Exemple : une colonne existe**

L'exemple de règle suivant vérifie si la colonne nommée `Middle_Name` existe.

```
ColumnExists "Middle_Name"
```

# ColumnLength
<a name="dqdl-rule-types-ColumnLength"></a>

Vérifie si la longueur de chaque ligne d'une colonne est conforme à une expression donnée.

**Syntaxe**

```
ColumnLength <COL_NAME><EXPRESSION>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : chaîne
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour plus d'informations, consultez [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : longueur de ligne de colonne**

L'exemple de règle suivant vérifie si la valeur de chaque ligne de la colonne nommée `Postal_Code` est constituée de 5 caractères.

```
ColumnLength "Postal_Code" = 5
ColumnLength "weightinkgs" = 2 where "weightinkgs > 10"
```

**Comportement null**

 La règle `ColumnLength` traite les `NULL` comme des chaînes de longueur 0. Pour une ligne `NULL` : 

```
ColumnLength "Postal_Code" > 4 # this will fail
```

```
ColumnLength "Postal_Code" < 6 # this will succeed 
```

 L’exemple de règle composée suivant fournit un moyen d’annuler explicitement des valeurs `NULL` : 

```
(ColumnLength "Postal_Code" > 4) AND (ColumnValues "Postal_Code" != NULL)
```

# ColumnNamesMatchPattern
<a name="dqdl-rule-types-ColumnNamesMatchPattern"></a>

Vérifie si les noms de toutes les colonnes du jeu de données principal correspondent à l'expression régulière donnée.

**Syntaxe**

```
ColumnNamesMatchPattern <PATTERN>
```
+ **PATTERN** : le modèle par rapport auquel vous souhaitez évaluer la règle de qualité des données.

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court

**Exemple : les noms de colonnes correspondent au modèle**

L'exemple de règle suivant vérifie si toutes les colonnes commencent par le préfixe « aws\$1 »

```
ColumnNamesMatchPattern "aws_.*"
ColumnNamesMatchPattern "aws_.*" where "weightinkgs > 10"
```

# ColumnValues
<a name="dqdl-rule-types-ColumnValues"></a>

Exécute une expression en fonction des valeurs d’une colonne.

**Syntaxe**

```
ColumnValues <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : n’importe quel type de colonne
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour plus d’informations, consultez [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : valeurs autorisées**

L’exemple de règle suivant vérifie si chaque valeur de la colonne spécifiée fait partie d’un ensemble de valeurs autorisées (dont null, empty, et strings uniquement avec des espaces blancs).

```
ColumnValues "Country" in [ "US", "CA", "UK", NULL, EMPTY, WHITESPACES_ONLY ]
ColumnValues "gender" in ["F", "M"] where "weightinkgs < 10"
```

**Exemple : expression régulière**

L’exemple de règle suivant compare les valeurs d’une colonne à une expression régulière.

```
ColumnValues "First_Name" matches "[a-zA-Z]*"
```

**Exemple : valeurs de date**

L’exemple de règle suivant compare les valeurs d’une colonne de date à une expression de date.

```
ColumnValues "Load_Date" > (now() - 3 days)
```

**Exemple : valeurs numériques**

L’exemple de règle suivant vérifie si les valeurs des colonnes correspondent à une certaine contrainte numérique.

```
ColumnValues "Customer_ID" between 1 and 2000
```

**Comportement null**

 Pour toutes les règles `ColumnValues` (à l’exception de `!=` et de `NOT IN`), les lignes `NULL` dérogent à la règle. Si la règle échoue en raison d’une valeur null, la raison de l’échec s’affichera comme suit : 

```
Value: NULL does not meet the constraint requirement!
```

 L’exemple de règle composée suivant fournit un moyen d’autoriser explicitement des valeurs `NULL` : 

```
(ColumnValues "Age" > 21) OR (ColumnValues "Age" = NULL)
```

 ColumnValues Les règles annulées utilisant la `not in` syntaxe `!=` et seront transmises aux `NULL` lignes. Par exemple : 

```
ColumnValues "Age" != 21
```

```
ColumnValues "Age" not in [21, 22, 23]
```

 Les exemples suivants fournissent un moyen de déroger explicitement aux valeurs `NULL`. 

```
(ColumnValues "Age" != 21) AND (ColumnValues "Age" != NULL)
```

```
ColumnValues "Age" not in [21, 22, 23, NULL]
```

# Intégralité
<a name="dqdl-rule-types-Completeness"></a>

Compare le pourcentage de valeurs complètes (non nulles) d’une colonne à une expression donnée.

**Syntaxe**

```
Completeness <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : n’importe quel type de colonne
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour plus d'informations, consultez [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : pourcentage de valeur nulle**

Les exemples de règles suivants vérifient si plus de 95 % des valeurs d’une colonne sont complètes.

```
Completeness "First_Name" > 0.95
Completeness "First_Name" > 0.95 where "weightinkgs > 10"
```

 **Exemples de règles dynamiques** 
+ `Completeness "colA" between min(last(5)) - 1 and max(last(5)) + 1`
+ `Completeness "colA" <= avg(last(10))`

**Comportement null**

 Remarque sur les formats de données CSV : les lignes vides des colonnes CSV peuvent afficher plusieurs comportements. 
+  Si une colonne est de type `String`, la ligne vide sera reconnue comme une chaîne vide et ne dérogera pas à la règle `Completeness`. 
+  Si une colonne est d’un autre type de données, comme `Int`, la ligne vide sera reconnue comme `NULL` et dérogera à la règle `Completeness`. 

# CustomSQL
<a name="dqdl-rule-types-CustomSql"></a>

Ce type de règle a été étendu pour prendre en charge deux cas d’utilisation :
+ Exécutez une instruction SQL personnalisée sur un jeu de données et compare la valeur renvoyée à une expression donnée.
+ Exécutez une instruction SQL personnalisée dans laquelle vous spécifiez un nom de colonne dans votre instruction SELECT, que vous comparez à une certaine condition pour obtenir des résultats au niveau des lignes.

**Syntaxe**

```
CustomSql <SQL_STATEMENT> <EXPRESSION>
```
+ **SQL\$1STATEMENT** – Instruction SQL qui renvoie une valeur numérique unique, entourée de guillemets doubles.
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour de plus amples informations, veuillez consulter [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : SQL personnalisé pour récupérer le résultat global d’une règle**

Cet exemple de règle utilise une instruction SQL pour récupérer le nombre d’enregistrements d’un jeu de données. La règle vérifie ensuite que le nombre d’enregistrements est compris entre 10 et 20.

```
CustomSql "select count(*) from primary" between 10 and 20
```

**Exemple : SQL personnalisé pour récupérer les résultats au niveau des lignes**

Cet exemple de règle utilise une instruction SQL dans laquelle vous spécifiez un nom de colonne dans votre instruction SELECT, que vous comparez à une certaine condition pour obtenir des résultats au niveau des lignes. Une expression de condition de seuil définit le nombre d’enregistrements qui doivent échouer pour que l’ensemble de la règle échoue. Notez qu’une règle ne peut pas contenir à la fois une condition et un mot clé.

```
CustomSql "select Name from primary where Age  > 18"
```

or

```
CustomSql "select Name from primary where Age > 18" with threshold  > 3
```

**Important**  
L’alias `primary` est le nom du jeu de données que vous souhaitez évaluer. Lorsque vous utilisez des tâches ETL visuelles sur la console, `primary` représente toujours le `DynamicFrame` qui est transmis à la transformation `EvaluateDataQuality.apply()`. Lorsque vous utilisez le catalogue de données AWS Glue pour exécuter des tâches de qualité des données sur une table, `primary` représente la table.

Si vous êtes dans le catalogue AWS Glue, vous pouvez également utiliser les noms de table réels :

```
CustomSql "select count(*) from database.table" between 10 and 20
```

Vous pouvez également joindre plusieurs tables pour comparer différents éléments de données :

```
CustomSql "select count(*) from database.table inner join database.table2 on id1 = id2" between 10 and 20
```

 Dans AWS Glue ETL, l’utilisation de CustomSQL permet d’identifier les enregistrements qui ont échoué aux contrôles de qualité des données. Pour que cela fonctionne, vous devez renvoyer les enregistrements qui font partie de la table principale pour laquelle vous évaluez la qualité des données. Les enregistrements renvoyés dans le cadre de la requête sont considérés comme réussis et les enregistrements non renvoyés sont considérés comme ayant échoué. Cela fonctionne en joignant le résultat de votre requête CustomSQL au jeu de données d’origine. La complexité de votre requête SQL peut avoir des répercussions sur les performances. 

 Pour cela : 
+  Vous devez sélectionner au moins une colonne dans votre table principale. 
  +  `select count(*) from primary` est une requête valide pour la règle OVERALL CustomSQL DQ, mais pas pour le SQL personnalisé au niveau des lignes. 
  +  Cette règle va générer une erreur lors de l’évaluation : `The output from CustomSQL must contain at least one column that matches the input dataset for AWS Glue Data Quality to provide row level results. The SQL query is a valid query but the columns from the SQL result are not present in the Input Dataset. Ensure that matching columns are returned from the SQL.` 
+  Dans votre requête SQL, sélectionnez une « clé primaire » dans votre table ou sélectionnez un ensemble de colonnes qui forment une clé composite. À défaut, vous risquez d’obtenir des résultats incohérents en raison de la correspondance de lignes dupliquées et d’une dégradation des performances. 
+  Sélectionnez les clés UNIQUEMENT dans votre table principale et non dans vos tables de référence. 

La règle suivante permet de s’assurer que les enregistrements dont l’âge est inférieur à 100 sont identifiés comme réussis et que les enregistrements dont l’âge est supérieur sont marqués comme échoués.

```
CustomSql "select id from primary where age < 100" 
```

Cette règle CustomSQL sera validée si 50 % des enregistrements ont un âge supérieur à 10 et identifiera également les enregistrements qui ont échoué. Les enregistrements renvoyés par cette règle CustomSQL seront considérés comme réussis, tandis que ceux non renvoyés seront considérés comme ayant échoué.

```
CustomSQL "select ID, CustomerID from primary where age > 10" with threshold > 0.5
```

Remarque : la règle CustomSQL échoue si vous renvoyez des enregistrements qui ne sont pas disponibles dans le jeu de données. 

# DataFreshness
<a name="dqdl-rule-types-DataFreshness"></a>

Vérifie l’actualisation des données d’une colonne en évaluant la différence entre l’heure actuelle et les valeurs d’une colonne de date. Pour ce type de règle, vous pouvez spécifier une expression temporelle afin de vérifier que les valeurs des colonnes sont à jour.

**Syntaxe**

```
DataFreshness <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonne pris en charge** : Date 
+ **EXPRESSION** – Expression numérique exprimée en heures ou en jours. Vous devez spécifier l’unité de temps dans votre expression.

**Exemple : actualisation des données**

Les exemples de règles suivants vérifient l’actualisation des données.

```
DataFreshness "Order_Date" <= 24 hours
DataFreshness "Order_Date" between 2 days and 5 days
```

**Comportement null**

 Les règles `DataFreshness` échoueront pour les lignes contenant des valeurs `NULL`. Si la règle échoue en raison d’une valeur null, la raison de l’échec s’affichera comme suit : 

```
80.00 % of rows passed the threshold
```

 où 20 % des lignes qui ont échoué incluent les lignes avec `NULL`. 

 L’exemple de règle composée suivant fournit un moyen d’autoriser explicitement des valeurs `NULL` : 

```
(DataFreshness "Order_Date" <= 24 hours) OR (ColumnValues "Order_Date" = NULL)
```

**Actualité des données pour les objets Amazon S3**

 Vous devrez parfois valider l’actualité des données en fonction de l’heure de création du fichier Amazon S3. Pour ce faire, vous pouvez utiliser le code suivant pour obtenir l’horodatage et l’ajouter à votre trame de données, puis appliquer des contrôles d’actualité des données. 

```
df = glueContext.create_data_frame.from_catalog(database = "default", table_name = "mytable")
df = df.withColumn("file_ts", df["_metadata.file_modification_time"])

Rules = [
 DataFreshness "file_ts" < 24 hours 
]
```

# DatasetMatch
<a name="dqdl-rule-types-DatasetMatch"></a>

 Vérifie si les données du jeu de données principal correspondent aux données d'un jeu de données de référence. Les deux jeux de données sont joints à l'aide des mappages de colonnes clés fournis. Des mappages de colonnes supplémentaires peuvent être fournis si vous souhaitez vérifier l'égalité des données uniquement dans ces colonnes. Notez que **DataSetMatch**pour fonctionner, vos clés de jointure doivent être uniques et ne pas être NULL (elles doivent être une clé primaire). Si vous ne remplissez pas ces conditions, le message d'erreur suivant affiche : « La clé de distribution fournie ne convient pas à des cadres de données donnés ». Dans les cas où vous ne pouvez pas avoir de clés jointes uniques, envisagez d'utiliser d'autres types de règles, par exemple **AggregateMatch**pour établir une correspondance sur des données récapitulatives. 

**Syntaxe**

```
DatasetMatch <REFERENCE_DATASET_ALIAS> <JOIN CONDITION WITH MAPPING> <OPTIONAL_MATCH_COLUMN_MAPPINGS> <EXPRESSION>
```
+ **REFERENCE\$1DATASET\$1ALIAS** : l'alias du jeu de données de référence avec lequel vous comparez les données du jeu de données principal.
+ **KEY\$1COLUMN\$1MAPPINGS** : une liste de noms de colonnes séparés par des virgules qui forment une clé dans les jeux de données. Si les noms de colonnes ne sont pas identiques dans les deux jeux de données, vous devez les séparer par `->`
+ **OPTIONAL\$1MATCH\$1COLUMN\$1MAPPINGS** : vous pouvez fournir ce paramètre si vous souhaitez vérifier les données correspondantes uniquement dans certaines colonnes. Il utilise la même syntaxe que les mappages de colonnes clés. Si ce paramètre n'est pas fourni, la correspondance portera sur les données de toutes les autres colonnes. Les autres colonnes non-clés doivent porter le même nom dans les deux jeux de données.
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour de plus amples informations, veuillez consulter [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : faire correspondre des jeux de données à l'aide de la colonne ID**

L'exemple de règle suivant vérifie que plus de 90 % du jeu de données principal correspond au jeu de données de référence, en utilisant la colonne « ID » pour joindre les deux jeux de données. Dans ce cas, toutes les colonnes sont comparées.

```
DatasetMatch "reference" "ID" >= 0.9
```

**Exemple : faire correspondre des jeux de données en utilisant plusieurs colonnes clés**

Dans l'exemple suivant, le jeu de données principal et le jeu de données de référence portent des noms différents pour les colonnes clés. `ID_1` et `ID_2` forment ensemble une clé composite dans le jeu de données principal. `ID_ref1` et `ID_ref2` forment ensemble une clé composite dans le jeu de données de référence. Dans ce scénario, vous pouvez utiliser la syntaxe spéciale pour fournir les noms des colonnes.

```
DatasetMatch "reference" "ID_1->ID_ref1,ID_2->ID_ref2" >= 0.9
```

**Exemple : faire correspondre des jeux de données à l'aide de plusieurs colonnes clés et vérifie qu'une colonne spécifique correspond**

Cet exemple s'appuie sur l'exemple précédent. Nous voulons vérifier que seule la colonne contenant les montants correspond. Cette colonne est nommée `Amount1` dans le jeu de données principal et `Amount2` dans le jeu de données de référence. Une correspondance exacte est désirée.

```
DatasetMatch "reference" "ID_1->ID_ref1,ID_2->ID_ref2" "Amount1->Amount2" >= 0.9
```

# DistinctValuesCount
<a name="dqdl-rule-types-DistinctValuesCount"></a>

Vérifie le nombre de valeurs distinctes dans une colonne par rapport à une expression donnée.

**Syntaxe**

```
DistinctValuesCount <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : n’importe quel type de colonne
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour plus d'informations, consultez [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : nombre de valeurs de colonne distinctes**

L'exemple de règle suivant vérifie que la colonne nommée `State` contient plus de 3 valeurs distinctes.

```
DistinctValuesCount "State" > 3
DistinctValuesCount "Customer_ID" < 6  where "Customer_ID < 10"
```

**Exemples de règles dynamiques**
+ `DistinctValuesCount "colA" between avg(last(10))-1 and avg(last(10))+1`
+ `DistinctValuesCount "colA" <= index(last(10),2) + std(last(5))`

# Entropie
<a name="dqdl-rule-types-Entropy"></a>

Vérifie si la valeur d'*entropie* d'une colonne correspond à une expression donnée. L'entropie mesure le niveau d'information contenu dans un message. Compte tenu de la distribution de probabilité des valeurs d'une colonne, l'entropie décrit le nombre de bits nécessaires pour identifier une valeur.

**Syntaxe**

```
Entropy <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : n’importe quel type de colonne
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour plus d'informations, consultez [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : entropie de colonne**

L'exemple de règle suivant vérifie que la colonne nommée `Feedback` possède une valeur d'entropie supérieure à un.

```
Entropy "Star_Rating" > 1
Entropy "First_Name" > 1  where "Customer_ID < 10"
```

 **Exemples de règles dynamiques** 
+ `Entropy "colA" < max(last(10))`
+ `Entropy "colA" between min(last(10)) and max(last(10))`

# IsComplete
<a name="dqdl-rule-types-IsComplete"></a>

Vérifie si toutes les valeurs d’une colonne sont complètes (non nulles). 

**Syntaxe**

```
IsComplete <COL_NAME>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : n'importe quel type de colonne

**Exemple : valeurs nulles**

L’exemple suivant vérifie si toutes les valeurs d’une colonne nommée `email` ne sont pas nulles.

```
IsComplete "email"
IsComplete "Email" where "Customer_ID between 1 and 50"
IsComplete "Customer_ID"  where "Customer_ID < 16 and Customer_ID != 12"
IsComplete "passenger_count" where "payment_type<>0"
```

**Comportement null**

 Remarque sur les formats de données CSV : les lignes vides des colonnes CSV peuvent afficher plusieurs comportements. 
+  Si une colonne est de type `String`, la ligne vide sera reconnue comme une chaîne vide et ne dérogera pas à la règle `Completeness`. 
+  Si une colonne est d’un autre type de données, comme `Int`, la ligne vide sera reconnue comme `NULL` et dérogera à la règle `Completeness`. 

# IsPrimaryKey
<a name="dqdl-rule-types-IsPrimaryKey"></a>

Vérifie si une colonne contient une clé primaire. Une colonne contient une clé primaire si toutes les valeurs de la colonne sont uniques et complètes (non nulles). Vous pouvez également vérifier la présence de clés primaires comportant plusieurs colonnes. 

**Syntaxe**

```
IsPrimaryKey <COL_NAME>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : n'importe quel type de colonne

**Exemple : clé primaire**

L'exemple de règle suivant vérifie si la colonne nommée `Customer_ID` contient une clé primaire.

```
IsPrimaryKey "Customer_ID"
IsPrimaryKey "Customer_ID" where "Customer_ID < 10"
```

 **Exemple : clé primaire avec plusieurs colonnes. Tous les exemples suivants sont valides.** 

```
IsPrimaryKey "colA" "colB"
IsPrimaryKey "colA" "colB" "colC"
IsPrimaryKey colA "colB" "colC"
```

# IsUnique
<a name="dqdl-rule-types-IsUnique"></a>

Vérifie si toutes les valeurs d'une colonne sont uniques et renvoie une valeur booléenne.

**Syntaxe**

```
IsUnique <COL_NAME>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : n’importe quel type de colonne

**Exemples**

L'exemple de règle suivant vérifie si toutes les valeurs d'une colonne nommée `email` sont uniques.

```
IsUnique "email"
IsUnique "Customer_ID" where "Customer_ID < 10"]
```

L’exemple de règle suivant vérifie plusieurs colonnes. 

```
IsUnique "vendorid" "tpep_pickup_datetime"
```

# Mean
<a name="dqdl-rule-types-Mean"></a>

Vérifie si la moyenne de toutes les valeurs d’une colonne correspond à une expression donnée.

**Syntaxe**

```
Mean <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour plus d'informations, consultez [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : valeur moyenne**

L’exemple de règle suivant vérifie si la moyenne de toutes les valeurs d’une colonne dépasse un seuil.

```
Mean "Star_Rating" > 3
Mean "Salary" < 6200 where "Customer_ID < 10"
```

 **Exemples de règles dynamiques** 
+ `Mean "colA" > avg(last(10)) + std(last(2))`
+ `Mean "colA" between min(last(5)) - 1 and max(last(5)) + 1`

**Comportement null**

 La règle `Mean` ignorera les lignes contenant des valeurs `NULL` dans le calcul de la moyenne. Par exemple : 

```
+---+-----------+
|id |units      |
+---+-----------+
|100|0          |
|101|null       |
|102|20         |
|103|null       |
|104|40         |
+---+-----------+
```

 La moyenne de la colonne `units` sera (0 \$1 20 \$1 40) / 3 = 20. Les lignes 101 et 103 ne sont pas prises en compte dans ce calcul. 

# ReferentialIntegrity
<a name="dqdl-rule-types-ReferentialIntegrity"></a>

Vérifie dans quelle mesure les valeurs d'un ensemble de colonnes du jeu de données principal sont un sous-ensemble des valeurs d'un ensemble de colonnes d'un jeu de données de référence.

**Syntaxe**

```
ReferentialIntegrity <PRIMARY_COLS> <REFERENCE_DATASET_COLS> <EXPRESSION>
```
+ **PRIMARY\$1COLS** : une liste de noms de colonnes séparés par des virgules dans le jeu de données principal.

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **REFERENCE\$1DATASET\$1COLS** : ce paramètre contient deux parties séparées par un point. La première partie est l'alias du jeu de données de référence. La deuxième partie est la liste des noms de colonnes du jeu de données de référence, séparés par des virgules et placés entre accolades.

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour de plus amples informations, veuillez consulter [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : vérifier l'intégrité référentielle d'une colonne de code postal**

L'exemple de règle suivant vérifie que plus de 90 % des valeurs de la colonne `zipcode` du jeu de données principal sont présentes dans la colonne `zipcode` du jeu de données `reference`.

```
ReferentialIntegrity "zipcode" "reference.zipcode" >= 0.9
```

**Exemple : vérifier l'intégrité référentielle des colonnes de ville et d'État**

Dans l'exemple suivant, des colonnes contenant des informations sur la ville et l'État existent dans le jeu de données principal et dans le jeu de données de référence. Les noms des colonnes sont différents dans les deux jeux de données. La règle vérifie si l'ensemble de valeurs des colonnes du jeu de données principal est exactement égal à l'ensemble de valeurs des colonnes du jeu de données de référence.

```
ReferentialIntegrity "city,state" "reference.{ref_city,ref_state}" = 1.0
```

 **Exemples de règles dynamiques** 
+ `ReferentialIntegrity "city,state" "reference.{ref_city,ref_state}" > avg(last(10))`
+ `ReferentialIntegrity "city,state" "reference.{ref_city,ref_state}" between min(last(10)) - 1 and max(last(10)) + 1`

# RowCount
<a name="dqdl-rule-types-RowCount"></a>

Vérifie le nombre de lignes d'un jeu de données par rapport à une expression donnée. Dans l'expression, vous pouvez spécifier le nombre de lignes ou une plage de lignes à l'aide d'opérateurs tels que `>` et `<`.

**Syntaxe**

```
RowCount <EXPRESSION>
```
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour plus d'informations, consultez [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : vérification numérique du nombre de lignes**

L'exemple de règle suivant vérifie si le nombre de lignes est compris dans une plage donnée.

```
RowCount between 10 and 100
RowCount between 1 and 50 where "Customer_ID < 10"
```

 **Exemples de règles dynamiques** 

```
RowCount > avg(last(10)) *0.8
```

# RowCountMatch
<a name="dqdl-rule-types-RowCountMatch"></a>

Vérifie le rapport entre le nombre de lignes du jeu de données principal et le nombre de lignes d'un jeu de données de référence par rapport à l'expression donnée.

**Syntaxe**

```
RowCountMatch <REFERENCE_DATASET_ALIAS> <EXPRESSION>
```
+ **REFERENCE\$1DATASET\$1ALIAS** : alias du jeu de données de référence par rapport auquel comparer le nombre de lignes.

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour de plus amples informations, veuillez consulter [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : vérification du nombre de lignes par rapport à un jeu de données de référence**

L'exemple de règle suivant vérifie si le nombre de lignes du jeu de données principal est au moins égal à 90 % du nombre de lignes du jeu de données de référence.

```
RowCountMatch "reference" >= 0.9
```

# StandardDeviation
<a name="dqdl-rule-types-StandardDeviation"></a>

Vérifie l’écart type de toutes les valeurs d’une colonne par rapport à une expression donnée.

**Syntaxe**

```
StandardDeviation <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour plus d'informations, consultez [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : écart type**

L’exemple de règle suivant vérifie si l’écart type des valeurs d’une colonne nommée `colA` est inférieur à une valeur spécifiée.

```
StandardDeviation "Star_Rating" < 1.5
StandardDeviation "Salary" < 3500 where "Customer_ID < 10"
```

 **Exemples de règles dynamiques** 
+ `StandardDeviation "colA" > avg(last(10) + 0.1`
+ `StandardDeviation "colA" between min(last(10)) - 1 and max(last(10)) + 1`

**Comportement null**

 La règle `StandardDeviation` ignorera les lignes contenant des valeurs `NULL` dans le calcul de l’écart type. Par exemple : 

```
+---+-----------+-----------+
|id |units1     |units2     |
+---+-----------+-----------+
|100|0          |0          |
|101|null       |0          |
|102|20         |20         |
|103|null       |0          |
|104|40         |40         |
+---+-----------+-----------+
```

 L’écart type de la colonne `units1` ne tiendra pas compte des lignes 101 et 103 et donnera 16,33. L’écart type pour la colonne `units2` sera de 16. 

# Somme
<a name="dqdl-rule-types-Sum"></a>

Vérifie la somme de toutes les valeurs d’une colonne par rapport à une expression donnée.

**Syntaxe**

```
Sum <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour plus d'informations, consultez [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : somme**

L’exemple de règle suivant vérifie si la somme de toutes les valeurs d’une colonne dépasse un seuil donné.

```
Sum "transaction_total" > 500000
Sum "Salary" < 55600 where "Customer_ID < 10"
```

 **Exemples de règles dynamiques** 
+ `Sum "ColA" > avg(last(10))`
+ `Sum "colA" between min(last(10)) - 1 and max(last(10)) + 1`

**Comportement null**

 La règle `Sum` ignorera les lignes contenant des valeurs `NULL` dans le calcul de la somme. Par exemple : 

```
+---+-----------+
|id |units      |
+---+-----------+
|100|0          |
|101|null       |
|102|20         |
|103|null       |
|104|40         |
+---+-----------+
```

 La somme des colonnes `units` ne tiendra pas compte des lignes 101 et 103 et donnera (0 \$1 20 \$1 40) = 60. 

# SchemaMatch
<a name="dqdl-rule-types-SchemaMatch"></a>

Vérifie si le schéma du jeu de données principal correspond au schéma d'un jeu de données de référence. La vérification du schéma s'effectue colonne par colonne. Le schéma de deux colonnes correspond si les noms et les types sont identiques. L'ordre des colonnes n'importe pas.

**Syntaxe**

```
SchemaMatch <REFERENCE_DATASET_ALIAS> <EXPRESSION>
```
+ **REFERENCE\$1DATASET\$1ALIAS** : alias du jeu de données de référence par rapport auquel comparer les schémas.

  **Types de colonnes pris en charge** : octet, décimal, double, virgule flottante, entier, long, court
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour de plus amples informations, veuillez consulter [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : SchemaMatch**

L'exemple de règle suivant vérifie si le schéma du jeu de données principal correspond exactement au schéma d'un jeu de données de référence.

```
SchemaMatch "reference" = 1.0
```

# Unicité
<a name="dqdl-rule-types-Uniqueness"></a>

Vérifie le pourcentage de valeurs uniques dans une colonne par rapport à une expression donnée. Les valeurs uniques n'apparaissent qu'une seule fois.

**Syntaxe**

```
Uniqueness <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : n’importe quel type de colonne
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour de plus amples informations, veuillez consulter [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple**

L'exemple de règle suivant vérifie si le pourcentage de valeurs uniques d'une colonne correspond à certains critères numériques.

```
Uniqueness "email" = 1.0
Uniqueness "Customer_ID" != 1.0 where "Customer_ID < 10"
```

L’exemple de règle suivant vérifie plusieurs colonnes. 

```
Uniqueness "vendorid" "tpep_pickup_datetime" = 1
```

 **Exemples de règles dynamiques** 
+ `Uniqueness "colA" between min(last(10)) and max(last(10))`
+ `Uniqueness "colA" >= avg(last(10))`

# UniqueValueRatio
<a name="dqdl-rule-types-UniqueValueRatio"></a>

Vérifie le *ratio de valeurs uniques* d'une colonne par rapport à une expression donnée. Un ratio de valeurs uniques correspond à la fraction de valeurs uniques divisée par le nombre de toutes les valeurs distinctes d'une colonne. Les valeurs uniques n'apparaissent qu'une seule fois, alors que les valeurs distinctes apparaissent *au moins* une fois. 

Par exemple, le jeu `[a, a, b]` contient une valeur unique (`b`) et deux valeurs distinctes (`a` et `b`). Le ratio de valeurs uniques du jeu est donc ½ = 0,5.

**Syntaxe**

```
UniqueValueRatio <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME** – Nom de la colonne par rapport à laquelle la règle de qualité des données doit être évaluée.

  **Types de colonnes pris en charge** : n’importe quel type de colonne
+ **EXPRESSION** – Expression à exécuter en fonction de la réponse du type de règle afin de produire une valeur booléenne. Pour de plus amples informations, veuillez consulter [Expressions](dqdl.md#dqdl-syntax-rule-expressions).

**Exemple : ratio de valeurs uniques**

Cet exemple vérifie le ratio de valeurs uniques d'une colonne par rapport à une plage de valeurs.

```
UniqueValueRatio "test_score" between 0 and 0.5
UniqueValueRatio "Customer_ID" between 0 and 0.9 where "Customer_ID < 10"
```

 **Exemples de règles dynamiques** 
+ `UniqueValueRatio "colA" > avg(last(10))`
+ `UniqueValueRatio "colA" <= index(last(10),2) + std(last(5))`

# DetectAnomalies
<a name="dqdl-rule-types-DetectAnomalies"></a>

 Détecte les anomalies pour une règle de qualité des données donnée. Chaque exécution d'une DetectAnomalies règle entraîne l'enregistrement de la valeur évaluée pour la règle donnée. Lorsque suffisamment de données sont collectées, l'algorithme de détection des anomalies prend toutes les données historiques pour cette règle donnée et exécute la détection des anomalies. DetectAnomalies la règle échoue lorsqu'une anomalie est détectée. Plus d’informations sur l’anomalie détectée peuvent être obtenues à partir des observations. 

**Syntaxe**

```
       DetectAnomalies <RULE_NAME> <RULE_PARAMETERS>
```

 `RULE_NAME` : le nom de la règle pour laquelle vous souhaitez évaluer et détecter des anomalies. Règles prises en charge : 
+ "RowCount"
+ "Completeness"
+ "Uniqueness"
+ "Mean"
+ "Sum"
+ "StandardDeviation"
+ "Entropy"
+ "DistinctValuesCount"
+ "UniqueValueRatio"
+ "ColumnLength"
+ "ColumnValues"
+ "ColumnCorrelation"
+ "CustomSQL"
+ "ColumnCount"

 `RULE_PARAMETERS` : certaines règles nécessitent des paramètres supplémentaires pour s’exécuter. Reportez-vous à la documentation de la règle concernée pour connaître les paramètres requis. 

**Exemple : Anomalies pour RowCount**

Par exemple, si nous voulons détecter des RowCount anomalies, nous indiquons RowCount le nom de la règle. 

```
DetectAnomalies "RowCount"
```

**Exemple : Anomalies pour ColumnLength**

Par exemple, si nous voulons détecter des ColumnLength anomalies, nous indiquons le nom de la ColumnLength règle et le nom de la colonne. 

```
DetectAnomalies "ColumnLength" "id"
```

# FileFreshness
<a name="dqdl-rule-types-FileFreshness"></a>

 FileFreshness garantit que vos fichiers de données sont à jour en fonction de l'état que vous fournissez. Il utilise l'heure de dernière modification de vos fichiers pour s'assurer que les fichiers de données ou l'ensemble du dossier le sont up-to-date. 

 Cette règle regroupe deux métriques : 
+ FileFreshness conformité en fonction de la règle que vous avez définie
+ Nombre de fichiers analysés par la règle.

```
{"Dataset.*.FileFreshness.Compliance":1,"Dataset.*.FileCount":1} 
```

 La détection des anomalies ne prend pas en compte ces métriques. 

 **Vérification de l’actualité des fichiers** 

 La règle suivante garantit que tickets.parquet a été créé au cours des dernières 24 heures. 

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/tickets.parquet" > (now() - 24 hours)
```

 **Vérification de l’actualité du dossier** 

 La règle suivante s’applique si tous les fichiers du dossier ont été créés ou modifiés au cours des dernières 24 heures. 

```
FileFreshness "s3://bucket/" >= (now() -1 days)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" >= (now() - 24 hours)
```

 **Vérification de l’actualité d’un dossier ou d’un fichier avec un seuil** 

 La règle suivante s’applique si 10 % des fichiers du dossier « tickets » ont été créés ou modifiés au cours des 10 derniers jours. 

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" < (now() - 10 days) with threshold > 0.1
```

 **Vérification de fichiers ou de dossiers avec des dates spécifiques** 

 Vous pouvez vérifier l’actualité des fichiers pour des jours spécifiques. 

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > "2020-01-01"
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "2023-01-01" and "2024-01-01"
```

 **Vérification de fichiers ou de dossiers avec l’heure** 

 Vous pouvez l'utiliser FileFreshness pour vous assurer que les fichiers sont arrivés à certaines heures. 

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between now() and (now() - 45 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "9:30 AM" and "9:30 PM"
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > (now() - 10 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > now()
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between (now() - 2 hours) and (now() + 15 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between (now() - 3 days) and (now() + 15 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "2001-02-07" and (now() + 15 minutes)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > "21:45""
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > "2024-01-01"
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "02:30" and "04:30"
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" between "9:30 AM" and "22:15"
```

 Considérations clés : 
+  FileFreshness peut évaluer les fichiers en utilisant des unités de jours, d'heures et de minutes 
+  Parfois, elle prend en charge le format matins/après-midi et 24 heures 
+  Les heures sont calculées en UTC, sauf si une dérogation est spécifiée. 
+  Les dates sont calculées en UTC à 00:00. 

 FileFreshness qui sont basés sur le temps fonctionnent comme suit : 

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > "21:45"
```
+  Tout d’abord, l’heure « 21:45 » est combinée à la date du jour au format UTC pour créer un champ date-heure. 
+  Ensuite, le champ date-heure est converti en un fuseau horaire que vous avez spécifié. 
+  Enfin, la règle est évaluée. 

 **Balises de règles facultatives basées sur des fichiers :** 

 Les balises vous permettent de contrôler le comportement des règles. 

 **recentFiles** 

 Cette balise limite le nombre de fichiers traités en conservant le fichier le plus récent en premier. 

```
FileFreshness "s3://amzn-s3-demo-bucket/" between (now() - 100 minutes) and (now() + 10 minutes) with recentFiles = 1
```

 **URI Regex** 

**Note**  
 Le `uriRegex` tag est disponible dans AWS Glue 5.0 et versions ultérieures. 

 Cette balise filtre les fichiers en appliquant un modèle regex au chemin du fichier. Seuls les fichiers dont le chemin correspond au modèle sont traités. Vous pouvez également utiliser une prévision négative pour exclure les fichiers qui correspondent à un modèle. 

```
# Match only files with a .csv extension
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with uriRegex = "\.csv$"
# Match Parquet files that contain "orders_" in the path
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with uriRegex = ".*orders_.*\.parquet"
# Exclude files ending in .tmp using a negative lookahead
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with uriRegex = "(?!.*\.tmp$).*"
```

 **Ordre du filtre** 

**Note**  
 Le `filterOrder` tag est disponible dans AWS Glue 5.0 et versions ultérieures. 

 Lorsque vous utilisez plusieurs balises de filtre, telles que `recentFiles` et `uriRegex` ensemble, la `filterOrder` balise contrôle l'ordre dans lequel elles sont appliquées. L'ordre par défaut est `recentFiles` le premier, puis`uriRegex`. 

```
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with recentFiles = 1 with uriRegex = "inventory_" with filterOrder = ["uriRegex","recentFiles"]
```

 Dans l'exemple ci-dessus, le `uriRegex` filtre est d'abord appliqué pour sélectionner uniquement les fichiers correspondant à « inventory\$1 », puis `recentFiles = 1` prend le fichier le plus récent de cet ensemble filtré. Dans le cas contraire`filterOrder`, le comportement par défaut prendrait d'abord le fichier le plus récent, puis appliquerait l'expression régulière, ce qui pourrait entraîner l'absence de correspondance de fichiers si le fichier le plus récent ne correspond pas au modèle. 

**Note**  
 Toutes les valeurs de la `filterOrder` liste doivent faire référence à d'autres balises de filtre (`recentFiles`ou`uriRegex`) également présentes sur la même règle. Les balises non filtrantes telles que `timeZone` ou ne `failFast` sont pas valides dans`filterOrder`. 

 **Fail-vite** 

 Lorsqu'elle est définie sur`"true"`, la règle renvoie un échec immédiatement au premier fichier qui ne répond pas à la condition de fraîcheur, au lieu d'évaluer tous les fichiers et de calculer un ratio de conformité. 

```
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with failFast = "true"
```

 **timeZone** 

 Dérogations de fuseau horaire acceptées, consultez [Allowed Time Zones](https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html) pour connaître les fuseaux horaires pris en charge. 

```
FileFreshness "s3://path/" > "21:45" with timeZone = "America/New_York"
```

```
FileFreshness "s3://path/" > "21:45" with timeZone = "America/Chicago"
```

```
FileFreshness "s3://path/" > "21:45" with timeZone = "Europe/Paris"
```

```
FileFreshness "s3://path/" > "21:45" with timeZone = "Asia/Shanghai"
```

```
FileFreshness "s3://path/" > "21:45" with timeZone = "Australia/Darwin"
```

 **Déduction des noms de fichiers directement à partir de trames de données** 

 Il n’est pas toujours nécessaire de fournir un chemin d’accès au fichier. Par exemple, lorsque vous créez la règle dans le catalogue de données AWS Glue, il peut être difficile de trouver les dossiers utilisés par les tables du catalogue. AWS Glue Data Quality peut trouver les dossiers ou fichiers spécifiques utilisés pour remplir votre dataframe et détecter s'ils sont récents. 

**Note**  
 Cette fonctionnalité ne fonctionne que lorsque les fichiers sont correctement lus dans le DynamicFrame ou DataFrame. 

```
FileFreshness > (now() - 24 hours)
```

 Cette règle permet de trouver le chemin d’accès au dossier ou aux fichiers utilisés pour renseigner l’image dynamique ou la trame de données. Cela fonctionne pour les chemins Amazon S3 ou les tables AWS Glue Data Catalog basées sur Amazon S3. Voici quelques considérations à prendre en compte : 

1.  Dans AWS Glue ETL, vous devez disposer de la **EvaluateDataQuality**transformation immédiatement après une transformation d'Amazon S3 ou de AWS Glue Data Catalog.   
![\[La capture d’écran montre un nœud Evaluate Data Quality connecté à un nœud Amazon S3.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-file-freshness.png)

1.  Cette règle ne fonctionnera pas dans les sessions AWS Glue Interactive. 

 Si vous essayez de le faire dans les deux cas, ou si AWS Glue ne trouve pas les fichiers, AWS Glue générera le message d'erreur suivant : `“Unable to parse file path from DataFrame”` 

# FileMatch
<a name="dqdl-rule-types-FileMatch"></a>

 La FileMatch règle vous permet de comparer des fichiers à d'autres fichiers ou à des checksums. Elle peut être utile dans certains scénarios : 

1.  Validation des fichiers reçus de sources externes : vous pouvez vous FileMatch assurer que vous avez reçu les bons fichiers provenant de sources externes en les comparant aux sommes de contrôle. Cela permet de valider l’intégrité des données que vous ingérez. 

1.  Comparaison de données dans deux dossiers différents : FileMatch peut être utilisé pour comparer des fichiers entre deux dossiers. 

 Cette règle regroupe une métrique : le nombre de fichiers analysés par la règle. 

```
{"Dataset.*.FileCount":1}
```

 **Valider le fichier avec une somme de contrôle :** 

 FileMatch accepte un fichier et une somme de contrôle définie pour s'assurer qu'au moins une somme de contrôle correspond au fichier. 

```
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "MD5"
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-1"
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-256"
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac041793154713e5ef8f319"]
```

 Les algorithmes standard suivants sont pris en charge : 
+ MD5
+ SHA-1
+ SHA-256

 Si vous ne fournissez aucun algorithme, la valeur par défaut est SHA-256. 

 **Valider tous les fichiers d’un dossier avec un ensemble de sommes de contrôle :** 

```
FileMatch "s3://amzn-s3-demo-bucket /" in ["3ee0d8617ac041793154713e5ef8f319", "7e8617ac041793154713e5ef8f319"] with hashAlgorithm = "MD5"
FileMatch "s3://amzn-s3-demo-bucket /internal-folder/" in ["3ee0d8617ac041793154713e5ef8f319", "7e8617ac041793154713e5ef8f319"]
```

 **Comparer des fichiers dans différents dossiers** 

```
# Compare all files across two buckets
FileMatch "s3://original_bucket/" "s3://archive_bucket/"
# Compare files within specific subfolders
FileMatch "s3://original_bucket/internal-folder/" "s3://original_bucket/other-folder/"
# Compare only .json files across two folders
FileMatch "s3://original_bucket/" "s3://archive_bucket/" with uriRegex = "\.json$"
# Compare only the 5 most recent .csv files
FileMatch "s3://original_bucket/" "s3://archive_bucket/" with recentFiles = 5 with uriRegex = "\.csv$" with filterOrder = ["uriRegex","recentFiles"]
```

 FileMatch vérifiera le contenu des fichiers `original_bucket` et s'assurera qu'ils correspondent à ce qu'ils contiennent`archive_bucket`. La règle échouera s’ils ne correspondent pas exactement. Elle peut également vérifier le contenu de dossiers internes ou de fichiers individuels. 

 FileMatch peut également vérifier les fichiers individuels les uns par rapport aux autres. 

```
FileMatch "s3://amzn-s3-demo-bucket /file_old.json" "s3://amzn-s3-demo-bucket /file_new.json"
```

 **Déduction des noms de fichiers directement à partir de trames de données** 

 Il n’est pas toujours nécessaire de fournir un chemin d’accès au fichier. Par exemple, lorsque vous créez la règle dans le catalogue de données AWS Glue (soutenu par Amazon S3), il peut être difficile de trouver les dossiers utilisés par les tables du catalogue. AWS Glue Data Quality peut trouver les dossiers ou fichiers spécifiques utilisés pour remplir votre bloc de données. 

**Note**  
 Cette fonctionnalité ne fonctionne que lorsque les fichiers sont correctement lus dans le DynamicFrame ou DataFrame. 

```
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "MD5"
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-1"
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-256"
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"]
```

 Si la somme de contrôle fournie est différente de celle calculée, elle vous FileMatch avertira de la différence. 

![\[La capture d'écran montre une règle dont le statut DQ est Rule failed. FileMatch explique l'échec.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-file-match.png)


 **Balises de règles facultatives basées sur des fichiers :** 

 Les balises vous permettent de contrôler le comportement des règles. 

 **recentFiles** 

 Cette balise limite le nombre de fichiers traités en conservant le fichier le plus récent en premier. 

```
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with recentFiles = 1
```

 **URI Regex** 

**Note**  
 Le `uriRegex` tag est disponible dans AWS Glue 5.0 et versions ultérieures. 

 Cette balise filtre les fichiers en appliquant un modèle regex au chemin du fichier. Seuls les fichiers dont le chemin correspond au modèle sont traités. Vous pouvez également utiliser une prévision négative pour exclure les fichiers qui correspondent à un modèle. 

```
# Match only files with a .json extension
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with uriRegex = "\.json$"
# Exclude files ending in .tmp using a negative lookahead
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with uriRegex = "(?!.*\.tmp$).*"
```

 **Ordre du filtre** 

**Note**  
 Le `filterOrder` tag est disponible dans AWS Glue 5.0 et versions ultérieures. 

 Lorsque vous utilisez plusieurs balises de filtre, telles que `recentFiles` et `uriRegex` ensemble, la `filterOrder` balise contrôle l'ordre dans lequel elles sont appliquées. L'ordre par défaut est `recentFiles` le premier, puis`uriRegex`. 

```
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with recentFiles = 1 with uriRegex = "\.json$" with filterOrder = ["uriRegex","recentFiles"]
```

 **matchFileName** 

 Cette balise garantit que les fichiers ne comportent pas de noms en double. Le comportement par défaut est false. 

```
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac04179sam4713e5ef8f319"] with matchFileName = "true"
```

 Voici quelques considérations à prendre en compte : 

1.  Dans AWS Glue ETL, vous devez disposer de la **EvaluateDataQuality**transformation immédiatement après une transformation d'Amazon S3 ou de AWS Glue Data Catalog.   
![\[La capture d'écran montre une règle dont le statut DQ est Rule failed. FileMatch explique l'échec.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-file-match-transform.png)

1.  Cette règle ne fonctionnera pas dans les sessions AWS Glue Interactive. 

# FileUniqueness
<a name="dqdl-rule-types-FileUniqueness"></a>

 L’unicité des fichiers vous permet de vous assurer qu’il n’y a pas de doublons dans les données que vous avez reçues de vos producteurs de données. 

 Elle rassemble les statistiques de données suivantes : 

1.  Nombre de fichiers analysés par la règle. 

1.  Le taux d’unicité des fichiers 

```
Dataset.*.FileUniquenessRatio: 1.00, Dataset.*.FileCount: 8.00
```

 **Rechercher des fichiers en double dans un dossier :** 

```
FileUniqueness "s3://bucket/" > 0.5
FileUniqueness "s3://bucket/folder/" = 1
```

 **Déduire les noms de dossiers directement à partir des trames de données pour détecter les doublons :** 

 Il n’est pas toujours nécessaire de fournir un chemin d’accès au fichier. Par exemple, lorsque vous créez la règle dans le catalogue de données AWS Glue, il peut être difficile de trouver les dossiers utilisés par les tables du catalogue. AWS Glue Data Quality peut trouver les dossiers ou fichiers spécifiques utilisés pour remplir votre bloc de données. 

**Note**  
 Lors de l'utilisation de l'inférence, les règles basées sur les fichiers peuvent uniquement détecter les fichiers lus avec succès dans le DynamicFrame ou. DataFrame 

```
FileUniqueness > 0.5
```

 **Balises de règles facultatives basées sur des fichiers :** 

 Les balises vous permettent de contrôler le comportement des règles. 

 **recentFiles** 

 Cette balise limite le nombre de fichiers traités en conservant le fichier le plus récent en premier. 

```
FileUniqueness "s3://amzn-s3-demo-bucket/" > 0.5 with recentFiles = 1
```

 **URI Regex** 

**Note**  
 Le `uriRegex` tag est disponible dans AWS Glue 5.0 et versions ultérieures. 

 Cette balise filtre les fichiers en appliquant un modèle regex au chemin du fichier. Seuls les fichiers dont le chemin correspond au modèle sont traités. Vous pouvez également utiliser une prévision négative pour exclure les fichiers qui correspondent à un modèle. 

```
# Match only files with a .csv extension
FileUniqueness "s3://bucket/" > 0.5 with uriRegex = "\.csv$"
# Exclude files ending in .tmp using a negative lookahead
FileUniqueness "s3://bucket/" > 0.5 with uriRegex = "(?!.*\.tmp$).*"
```

 **Ordre du filtre** 

**Note**  
 Le `filterOrder` tag est disponible dans AWS Glue 5.0 et versions ultérieures. 

 Lorsque vous utilisez plusieurs balises de filtre, telles que `recentFiles` et `uriRegex` ensemble, la `filterOrder` balise contrôle l'ordre dans lequel elles sont appliquées. L'ordre par défaut est `recentFiles` le premier, puis`uriRegex`. 

```
FileUniqueness "s3://bucket/" > 0.5 with recentFiles = 5 with uriRegex = "\.csv$" with filterOrder = ["uriRegex","recentFiles"]
```

 **matchFileName** 

 Cette balise garantit que les fichiers ne comportent pas de noms en double. Le comportement par défaut est false. 

```
FileUniqueness "s3://amzn-s3-demo-bucket/" > 0.5 with matchFileName = "true"
```

 Voici quelques considérations à prendre en compte : 

1.  Dans AWS Glue ETL, vous devez disposer de la **EvaluateDataQuality**transformation immédiatement après une transformation d'Amazon S3 ou de AWS Glue Data Catalog. 

1.  Cette règle ne fonctionnera pas dans les sessions AWS Glue Interactive. 

# FileSize
<a name="dqdl-rule-types-FileSize"></a>

 Le FileSize type de règle vous permet de vous assurer que les fichiers répondent à certains critères de taille de fichier. Cela s’avère utile dans les cas d’utilisation suivants : 

1.  Assurez-vous que les producteurs n’envoient pas de fichiers vides ou nettement plus petits en traitement. 

1.  Assurez-vous que vos compartiments cible ne contiennent pas de fichiers plus petits, ce qui pourrait entraîner des problèmes de performances. 

 FileSize rassemble les métriques suivantes : 

1.  Compliance : renvoie le pourcentage de fichiers qui atteignent le seuil de règle que vous avez établi 

1.  File Count : nombre de fichiers analysés par la règle 

1.  Taille minimale du fichier en octets 

1.  Taille maximale du fichier en octets 

```
Dataset.*.FileSize.Compliance: 1.00, 
Dataset.*.FileCount: 8.00, 
Dataset.*.MaximumFileSize: 327413121.00, 
Dataset.*.MinimumFileSize: 204558920.00
```

 La détection des anomalies n’est pas prise en charge pour ces métriques. 

 **Valider la taille des fichiers** 

 Cette règle est acceptée lorsque l’élément file.dat est supérieur à 2 Mo. 

```
FileSize "s3://amzn-s3-demo-bucket/file.dat" > 2 MB
```

 Les unités prises en charge sont les suivantes : o (octets), Mo (mégaoctets), Go (gigaoctets) et To (téraoctets). 

 **Valider la taille des fichiers dans les dossiers** 

```
FileSize "s3://bucket/" > 5 B
FileSize "s3://bucket/" < 2 GB
```

 Cette règle sera acceptée si 70 % des fichiers dans s3://amzn-s3-demo-bucket ont une taille comprise entre 2 Go et 1 To. 

```
FileSize "s3://amzn-s3-demo-bucket/" between 2 GB and 1 TB  with threshold > 0.7
```

 **Déduction des noms de fichiers directement à partir de trames de données** 

 Il n’est pas toujours nécessaire de fournir un chemin d’accès au fichier. Par exemple, lorsque vous créez la règle dans le catalogue de données, il peut être difficile de trouver les dossiers utilisés par les tables du catalogue. AWS Glue Data Quality peut trouver les dossiers ou fichiers spécifiques utilisés pour remplir votre bloc de données. 

**Note**  
 Cette fonctionnalité ne fonctionne que lorsque les fichiers sont correctement lus dans le DynamicFrame ou DataFrame. 

```
FileSize < 10 MB with threshold > 0.7
```

 **Balises de règles facultatives basées sur des fichiers :** 

 Les balises vous permettent de contrôler le comportement des règles. 

 **recentFiles** 

 Cette balise limite le nombre de fichiers traités en conservant le fichier le plus récent en premier. 

```
FileSize "s3://amzn-s3-demo-bucket/" > 5 B with recentFiles = 1
```

 **URI Regex** 

**Note**  
 Le `uriRegex` tag est disponible dans AWS Glue 5.0 et versions ultérieures. 

 Cette balise filtre les fichiers en appliquant un modèle regex au chemin du fichier. Seuls les fichiers dont le chemin correspond au modèle sont traités. Vous pouvez également utiliser une prévision négative pour exclure les fichiers qui correspondent à un modèle. 

```
# Match only files with a .dat extension
FileSize "s3://bucket/" > 5 B with uriRegex = "\.dat$"
# Exclude files ending in .tmp using a negative lookahead
FileSize "s3://bucket/" > 5 B with uriRegex = "(?!.*\.tmp$).*"
```

 **Ordre du filtre** 

**Note**  
 Le `filterOrder` tag est disponible dans AWS Glue 5.0 et versions ultérieures. 

 Lorsque vous utilisez plusieurs balises de filtre telles que `recentFiles` et `uriRegex` ensemble, la `filterOrder` balise contrôle l'ordre dans lequel elles sont appliquées. L'ordre par défaut est `recentFiles` le premier, puis`uriRegex`. 

```
FileSize "s3://bucket/" > 5 B with recentFiles = 5 with uriRegex = "\.dat$" with filterOrder = ["uriRegex","recentFiles"]
```

 **FailFast** 

 Lorsqu'elle est définie sur`"true"`, la règle renvoie l'échec immédiatement au premier fichier qui ne répond pas à la condition de taille, au lieu d'évaluer tous les fichiers et de calculer un ratio de conformité. 

```
FileSize "s3://bucket/" > 2 MB with failFast = "true"
```

 Voici quelques considérations à prendre en compte : 

1.  Dans AWS Glue ETL, vous devez disposer d' DataQuality Evaluate Transform immédiatement après la transformation d'Amazon S3 ou de Data Catalog. 

1.  Cette règle ne fonctionnera pas dans les sessions AWS Glue Interactive. 

# Utilisation APIs pour mesurer et gérer la qualité des données
<a name="data-quality-using-apis"></a>

Cette rubrique décrit comment l'utiliser APIs pour mesurer et gérer la qualité des données.

**Contents**
+ [Conditions préalables](#using-apis-prerequisites)
+ [Utilisation des recommandations relatives à AWS la qualité des données de Glue](#using-apis-recommendations)
+ [Travailler avec les ensembles de règles de qualité des données de AWS Glue](#using-apis-rulesets)
+ [Travailler avec AWS Glue Data Quality s'exécute](#using-apis-runs)
+ [Utilisation des résultats AWS de Glue Data Quality](#using-apis-results)

## Conditions préalables
<a name="using-apis-prerequisites"></a>
+ Assurez-vous que votre version de boto3 est à jour afin d'inclure la dernière API AWS Glue Data Quality.
+ Assurez-vous que la version de votre AWS CLI est à jour, afin d'inclure la dernière version de la CLI.

Si vous utilisez une tâche AWS Glue pour les exécuter APIs, vous pouvez utiliser l'option suivante pour mettre à jour la dernière version de la bibliothèque boto3 :

```
—additional-python-modules boto3==<version>
```

## Utilisation des recommandations relatives à AWS la qualité des données de Glue
<a name="using-apis-recommendations"></a>

**Pour démarrer une recommandation de AWS Glue Data Quality, exécutez :**

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client
        
    def start_data_quality_rule_recommendation_run(self, database_name, table_name, role_arn):
        """
        Starts a recommendation run that is used to generate rules when you don't know what rules to write. AWS Glue Data Quality 
        analyzes the data and comes up with recommendations for a potential ruleset. You can then triage the ruleset 
        and modify the generated ruleset to your liking.

        :param database_name: The name of the AWS Glue database which contains the dataset.
        :param table_name: The name of the AWS Glue table against which we want a recommendation
        :param role_arn: The Amazon Resource Name (ARN) of an AWS Identity and Access Management (IAM) role that grants permission to let AWS Glue access the resources it needs.

        """
        try:
            response = self.client.start_data_quality_rule_recommendation_run(
                DataSource={
                    'GlueTable': {
                        'DatabaseName': database_name,
                        'TableName': table_name
                    }
                },
                Role=role_arn
            )
        except ClientError as err:
            logger.error(
                "Couldn't start data quality recommendation run %s. Here's why: %s: %s", name,
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
        else:
            return response['RunId']
```

Pour une exécution de recommandation, vous pouvez utiliser vos `pushDownPredicates` ou vos `catalogPartitionPredicates` pour améliorer les performances et exécuter des recommandations uniquement sur des partitions spécifiques de vos sources de catalogue.

```
client.start_data_quality_rule_recommendation_run(
            DataSource={
                'GlueTable': {
                    'DatabaseName': database_name,
                    'TableName': table_name,
                    'AdditionalOptions': {
                        'pushDownPredicate': "year=2022"
                    }
                }
            },
            Role=role_arn,
            NumberOfWorkers=2,
            CreatedRulesetName='<rule_set_name>'
  )
```

**Pour obtenir les résultats d'une recommandation de AWS Glue Data Quality, exécutez :**

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client
    
    def get_data_quality_rule_recommendation_run(self, run_id):
        """
        Gets the specified recommendation run that was used to generate rules.

        :param run_id: The id of the data quality recommendation run
        
        """
        try:
            response = self.client.get_data_quality_rule_recommendation_run(RunId=run_id)
        except ClientError as err:
            logger.error(
                "Couldn't get data quality recommendation run %. Here's why: %s: %s", run_id,
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
        else:
            return response
```

À partir de l'objet de réponse ci-dessus, vous pouvez extraire celui RuleSet qui a été recommandé par l'exécution, pour l'utiliser dans les étapes suivantes :

```
print(response['RecommendedRuleset'])

Rules = [
    RowCount between 2000 and 8000,
    IsComplete "col1",
    IsComplete "col2",
    StandardDeviation "col3" between 58138330.8 and 64258155.09,
    ColumnValues "col4" between 1000042965 and 1214474826,
    IsComplete "col5"
]
```

**Pour obtenir une liste de toutes vos exécutions de recommandation qui peuvent être filtrées et répertoriées :**

```
response = client.list_data_quality_rule_recommendation_runs(
    Filter={
        'DataSource': {
            'GlueTable': {
                'DatabaseName': '<database_name>',
                'TableName': '<table_name>'
            }
        }
)
```

**Pour annuler les tâches de recommandation de AWS Glue Data Quality existantes, procédez comme suit :**

```
response = client.cancel_data_quality_rule_recommendation_run(
    RunId='dqrun-d4b6b01957fdd79e59866365bf9cb0e40fxxxxxxx'
)
```

## Travailler avec les ensembles de règles de qualité des données de AWS Glue
<a name="using-apis-rulesets"></a>

**Pour créer un ensemble de règles AWS Glue Data Quality, procédez comme suit :**

```
response = client.create_data_quality_ruleset(
    Name='<ruleset_name>',
    Ruleset='Rules = [IsComplete "col1", IsPrimaryKey "col2", RowCount between 2000 and 8000]',
    TargetTable={
        'TableName': '<table_name>',
        'DatabaseName': '<database_name>'
    }
)
```

**Pour obtenir un ensemble de règles de qualité des données :**

```
response = client.get_data_quality_ruleset(
    Name='<ruleset_name>'
)
print(response)
```

Vous pouvez utiliser cette API pour ensuite extraire l'ensemble de règles :

```
print(response['Ruleset'])
```

**Pour répertorier tous les ensembles de règles de qualité des données pour une table :**

```
response = client.list_data_quality_rulesets()
```

Vous pouvez utiliser la condition de filtrage dans l'API pour filtrer tous les ensembles de règles attachés à une base de données ou à une table spécifique :

```
response = client.list_data_quality_rulesets(
    Filter={
        'TargetTable': {
            'TableName': '<table_name>',
            'DatabaseName': '<database_name>'
        }
    },
)
```

**Pour mettre à jour un ensemble de règles de qualité des données :**

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client
        
    def update_data_quality_ruleset(self, ruleset_name, ruleset_string):
        """
        Update an AWS Glue Data Quality Ruleset
        
        :param ruleset_name: The name of the AWS Glue Data Quality ruleset to update
        :param ruleset_string: The DQDL ruleset string to update the ruleset with

        """
        try:
            response = self.client.update_data_quality_ruleset(
                Name=ruleset_name,
                Ruleset=ruleset_string
            )
        except ClientError as err:
            logger.error(
                "Couldn't update the AWS Glue Data Quality ruleset. Here's why: %s: %s", 
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
        else:
            return response
```

**Pour supprimer un ensemble de règles de qualité des données :**

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client
        
    def delete_data_quality_ruleset(self, ruleset_name):
        """
        Delete a AWS Glue Data Quality Ruleset
        
        :param ruleset_name: The name of the AWS Glue Data Quality ruleset to delete

        """
        try:
            response = self.client.delete_data_quality_ruleset(
                Name=ruleset_name
            )
        except ClientError as err:
            logger.error(
                "Couldn't delete the AWS Glue Data Quality ruleset. Here's why: %s: %s", 
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
        else:
            return response
```

## Travailler avec AWS Glue Data Quality s'exécute
<a name="using-apis-runs"></a>

**Pour démarrer une exécution de AWS Glue Data Quality, procédez comme suit :**

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client
        
    def start_data_quality_ruleset_evaluation_run(self, database_name, table_name, role_name, ruleset_list):
        """
        Start an AWS Glue Data Quality evaluation run
        
        :param database_name: The name of the AWS Glue database which contains the dataset.
        :param table_name: The name of the AWS Glue table against which we want to evaluate.
        :param role_arn: The Amazon Resource Name (ARN) of an AWS Identity and Access Management (IAM) role that grants permission to let AWS Glue access the resources it needs. 
        :param ruleset_list: The list of AWS Glue Data Quality ruleset names to evaluate.

        """
        try:
            response = client.start_data_quality_ruleset_evaluation_run(
                DataSource={
                    'GlueTable': {
                        'DatabaseName': database_name,
                        'TableName': table_name
                    }
                },
                Role=role_name,
                RulesetNames=ruleset_list
            )
        except ClientError as err:
            logger.error(
                "Couldn't start the AWS Glue Data Quality Run. Here's why: %s: %s", 
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
        else:
            return response['RunId']
```

N'oubliez pas que vous pouvez transmettre un paramètre `pushDownPredicate` ou `catalogPartitionPredicate` pour garantir que votre exécution de qualité des données ne cible qu'un ensemble spécifique de partitions dans votre table de catalogue. Par exemple :

```
response = client.start_data_quality_ruleset_evaluation_run(
    DataSource={
        'GlueTable': {
            'DatabaseName': '<database_name>',
            'TableName': '<table_name>',
            'AdditionalOptions': {
                'pushDownPredicate': 'year=2023'
            }
        }
    },
    Role='<role_name>',
    NumberOfWorkers=5,
    Timeout=123,
    AdditionalRunOptions={
        'CloudWatchMetricsEnabled': False
    },
    RulesetNames=[
        '<ruleset_name>',
    ]
)
```

 Vous pouvez également configurer la manière dont les règles composites de votre ensemble de règles sont évaluées, au niveau de la LIGNE ou de la COLONNE. Pour plus d’informations sur le fonctionnement des règles composites, reportez-vous à [How composite rules work](dqdl.md#dqdl-syntax-composite-rules) dans la documentation. 

 Exemple expliquant comment définir la méthode d’évaluation des règles composites dans votre demande : 

```
response = client.start_data_quality_ruleset_evaluation_run(
    DataSource={
        'GlueTable': {
            'DatabaseName': '<database_name>',
            'TableName': '<table_name>',
            'AdditionalOptions': {
                'pushDownPredicate': 'year=2023'
            }
        }
    },
    Role='<role_name>',
    NumberOfWorkers=5,
    Timeout=123,
    AdditionalRunOptions={
        'CompositeRuleEvaluationMethod':ROW
    },
    RulesetNames=[
        '<ruleset_name>',
    ]
)
```

 **Pour obtenir des informations sur un AWS Glue Data Quality, exécutez :** 

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client
        
    def get_data_quality_ruleset_evaluation_run(self, run_id):
        """
        Get details about an AWS Glue Data Quality Run
        
        :param run_id: The AWS Glue Data Quality run ID to look up

        """
        try:
            response = self.client.get_data_quality_ruleset_evaluation_run(
                RunId=run_id
            )
        except ClientError as err:
            logger.error(
                "Couldn't look up the AWS Glue Data Quality run ID. Here's why: %s: %s", 
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
        else:
            return response
```

**Pour obtenir les résultats d'une exécution de AWS Glue Data Quality :**

Pour une exécution de AWS Glue Data Quality donnée, vous pouvez extraire les résultats de l'évaluation de l'exécution à l'aide de la méthode suivante :

```
response = client.get_data_quality_ruleset_evaluation_run(
    RunId='d4b6b01957fdd79e59866365bf9cb0e40fxxxxxxx'
)

resultID = response['ResultIds'][0]

response = client.get_data_quality_result(
    ResultId=resultID
)

print(response['RuleResults'])
```

**Pour répertorier toutes vos exécutions de AWS Glue Data Quality, procédez comme suit :**

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client
        
    def list_data_quality_ruleset_evaluation_runs(self, database_name, table_name):
        """
        Lists all the AWS Glue Data Quality runs against a given table
        
        :param database_name: The name of the database where the data quality runs 
        :param table_name: The name of the table against which the data quality runs were created
        
        """
        try:
            response = self.client.list_data_quality_ruleset_evaluation_runs(
                Filter={
                    'DataSource': {
                        'GlueTable': {
                            'DatabaseName': database_name,
                            'TableName': table_name
                        }
                    }
                }
            )
        except ClientError as err:
            logger.error(
                "Couldn't list the AWS Glue Quality runs. Here's why: %s: %s", 
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
        else:
            return response
```

Vous pouvez modifier la clause de filtrage pour n'afficher que les résultats obtenus à des moments précis ou concernant des tables spécifiques.

**Pour arrêter une exécution de AWS Glue Data Quality en cours, procédez comme suit :**

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client
        
    def cancel_data_quality_ruleset_evaluation_run(self, result_id):
        """
        Cancels a given AWS Glue Data Quality run
        
        :param result_id: The result id of a AWS Glue Data Quality run to cancel
        
        """
        try:
            response = self.client.cancel_data_quality_ruleset_evaluation_run(
                ResultId=result_id
            )
        except ClientError as err:
            logger.error(
                "Couldn't cancel the AWS Glue Data Quality run. Here's why: %s: %s", 
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
        else:
            return response
```

## Utilisation des résultats AWS de Glue Data Quality
<a name="using-apis-results"></a>

 **Pour obtenir les résultats de votre exécution avec AWS Glue Data Quality, procédez comme suit :** 

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client
        
    def get_data_quality_result(self, result_id):
        """
        Outputs the result of an AWS Glue Data Quality Result
        
        :param result_id: The result id of an AWS Glue Data Quality run
        
        """
        try:
            response = self.client.get_data_quality_result(
                ResultId=result_id
            )
        except ClientError as err:
            logger.error(
                "Couldn't get the AWS Glue Data Quality result. Here's why: %s: %s", 
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
        else:
            return response
```

 **Pour consulter les statistiques recueillies pour un résultat de qualité des données donné :** 

```
import boto3
from botocore.exceptions import ClientError
import logging

logger = logging.getLogger(__name__)
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client
        
    def get_profile_for_data_quality_result(self, result_id):
        """
        Outputs the statistic profile for a AWS Glue Data Quality Result
        
        :param result_id: The result id of a AWS Glue Data Quality run
        
        """
        try:
            response = self.glue_client.get_data_quality_result(
                ResultId=result_id
            )
            
            # the profile contains all statistics gathered for the result
            profile_id = response['ProfileId']
            profile = self.glue_client.list_data_quality_statistics(
                ProfileId = profile_id
            )            
            return profile                        
        except ClientError as err:
            logger.error(
                "Couldn't retrieve Data Quality profile. Here's why: %s: %s", 
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
```

 **Pour consulter les séries temporelles d’une statistique collectée au cours de plusieurs cycles de qualité des données :** 

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client

    def get_statistics_for_data_quality_result(self, profile_id):
        """
        Outputs an array of datapoints for each statistic in the input result.

        :param result_id: The profile id of a AWS Glue Data Quality run

        """
        try:
            profile = self.glue_client.list_data_quality_statistics(
                ProfileId = profile_id
            )
            statistics = [self.glue_client.list_data_quality_statistics(
                StatisticId = s['StatisticId']
            ) for s in profile['Statistics']]
            return statistics
        except ClientError as err:
            logger.error(
                "Couldn't retrieve Data Quality statistics. Here's why: %s: %s",
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
```

 **Pour afficher le modèle de détection d’anomalies pour une statistique spécifique :** 

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client

    def get_model_training_result_for_statistic(self, statistic_id, profile_id):
        """
        Outputs the details (bounds) of anomaly detection training for the given statistic at the given profile.

        :param statistic_id the model's statistic (the timeseries it is tracking)
        :param profile_id the profile associated with the model (a point in the timeseries)

        """
        try:
            model = self.glue_client.get_data_quality_model_result(
                ProfileId = profile_id, StatisticId = statistic_id
            )
            return model
        except ClientError as err:
            logger.error(
                "Couldn't retrieve Data Quality model results. Here's why: %s: %s",
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
```

 **Pour exclure un point de données de la ligne de base de détection des anomalies de son modèle statistique :** 

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client

    def apply_exclusions_to_statistic(self, statistic_id, profile_ids):
        """
        Annotate some points along a given statistic timeseries.
        
        This example excludes the provided values; INCLUDE can also be used to undo this action.

        :param statistic_id the statistic timeseries to annotate
        :param profile_id the profiles we want to exclude (points in the timeseries)

        """

        try:
            response = self.glue_client.batch_put_data_quality_statistic_annotation(
                    InclusionAnnotations = [
                        {'ProfileId': prof_id, 
                        'StatisticId': statistic_id, 
                        'InclusionAnnotation': 'EXCLUDE'} for prof_id in profile_ids
                    ]
            )
            return response['FailedInclusionAnnotations']
        except ClientError as err:
            logger.error(
                "Couldn't store Data Quality annotations. Here's why: %s: %s",
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
```

 **Pour consulter l’état de l’entraînement des modèles de détection des anomalies pour une statistique spécifique :** 

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client

    def get_model_training_status_for_statistic(self, statistic_id, profile_id):
        """
        Outputs the status of anomaly detection training for the given statistic at the given profile.

        :param statistic_id the model's statistic (the timeseries it is tracking)
        :param profile_id the profile associated with the model (a point in the timeseries)

        """
        try:
            model = self.glue_client.get_data_quality_model(
                ProfileId = profile_id, StatisticId = statistic_id
            )
            return model
        except ClientError as err:
            logger.error(
                "Couldn't retrieve Data Quality statistics. Here's why: %s: %s",
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
```

 **Pour exclure tous les résultats d’une analyse de qualité des données spécifique des références de détection des anomalies :** 

```
class GlueWrapper:
    """Encapsulates AWS Glue actions."""
    def __init__(self, glue_client):
        """
        :param glue_client: A Boto3 AWS Glue client.
        """
        self.glue_client = glue_client

    def apply_exclusions_to_profile(self, profile_id):
        """
        Exclude datapoints produced by a run across statistic timeseries.

        This example excludes the provided values; INCLUDE can also be used to undo this action.

        :param profile_id the profiles we want to exclude (points in the timeseries)

        """
        try:
            response = self.glue_client.put_data_quality_profile_annotation(
                    ProfileId = profile_id,
                    InclusionAnnotation = "EXCLUDE"
            )
            return response
        except ClientError as err:
            logger.error(
                "Couldn't store Data Quality annotations. Here's why: %s: %s",
                err.response['Error']['Code'], err.response['Error']['Message'])
            raise
```

 **Pour obtenir les résultats d’une exécution de la qualité des données et afficher les résultats :** 

 Avec une AWS Glue Data Quality`runID`, vous pouvez les extraire `resultID` pour obtenir les résultats réels, comme indiqué ci-dessous : 

```
response = client.get_data_quality_ruleset_evaluation_run(
    RunId='dqrun-abca77ee126abe1378c1da1ae0750d7dxxxx'
)

resultID = response['ResultIds'][0]

response = client.get_data_quality_result(
    ResultId=resultID
)

print(resp['RuleResults'])
```

# Configuration des alertes, des déploiements et de la planification
<a name="data-quality-alerts"></a>

Cette rubrique explique comment configurer les alertes, les déploiements et la planification pour AWS Glue Data Quality.

**Contents**
+ [Configuration des alertes et des notifications dans le cadre de EventBridge l'intégration Amazon](#data-quality-alerts-eventbridge)
  + [Options de configuration supplémentaires pour le modèle d'événement](#data-quality-alerts-eventbridge-config-options)
  + [Formatage des notifications sous forme d'e-mails](#data-quality-alerts-eventbridge-format-notifications)
+ [Configurer des alertes et des notifications lors de l' CloudWatch intégration](#data-quality-alerts-cloudwatch)
+ [Interrogation des résultats de la qualité des données pour créer des tableaux de bord](#data-quality-alerts-querying-results)
+ [Déploiement de règles de qualité des données en utilisant AWS CloudFormation](#data-quality-deploy-cfn)
+ [Planification de règles de qualité des données](#data-quality-scheduling-rules)

## Configuration des alertes et des notifications dans le cadre de EventBridge l'intégration Amazon
<a name="data-quality-alerts-eventbridge"></a>

AWS Glue Data Quality prend en charge la publication d' EventBridge événements, qui sont émis à la fin d'une évaluation d'un ensemble de règles de qualité des données. Vous pouvez ainsi facilement configurer des alertes en cas d'échec des règles de qualité des données.

Voici un exemple d'événement lorsque vous évaluez des ensembles de règles de qualité des données dans le catalogue de données. Grâce à ces informations, vous pouvez consulter les données mises à disposition par Amazon EventBridge. Vous pouvez lancer des appels d'API supplémentaires pour obtenir plus de détails. Par exemple, appelez l'API `get_data_quality_result` avec l'ID du résultat pour obtenir les détails d'une exécution particulière.

```
{
    "version":"0",
    "id":"abcdef00-1234-5678-9abc-def012345678",
    "detail-type":"Data Quality Evaluation Results Available",
    "source":"aws.glue-dataquality",
    "account":"123456789012",
    "time":"2017-09-07T18:57:21Z",
    "region":"us-west-2",
    "resources":[],
    "detail":{
        "context": {
                    "contextType": "GLUE_DATA_CATALOG",
                    "runId":"dqrun-12334567890",
                    "databaseName": "db-123",
                    "tableName": "table-123",
                    "catalogId": "123456789012"
                    },
        "resultID": "dqresult-12334567890",
        "rulesetNames": ["rulset1"],
        "state":"SUCCEEDED",
        "score": 1.00,
        "rulesSucceeded": 100,
        "rulesFailed": 0,
        "rulesSkipped": 0
    }
}
```

Voici un exemple d'événement publié lorsque vous évaluez des ensembles de règles de qualité des données dans les blocs-notes AWS Glue ETL ou AWS Glue Studio.

```
{
    "version":"0",
    "id":"abcdef00-1234-5678-9abc-def012345678",
    "detail-type":"Data Quality Evaluation Results Available",
    "source":"aws.glue-dataquality",
    "account":"123456789012",
    "time":"2017-09-07T18:57:21Z",
    "region":"us-west-2",
    "resources":[],
    "detail":{
        "context": {
                    "contextType": "GLUE_JOB",
                    "jobId": "jr-12334567890",
                    "jobName": "dq-eval-job-1234",
                    "evaluationContext": "", 
                    }
        "resultID": "dqresult-12334567890",
        "rulesetNames": ["rulset1"],
        "state":"SUCCEEDED",
        "score": 1.00
        "rulesSucceeded": 100,
        "rulesFailed": 0,
        "rulesSkipped": 0
    }
}
```

Pour que l'évaluation de la qualité des données soit exécutée à la fois dans le catalogue de données et dans les tâches ETL, l' Amazon CloudWatch option **Publier les métriques** sur, sélectionnée par défaut, doit rester sélectionnée pour que la EventBridge publication fonctionne.

**Configuration des EventBridge notifications**

![\[Propriétés de qualité des données dans AWS CloudFormation\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-properties-cfn.png)


Pour recevoir les événements émis et définir des cibles, vous devez configurer les EventBridge règles Amazon. Pour créer des règles :

1. Ouvrez la EventBridge console Amazon.

1. Choisissez **Règles** dans la section **Bus** de la barre de navigation.

1. Choisissez **Create Rule (Créer une règle)**.

1. Sous **Définir les détails de la règle** :

   1. Pour le nom, saisissez `myDQRule`.

   1. Saisissez une description (facultatif).

   1. Pour le bus d'événements, sélectionnez votre bus d'événements. Si vous n'en avez pas, laissez le bus par défaut.

   1. Pour Type de règle, sélectionnez **Règle avec un modèle d'événement**, puis choisissez **Suivant**.

1. Sous **Créer un modèle d'événement** : 

   1. Pour la source de l'événement, sélectionnez **AWS les événements ou les événements EventBridge partenaires**.

   1. Ignorez la section de l'exemple d'événement.

   1. Pour la méthode de création, sélectionnez **Utiliser le formulaire de modèle**.

   1. Pour le modèle d'événement :

      1. Sélectionnez **Services AWS ** pour Source de l'événement.

      1. Sélectionnez **Glue Data Quality** pour le AWS service.

      1. Sélectionnez **Résultats de l'évaluation de la qualité des données disponibles** pour Type d'événement.

      1. Sélectionnez **FAILED** pour Statuts spécifiques. Vous voyez alors un modèle d'événement similaire à celui présenté ci-dessous :

         ```
         {
           "source": ["aws.glue-dataquality"],
           "detail-type": ["Data Quality Evaluation Results Available"],
           "detail": {
             "state": ["FAILED"]
           }
         }
         ```

      1. Pour plus d'options de configuration, consultez [Options de configuration supplémentaires pour le modèle d'événement](#data-quality-alerts-eventbridge-config-options).

1. Sous **Cibles sélectionnées** :

   1. Pour **Types de cibles**, sélectionnez **Service AWS **.

   1. **Utilisez le menu déroulant **Sélectionnez une cible** pour choisir le AWS service auquel vous souhaitez vous connecter (SNS, Lambda, SQS, etc.), puis choisissez Next.**

1. Sous **Configurer les balises**, cliquez sur **Ajouter de nouvelles balises** pour ajouter des balises facultatives, puis choisissez **Suivant**.

1. Une page récapitulative de toutes les sélections s'affiche. Choisissez **Créer une règle** en bas de la page.

### Options de configuration supplémentaires pour le modèle d'événement
<a name="data-quality-alerts-eventbridge-config-options"></a>

En plus de filtrer de votre événement en fonction de sa réussite ou de son échec, vous pouvez également filtrer les événements en fonction de différents paramètres.

Pour ce faire, accédez à la section Modèle d'événement et sélectionnez **Modifier le modèle** pour spécifier des paramètres supplémentaires. Notez que les champs du modèle d'événements sont sensibles à la casse. Voici des exemples de configuration de modèle d'événement.

Pour capturer les événements d'une table particulière évaluant des ensembles de règles spécifiques, utilisez ce type de modèle :

```
{
  "source": ["aws.glue-dataquality"],
  "detail-type": ["Data Quality Evaluation Results Available"],
  "detail": {
    "context": {
      "contextType": ["GLUE_DATA_CATALOG"],
      "databaseName": "db-123",
       "tableName": "table-123",
    },
    "rulesetNames": ["ruleset1", "ruleset2"]
    "state": ["FAILED"]
  }
}
```

Pour capturer des événements à partir de tâches spécifiques dans l'expérience ETL, utilisez ce type de modèle :

```
{
  "source": ["aws.glue-dataquality"],
  "detail-type": ["Data Quality Evaluation Results Available"],
  "detail": {
    "context": {
      "contextType": ["GLUE_JOB"],
      "jobName": ["dq_evaluation_job1", "dq_evaluation_job2"]
    },
    "state": ["FAILED"]
  }
}
```

Pour capturer les événements dont le score est inférieur à un seuil spécifique (par exemple 70 %) :

```
{
  "source": ["aws.glue-dataquality"],
  "detail-type": ["Data Quality Evaluation Results Available"],
  "detail": {
    "score": [{
      "numeric": ["<=", 0.7]
    }]
  }
}
```

### Formatage des notifications sous forme d'e-mails
<a name="data-quality-alerts-eventbridge-format-notifications"></a>

Vous devez parfois envoyer une notification par e-mail correctement formatée à vos équipes métier. Vous pouvez utiliser Amazon EventBridge et AWS Lambda pour y parvenir.

![\[Notification de la qualité des données sous forme d'e-mail\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data_quality_sample_email.png)


L'exemple de code suivant peut être utilisé pour formater vos notifications de qualité des données afin de générer des e-mails.

```
import boto3
import json
from datetime import datetime

sns_client = boto3.client('sns')
glue_client = boto3.client('glue')

sns_topic_arn = 'arn:aws:sns:<region-code>:<account-id>:<sns-topic-name>'



def lambda_handler(event, context):
    log_metadata = {}
    message_text = ""
    subject_text = ""

    if event['detail']['context']['contextType'] == 'GLUE_DATA_CATALOG':
        log_metadata['ruleset_name'] = str(event['detail']['rulesetNames'][0])
        log_metadata['tableName'] = str(event['detail']['context']['tableName'])
        log_metadata['databaseName'] = str(event['detail']['context']['databaseName'])
        log_metadata['runId'] = str(event['detail']['context']['runId'])
        log_metadata['resultId'] = str(event['detail']['resultId'])
        log_metadata['state'] = str(event['detail']['state'])
        log_metadata['score'] = str(event['detail']['score'])
        log_metadata['numRulesSucceeded'] = str(event['detail']['numRulesSucceeded'])
        log_metadata['numRulesFailed'] = str(event['detail']['numRulesFailed'])
        log_metadata['numRulesSkipped'] = str(event['detail']['numRulesSkipped'])

        message_text += "Glue Data Quality run details:\n"
        message_text += "ruleset_name: {}\n".format(log_metadata['ruleset_name'])
        message_text += "glue_table_name: {}\n".format(log_metadata['tableName'])
        message_text += "glue_database_name: {}\n".format(log_metadata['databaseName'])
        message_text += "run_id: {}\n".format(log_metadata['runId'])
        message_text += "result_id: {}\n".format(log_metadata['resultId'])
        message_text += "state: {}\n".format(log_metadata['state'])
        message_text += "score: {}\n".format(log_metadata['score'])
        message_text += "numRulesSucceeded: {}\n".format(log_metadata['numRulesSucceeded'])
        message_text += "numRulesFailed: {}\n".format(log_metadata['numRulesFailed'])
        message_text += "numRulesSkipped: {}\n".format(log_metadata['numRulesSkipped'])

        subject_text = "Glue Data Quality ruleset {} run details".format(log_metadata['ruleset_name'])

    else:
        log_metadata['ruleset_name'] = str(event['detail']['rulesetNames'][0])
        log_metadata['jobName'] = str(event['detail']['context']['jobName'])
        log_metadata['jobId'] = str(event['detail']['context']['jobId'])
        log_metadata['resultId'] = str(event['detail']['resultId'])
        log_metadata['state'] = str(event['detail']['state'])
        log_metadata['score'] = str(event['detail']['score'])

        log_metadata['numRulesSucceeded'] = str(event['detail']['numRulesSucceeded'])
        log_metadata['numRulesFailed'] = str(event['detail']['numRulesFailed'])
        log_metadata['numRulesSkipped'] = str(event['detail']['numRulesSkipped'])

        message_text += "Glue Data Quality run details:\n"
        message_text += "ruleset_name: {}\n".format(log_metadata['ruleset_name'])
        message_text += "glue_job_name: {}\n".format(log_metadata['jobName'])
        message_text += "job_id: {}\n".format(log_metadata['jobId'])
        message_text += "result_id: {}\n".format(log_metadata['resultId'])
        message_text += "state: {}\n".format(log_metadata['state'])
        message_text += "score: {}\n".format(log_metadata['score'])
        message_text += "numRulesSucceeded: {}\n".format(log_metadata['numRulesSucceeded'])
        message_text += "numRulesFailed: {}\n".format(log_metadata['numRulesFailed'])
        message_text += "numRulesSkipped: {}\n".format(log_metadata['numRulesSkipped'])

        subject_text = "Glue Data Quality ruleset {} run details".format(log_metadata['ruleset_name'])

    resultID = str(event['detail']['resultId'])
    response = glue_client.get_data_quality_result(ResultId=resultID)
    RuleResults = response['RuleResults']
    message_text += "\n\nruleset details evaluation steps results:\n\n"
    subresult_info = []

    for dic in RuleResults:
        subresult = "Name: {}\t\tResult: {}\t\tDescription: \t{}".format(dic['Name'], dic['Result'], dic['Description'])
        if 'EvaluationMessage' in dic:
            subresult += "\t\tEvaluationMessage: {}".format(dic['EvaluationMessage'])
        subresult_info.append({
            'Name': dic['Name'],
            'Result': dic['Result'],
            'Description': dic['Description'],
            'EvaluationMessage': dic.get('EvaluationMessage', '')
        })
        message_text += "\n" + subresult

    log_metadata['resultrun'] = subresult_info



    sns_client.publish(
        TopicArn=sns_topic_arn,
        Message=message_text,
        Subject=subject_text
    )

    return {
        'statusCode': 200,
        'body': json.dumps('Message published to SNS topic')
    }
```

## Configurer des alertes et des notifications lors de l' CloudWatch intégration
<a name="data-quality-alerts-cloudwatch"></a>

Notre approche recommandée consiste à configurer des alertes relatives à la qualité des données à l'aide d'Amazon EventBridge, car Amazon EventBridge nécessite une configuration unique pour alerter les clients. Cependant, certains clients préfèrent Amazon pour des CloudWatch raisons de familiarité. Pour ces clients, nous proposons une intégration avec Amazon CloudWatch.

Chaque évaluation de la qualité des données de AWS Glue émet une paire de métriques nommées `glue.data.quality.rules.passed` (indiquant le nombre de règles passées) et `glue.data.quality.rules.failed` (indiquant le nombre de règles ayant échoué) par cycle de qualité des données. Vous pouvez utiliser cette métrique émise pour créer des alarmes afin d'avertir les utilisateurs lorsqu'une exécution d'évaluation de la qualité des données se situe en dessous du seuil. Pour commencer à configurer une alarme qui enverrait un e-mail via une notification Amazon SNS, suivez les étapes ci-dessous :

Pour commencer à configurer une alarme qui enverrait un e-mail via une notification Amazon SNS, suivez les étapes ci-dessous :

1. Ouvrez la CloudWatch console Amazon.

1. Choisissez **Toutes les métriques** sous **Métriques**. Vous verrez un espace de noms supplémentaire sous Espaces de noms personnalisés nommé qualité des données Glue.
**Note**  
Lorsque vous lancez une AWS analyse de Glue Data Quality, assurez-vous que la CloudWatch case **Publish metrics to Amazon** est cochée. Dans le cas contraire, les statistiques relatives à cette course en particulier ne seront pas publiées sur Amazon CloudWatch.

   Sous l'espace de noms `Glue Data Quality`, vous pouvez voir les métriques émises par table, par ensemble de règles. Dans le cadre de cette rubrique, nous utiliserons la règle `glue.data.quality.rules.failed` et l'alarme si cette valeur est supérieure à 1 (ce qui signifie que si le nombre d'échecs d'évaluation de la règle est supérieur à 1, nous voulons en être informés).

1. Pour créer l'alarme, sélectionnez **Toutes les alarmes** sous **Alarmes**.

1. Choisissez **Create alarm (Créer une alerte)**.

1. Choisissez **Sélectionner une métrique**.

1. Sélectionnez la métrique `glue.data.quality.rules.failed` correspondant à la table que vous avez créée, puis choisissez **Sélectionner une métrique**.

1. Sous l'onglet **Spécifier les métriques et les conditions**, dans la section **Métriques** :

   1. Pour **Statistics** (Statistique), choisissez **Sum** (Somme).

   1. Pour **Période**, choisissez **1 minute**.

1. Sous la section **Conditions** :

   1. Pour **Threshold type** (Type de seuil), choisissez **Static** (Statique).

   1. Pour **Chaque fois que l'échec des règles de qualité des données est…**, sélectionnez **Supérieur ou égal**.

   1. Pour **à…**, saisissez **1** comme valeur de seuil.

   Ces options impliquent que si la métrique `glue.data.quality.rules.failed` émet une valeur supérieure ou égale à 1, nous déclencherons une alarme. Toutefois, s'il n'y a pas de données, nous les traiterons comme acceptables.

1. Choisissez **Suivant**.

1. Sous **Configurer les actions** :

   1. Pour la section **Déclencheur d'état d'alarme**, choisissez **En alarme**.

   1. Pour la section **Envoyer une notification à la rubrique SNS suivante**, choisissez **Créer une rubrique pour envoyer une notification via une nouvelle rubrique SNS**.

   1. Pour **Points de terminaison de l'e-mail qui recevra la notification**, saisissez votre adresse e-mail. Cliquez ensuite sur **Créer une rubrique**.

   1. Choisissez **Suivant**.

1. Pour **Nom de l'alarme**, saisissez `myFirstDQAlarm` et choisissez **Suivant**.

1. Une page récapitulative de toutes les sélections s'affiche. Choisissez **Créer une alarme** en bas de la page.

Vous pouvez désormais voir l'alarme en cours de création depuis le tableau de bord des CloudWatch alarmes Amazon.

## Interrogation des résultats de la qualité des données pour créer des tableaux de bord
<a name="data-quality-alerts-querying-results"></a>

Vous souhaiterez peut-être créer un tableau de bord pour afficher vos résultats de qualité de données. Il existe deux façons de procéder :

**Configurez Amazon EventBridge avec le code suivant pour écrire les données dans Amazon S3 :**

```
import boto3
import json
from datetime import datetime


s3_client = boto3.client('s3')
glue_client = boto3.client('glue')


s3_bucket = 's3-bucket-name'

def write_logs(log_metadata):
    try:
        filename = datetime.now().strftime("%m%d%Y%H%M%S") + ".json"
        key_opts = {
            'year': datetime.now().year,
            'month': "{:02d}".format(datetime.now().month),
            'day': "{:02d}".format(datetime.now().day),
            'filename': filename
        }
        s3key = "gluedataqualitylogs/year={year}/month={month}/day={day}/{filename}".format(**key_opts)
        s3_client.put_object(Bucket=s3_bucket, Key=s3key, Body=json.dumps(log_metadata))
    except Exception as e:
        print(f'Error writing logs to S3: {e}')


def lambda_handler(event, context):
    log_metadata = {}
    message_text = ""
    subject_text = ""

    if event['detail']['context']['contextType'] == 'GLUE_DATA_CATALOG':
        log_metadata['ruleset_name'] = str(event['detail']['rulesetNames'][0])
        log_metadata['tableName'] = str(event['detail']['context']['tableName'])
        log_metadata['databaseName'] = str(event['detail']['context']['databaseName'])
        log_metadata['runId'] = str(event['detail']['context']['runId'])
        log_metadata['resultId'] = str(event['detail']['resultId'])
        log_metadata['state'] = str(event['detail']['state'])
        log_metadata['score'] = str(event['detail']['score'])
        log_metadata['numRulesSucceeded'] = str(event['detail']['numRulesSucceeded'])
        log_metadata['numRulesFailed'] = str(event['detail']['numRulesFailed'])
        log_metadata['numRulesSkipped'] = str(event['detail']['numRulesSkipped'])

        message_text += "Glue Data Quality run details:\n"
        message_text += "ruleset_name: {}\n".format(log_metadata['ruleset_name'])
        message_text += "glue_table_name: {}\n".format(log_metadata['tableName'])
        message_text += "glue_database_name: {}\n".format(log_metadata['databaseName'])
        message_text += "run_id: {}\n".format(log_metadata['runId'])
        message_text += "result_id: {}\n".format(log_metadata['resultId'])
        message_text += "state: {}\n".format(log_metadata['state'])
        message_text += "score: {}\n".format(log_metadata['score'])
        message_text += "numRulesSucceeded: {}\n".format(log_metadata['numRulesSucceeded'])
        message_text += "numRulesFailed: {}\n".format(log_metadata['numRulesFailed'])
        message_text += "numRulesSkipped: {}\n".format(log_metadata['numRulesSkipped'])

        subject_text = "Glue Data Quality ruleset {} run details".format(log_metadata['ruleset_name'])

    else:
        log_metadata['ruleset_name'] = str(event['detail']['rulesetNames'][0])
        log_metadata['jobName'] = str(event['detail']['context']['jobName'])
        log_metadata['jobId'] = str(event['detail']['context']['jobId'])
        log_metadata['resultId'] = str(event['detail']['resultId'])
        log_metadata['state'] = str(event['detail']['state'])
        log_metadata['score'] = str(event['detail']['score'])

        log_metadata['numRulesSucceeded'] = str(event['detail']['numRulesSucceeded'])
        log_metadata['numRulesFailed'] = str(event['detail']['numRulesFailed'])
        log_metadata['numRulesSkipped'] = str(event['detail']['numRulesSkipped'])

        message_text += "Glue Data Quality run details:\n"
        message_text += "ruleset_name: {}\n".format(log_metadata['ruleset_name'])
        message_text += "glue_job_name: {}\n".format(log_metadata['jobName'])
        message_text += "job_id: {}\n".format(log_metadata['jobId'])
        message_text += "result_id: {}\n".format(log_metadata['resultId'])
        message_text += "state: {}\n".format(log_metadata['state'])
        message_text += "score: {}\n".format(log_metadata['score'])
        message_text += "numRulesSucceeded: {}\n".format(log_metadata['numRulesSucceeded'])
        message_text += "numRulesFailed: {}\n".format(log_metadata['numRulesFailed'])
        message_text += "numRulesSkipped: {}\n".format(log_metadata['numRulesSkipped'])

        subject_text = "Glue Data Quality ruleset {} run details".format(log_metadata['ruleset_name'])

    resultID = str(event['detail']['resultId'])
    response = glue_client.get_data_quality_result(ResultId=resultID)
    RuleResults = response['RuleResults']
    message_text += "\n\nruleset details evaluation steps results:\n\n"
    subresult_info = []

    for dic in RuleResults:
        subresult = "Name: {}\t\tResult: {}\t\tDescription: \t{}".format(dic['Name'], dic['Result'], dic['Description'])
        if 'EvaluationMessage' in dic:
            subresult += "\t\tEvaluationMessage: {}".format(dic['EvaluationMessage'])
        subresult_info.append({
            'Name': dic['Name'],
            'Result': dic['Result'],
            'Description': dic['Description'],
            'EvaluationMessage': dic.get('EvaluationMessage', '')
        })
        message_text += "\n" + subresult

    log_metadata['resultrun'] = subresult_info

    write_logs(log_metadata)


    return {
        'statusCode': 200,
        'body': json.dumps('Message published to SNS topic')
    }
```

Après avoir écrit à Amazon S3, vous pouvez utiliser les robots d'exploration AWS Glue pour vous enregistrer auprès d'Athena et interroger les tables.

**Configurez un emplacement Amazon S3 lors d'une évaluation de la qualité des données :**

Lorsque vous exécutez des tâches de qualité des données dans le AWS Glue Data Catalog ou AWS Glue ETL, vous pouvez fournir un emplacement Amazon S3 pour écrire les résultats de qualité des données sur Amazon S3. Vous pouvez utiliser la syntaxe ci-dessous pour créer une table en référençant la cible afin de lire les résultats de qualité des données.

Notez que vous devez exécuter les requêtes `CREATE EXTERNAL TABLE` et `MSCK REPAIR TABLE` séparément.

```
CREATE EXTERNAL TABLE <my_table_name>(
    catalogid string,
    databasename string,
    tablename string,
    dqrunid string,
    evaluationstartedon timestamp,
    evaluationcompletedon timestamp,
    rule string,
    outcome string,
    failurereason string,
    evaluatedmetrics string) 
PARTITIONED BY (
    `year` string,
    `month` string,
    `day` string)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
    'paths'='catalogId,databaseName,dqRunId,evaluatedMetrics,evaluationCompletedOn,evaluationStartedOn,failureReason,outcome,rule,tableName')
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://glue-s3-dq-bucket-us-east-2-results/'
TBLPROPERTIES (
    'classification'='json',
    'compressionType'='none',
    'typeOfData'='file');
```

```
MSCK REPAIR TABLE <my_table_name>;
```

Une fois la table ci-dessus créée, vous pouvez exécuter des requêtes analytiques à l'aide d'Amazon Athena.

## Déploiement de règles de qualité des données en utilisant AWS CloudFormation
<a name="data-quality-deploy-cfn"></a>

Vous pouvez l'utiliser AWS CloudFormation pour créer des règles de qualité des données. Pour plus d'informations, consultez [AWS CloudFormation AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-with-cloudformation-templates.html). 

## Planification de règles de qualité des données
<a name="data-quality-scheduling-rules"></a>

Vous pouvez planifier des règles de qualité des données à l'aide des méthodes suivantes :
+  Planifiez les règles de qualité des données à partir du catalogue de données : aucun code Les utilisateurs ne peuvent utiliser cette option pour planifier facilement leurs analyses de qualité des données. AWS Glue Data Quality créera le calendrier sur Amazon EventBridge. Pour planifier des règles de qualité des données : 
  +  Accédez à l'ensemble de règles et cliquez sur **Exécuter**. 
  +  Dans la section **Fréquence d'exécution**, sélectionnez le calendrier souhaité et indiquez un **nom de tâche**. Ce nom de tâche est le nom de votre calendrier dans EventBridge. 
+ Utilisez Amazon EventBridge et AWS Step Functions pour orchestrer les évaluations et les recommandations relatives aux règles de qualité des données.

# Le chiffrement des données est arrêté pour AWS Glue Data Quality
<a name="data-quality-encryption"></a>

 AWS Glue Data Qualityfournit un chiffrement par défaut pour protéger les données sensibles des clients au repos à l'aide de clés de chiffrement AWS détenues par nos soins. 

## AWS clés possédées
<a name="w2aac49c74b9"></a>

 AWS Glue Data Quality utilise ces clés pour chiffrer automatiquement les actifs de qualité des données des clients. Vous ne pouvez pas consulter, gérer ou utiliser les clés AWS détenues, ni auditer leur utilisation. Toutefois, vous n’avez pas besoin de prendre de mesure ou de modifier les programmes pour protéger les clés qui chiffrent vos données. Pour plus d'informations, consultez la section sur [les clés AWS détenues](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk) dans le Guide du AWS KMS développeur. 

 Le chiffrement des données au repos par défaut permet de réduire les frais opérationnels et la complexité liés à la protection des données sensibles. Dans le même temps, il vous permet de créer des applications sécurisées qui répondent aux exigences réglementaires et de conformité strictes en matière de chiffrement. 

 Bien que vous ne puissiez pas désactiver cette couche de chiffrement ou sélectionner un autre type de chiffrement, vous pouvez ajouter une deuxième couche de chiffrement aux clés de chiffrement AWS détenues existantes en choisissant une clé gérée par le client lorsque vous créez vos ressources de qualité des données. 

## Clés gérées par le client
<a name="data-quality-encryption-customer-managed-keys"></a>

 **Clés gérées par le client** : AWS Glue Data Quality prend en charge l'utilisation d'une clé symétrique gérée par le client que vous créez, détenez et gérez. Cela ajoute une deuxième couche de chiffrement par rapport au chiffrement AWS propre existant. Étant donné que vous avez le contrôle total de cette couche de chiffrement, vous pouvez effectuer les tâches suivantes : 
+  Établissement et gestion des stratégies de clé 
+  Établissement et gestion des politiques IAM 
+  Activation et désactivation des stratégies de clé 
+  Rotation des matériaux de chiffrement de clé 
+  Ajout de balises 
+  Création d’alias de clé 
+  Planification des clés pour la suppression 

 Pour plus d'informations, consultez la section [Clés gérées par le client](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) dans le Guide du AWS KMS développeur. 

 Le tableau suivant résume la manière dont AWS Glue Data Quality chiffre les différents actifs de Data Quality. 


| Type de données | AWS chiffrement par clé détenue | Chiffrement par clé gérée par le client | 
| --- | --- | --- | 
|   **Ensemble de règles de qualité des données**   Chaîne d’ensemble de règles DQDL référencée par l’ensemble de règles DQ persistant. Pour le moment, ces ensembles de règles persistants ne sont utilisés que dans l’expérience catalogue de données AWS Glue.   | Activé | Activé | 
|   ** Rule/Analyzer Résultats relatifs à la qualité des données**   Artefacts de résultat qui contiennent le pass/fail statut de chaque règle d'un ensemble de règles ainsi que les métriques collectées par les règles et les analyseurs.   | Activé | Activé | 
|   **Observations**   Des observations sont générées lorsqu’une anomalie est détectée dans les données. Elles contiennent des informations sur les limites supérieure et inférieure attendues et une règle suggérée basée sur ces limites. Si elles sont générées, elles sont affichées avec les résultats de qualité des données.   | Activé | Activé | 
|   **Statistiques**   Contient des informations sur les métriques collectées après avoir évalué les données selon un ensemble de règles, telles que la valeur de la métrique (par exemple RowCount, Exhaustivité), les noms des colonnes et d'autres métadonnées.   | Activé | Activé | 
|   **Modèles statistiques de détection des anomalies**   Les modèles statistiques contiennent les séries temporelles des limites supérieure et inférieure pour une métrique donnée, générées sur la base d’évaluations précédentes des données client.   | Activé | Activé | 

**Note**  
 AWS Data Quality active automatiquement le chiffrement au repos à l'aide de clés AWS détenues pour protéger gratuitement les données personnelles identifiables. Toutefois, AWS KMS des frais s'appliquent pour l'utilisation d'une clé gérée par le client. Pour plus d’informations sur la tarification, consultez [Tarification d’AWS KMS](https://aws.amazon.com/kms/pricing/).   
 Pour plus d'informations sur AWS KMS, voir [AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html). 

## Création d’une clé gérée par le client
<a name="data-quality-encryption-customer-managed-key"></a>

 Vous pouvez créer une clé symétrique gérée par le client en utilisant le AWS Management Console, ou le AWS KMS APIs. 

**Pour créer une clé symétrique gérée par le client :**
+  Suivez les étapes de [création de AWS KMS clés de chiffrement symétriques décrites](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk) dans le manuel du AWS Key Management Service développeur. 

### Stratégie de clé
<a name="data-quality-encryption-customer-managed-key-policy"></a>

 Les stratégies de clé contrôlent l’accès à votre clé gérée par le client. Chaque clé gérée par le client doit avoir exactement une stratégie de clé, qui contient des instructions qui déterminent les personnes pouvant utiliser la clé et comment elles peuvent l’utiliser. Lorsque vous créez votre clé gérée par le client, vous pouvez spécifier une stratégie de clé. Pour plus d'informations, consultez la section [Politiques relatives aux AWS KMS clés](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) dans le Guide du AWS Key Management Service développeur. 

 Pour utiliser votre clé gérée par le client avec les ressources de qualité des données, les opérations d’API suivantes doivent être autorisées dans la stratégie de clé : 
+  [https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)— Déchiffre le texte chiffré par une clé en utilisant AWS KMS `GenerateDataKeyWithoutPlaintext` 
+  [https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) : fournit les détails des clés gérées par le client pour permettre à Amazon Location de valider la clé. 
+  [https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)— Renvoie une clé de données symétrique unique à utiliser en dehors de AWS KMS. Cette opération renvoie une clé de données chiffrée sous une clé KMS de chiffrement symétrique que vous spécifiez. Les octets de la clé sont aléatoires. Ils ne sont pas liés à l’appelant ni à la clé KMS. Sert à réduire le nombre d’appels KMS que le client doit passer. 
+  [https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) : déchiffre le texte chiffré, puis le rechiffre entièrement au sein d’ AWS KMS. Vous pouvez utiliser cette opération pour modifier la clé KMS sous laquelle les données sont chiffrées, par exemple lorsque vous [faites pivoter manuellement](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#rotate-keys-manually) une clé KMS ou que vous modifiez la clé KMS qui protège un texte chiffré. Vous pouvez également l’utiliser pour rechiffrer du texte chiffré sous la même clé KMS, par exemple pour modifier le [contexte de chiffrement](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) d’un texte chiffré. 

 Voici des exemples de déclarations de stratégie que vous pouvez ajouter pour Amazon Location : 

```
"Statement" : [ 
    {
        "Sid" : "Allow access to principals authorized to use AWS Glue Data Quality",
        "Effect" : "Allow",
        "Principal" : {
            "AWS": "arn:aws:iam::<account_id>:role/ExampleRole"
        },
        "Action" : [ 
            "kms:Decrypt", 
            "kms:DescribeKey",
            "kms:GenerateDataKeyWithoutPlaintext",
            "kms:ReEncrypt*"
        ],
        "Resource" : "*",
        "Condition" : {
            "StringEquals" : {
                "kms:ViaService" : "glue.amazonaws.com",
                "kms:CallerAccount" : "111122223333"
            }
        },
    {
        "Sid": "Allow access for key administrators",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::111122223333:root"
          },
        "Action" : [ 
            "kms:*"
         ],
        "Resource": "arn:aws:kms:region:111122223333:key/key_ID"
    },
    {
        "Sid" : "Allow read-only access to key metadata to the account",
        "Effect" : "Allow",
        "Principal" : {
            "AWS" : "arn:aws:iam::111122223333:root"
        },
        "Action" : [ 
            "kms:Describe*",
            "kms:Get*",
            "kms:List*",
        ],
        "Resource" : "*"
    }
]
```

### Remarques concernant l'utilisation des clés KMS dans AWS Glue Data Quality
<a name="data-quality-encryption-kms-keys-notes"></a>

 AWS Glue Data Quality ne prend pas en charge les transitions clés. Cela signifie que si vous chiffrez vos actifs de qualité des données avec la clé A et que vous décidez de passer à la clé B, nous ne chiffrerons pas à nouveau les données chiffrées avec la clé A pour utiliser la clé B. Vous pouvez toujours passer à la clé B, mais vous devrez conserver l’accès à la clé A pour accéder aux données précédemment chiffrées avec la clé A. 

 Pour plus d'informations sur la spécification des autorisations dans une politique, consultez la section [Autorisations pour les AWS services dans les politiques clés](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-services.html) du Guide du AWS Key Management Service développeur. 

 Pour plus d'informations sur la résolution des problèmes d'accès par clé, consultez la section [Résolution des problèmes d'accès par clé](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html) dans le Guide du AWS Key Management Service développeur. 

## Création d'une configuration de sécurité
<a name="data-quality-encryption-create-security-configuration"></a>

 Dans AWS Glue, la [ressource Security Configurations](encryption-security-configuration.md) contient les propriétés nécessaires pour écrire des données chiffrées. 

**Pour chiffrer les actifs liés à la qualité de vos données :**

1.  Dans **Paramètres de chiffrement**, sous **Paramètres avancés**, choisissez **Activer le chiffrement de la qualité des données**. 

1.  Sélectionnez votre clé KMS ou choisissez **Créer une AWS KMS clé** 

![\[La capture d'écran montre la page Ajouter une configuration de sécurité. L'option Activer DataQuality le chiffrement est sélectionnée.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/data-quality-add-security-configuration.png)


## AWS Contexte de chiffrement de Glue Data Quality
<a name="data-quality-encryption-context"></a>

 Un [contexte de chiffrement](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) est un ensemble facultatif de paires clé-valeur qui contient des informations contextuelles supplémentaires sur les données. 

 AWS KMS utilise le contexte de chiffrement comme [données authentifiées supplémentaires](https://docs.aws.amazon.com/crypto/latest/userguide/cryptography-concepts.html#term-aad) pour prendre en charge le chiffrement [authentifié.](https://docs.aws.amazon.com/crypto/latest/userguide/cryptography-concepts.html#term-aad) Lorsque vous incluez un contexte de chiffrement dans une demande de chiffrement de données, AWS KMS lie le contexte de chiffrement aux données chiffrées. Pour déchiffrer les données, vous devez inclure le même contexte de chiffrement dans la demande. 

### AWS Exemple de contexte de chiffrement de Glue Data Quality
<a name="data-quality-encryption-context-example"></a>

```
"encryptionContext": {
    "kms-arn": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
    "branch-key-id": "111122223333+arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
    "hierarchy-version": "1",
    "aws-crypto-ec:aws:glue:securityConfiguration": "111122223333:customer-security-configuration-name",
    "create-time": "2024-06-07T13:47:23:000861Z",
    "tablename": "AwsGlueMlEncryptionKeyStore",
    "type": "beacon:ACTIVE"
}
```

### Utilisation du contexte de chiffrement à des fins de surveillance
<a name="data-quality-encryption-context-monitoring"></a>

 Lorsque vous utilisez une clé symétrique gérée par le client pour chiffrer les données de votre suivi ou de votre collection de périmètres virtuels, vous pouvez également utiliser le contexte de chiffrement dans les enregistrements et les journaux d’audit pour identifier la manière dont la clé gérée par le client est utilisée. Le contexte de chiffrement apparaît également dans les journaux générés par AWS CloudTrail ou Amazon CloudWatch Logs. 

## Surveillance de vos clés de chiffrement pour AWS Glue Data Quality
<a name="data-quality-monitoring-encryption-keys"></a>

 Lorsque vous utilisez une clé gérée par le AWS KMS client avec vos ressources AWS Glue Data Quality, vous pouvez utiliser AWS CloudTrail ou Amazon CloudWatch Logs suivre les demandes auxquelles AWS Glue Data Quality envoie AWS KMS. 

 Les exemples suivants sont des AWS CloudTrail événements pour `GenerateDataKeyWithoutPlainText` et `Decrypt` pour surveiller les opérations KMS appelées par AWS Glue Data Quality afin d'accéder aux données chiffrées par votre clé gérée par le client. 

 **Decrypt** 

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "arn": "arn:aws:sts::111122223333:role/CustomerRole",
        "accountId": "111122223333",
        "invokedBy": "glue.amazonaws.com"
    },
    "eventTime": "2024-07-02T20:03:10Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "glue.amazonaws.com",
    "userAgent": "glue.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "encryptionContext": {
            "kms-arn": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
            "branch-key-id": "111122223333+arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
            "hierarchy-version": "1",
            "aws-crypto-ec:aws:glue:securityConfiguration": "111122223333:customer-security-configuration-name",
            "create-time": "2024-06-07T13:47:23:000861Z",
            "tablename": "AwsGlueMlEncryptionKeyStore",
            "type": "branch:ACTIVE",
            "version": "branch:version:ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE"
        }
    },
    "responseElements": null,
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

 **GenerateDataKeyWithoutPlaintext** 

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "arn": "arn:aws:sts::111122223333:role/CustomerRole",
        "accountId": "111122223333",
        "invokedBy": "glue.amazonaws.com"
    },
    "eventTime": "2024-07-02T20:03:10Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKeyWithoutPlaintext",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "glue.amazonaws.com",
    "userAgent": "glue.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "encryptionContext": {
            "kms-arn": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
            "branch-key-id": "111122223333+arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
            "hierarchy-version": "1",
            "aws-crypto-ec:aws:glue:securityConfiguration": "111122223333:customer-security-configuration-name",
            "create-time": "2024-06-07T13:47:23:000861Z",
            "tablename": "AwsGlueMlEncryptionKeyStore",
            "type": "branch:version:ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE"
        }
    },
    "responseElements": null,
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

 **ReEncyrpt** 

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "arn": "arn:aws:sts::111122223333:role/CustomerRole",
        "accountId": "111122223333",
        "invokedBy": "glue.amazonaws.com"
    },
    "eventTime": "2024-07-17T21:34:41Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "ReEncrypt",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "glue.amazonaws.com",
    "userAgent": "glue.amazonaws.com",
    "requestParameters": {
        "destinationEncryptionContext": {
             "kms-arn": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
            "branch-key-id": "111122223333+arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
            "hierarchy-version": "1",
            "aws-crypto-ec:aws:glue:securityConfiguration": "111122223333:customer-security-configuration-name",
            "create-time": "2024-06-07T13:47:23:000861Z",
            "tablename": "AwsGlueMlEncryptionKeyStore",
            "type": "branch:ACTIVE"
            "version": "branch:version:12345678-SAMPLE"
        },
        "destinationKeyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
        "sourceAAD": "1234567890-SAMPLE+Z+lqoYOHj7VtWxJLrvh+biUFbliYDAQkobM=",
        "sourceKeyId": "arn:aws:kms:ap-southeast-2:585824196334:key/17ca05ca-a8c1-40d7-b7fd-30abb569a53a",
        "destinationEncryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "sourceEncryptionContext": {
            "kms-arn": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
            "branch-key-id": "111122223333+arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
            "hierarchy-version": "1",
            "aws-crypto-ec:aws:glue:securityConfiguration": "111122223333:customer-security-configuration-name",
            "create-time": "2024-06-07T13:47:23:000861Z",
            "tablename": "AwsGlueMlEncryptionKeyStore",
            "type": "branch:version:ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE"
        },
        "destinationAAD": "1234567890-SAMPLE",
        "sourceEncryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "responseElements": null,
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        },
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

## En savoir plus
<a name="data-quality-encryption-learn-more"></a>

 Les ressources suivantes fournissent plus d'informations sur le chiffrement des données au repos. 
+  Pour plus d'informations sur les [concepts AWS Key Management Service de base](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html), consultez le guide du AWS Key Management Service développeur. 
+  Pour plus d'informations sur les [meilleures pratiques en matière de sécurité](https://docs.aws.amazon.com/kms/latest/developerguide/best-practices.html), AWS Key Management Service consultez le guide du AWS Key Management Service développeur. 

# Résolution des erreurs liées à la qualité des données de AWS Glue
<a name="data-quality-trouble"></a>

Si vous rencontrez des erreurs dans AWS Glue Data Quality, utilisez les solutions suivantes pour trouver la source des problèmes et les résoudre.

**Contents**
+ [Erreur : module AWS Glue Data Quality manquant](#data-quality-trouble-error-1)
+ [Erreur : autorisations insuffisantes pour AWS Lake Formation](#data-quality-trouble-error-2)
+ [Erreur : les ensembles de règles ne sont pas nommés de manière unique](#data-quality-trouble-error-3)
+ [Erreur : tables contenant des caractères spéciaux](#data-quality-trouble-error-4)
+ [Erreur : erreur de débordement avec un ensemble de règles volumineux](#data-quality-trouble-error-5)
+ [Erreur : échec du statut général de la règle](#data-quality-trouble-error-6)
+ [AnalysisException: Impossible de vérifier l'existence de la base de données par défaut](#data-quality-trouble-error-7)
+ [Message d'erreur : la clé de distribution fournie ne convient pas aux cadres de données fournies.](#data-quality-trouble-error-8)
+ [Exception dans la classe utilisateur : java.lang. RuntimeException : Impossible de récupérer les données. Vérifiez les connexions CloudWatch pour obtenir plus de détails](#data-quality-trouble-error-9)
+ [ERREUR DE LANCEMENT : erreur lors du téléchargement depuis S3 pour le compartiment](#data-quality-trouble-error-10)
+ [InvalidInputException (statut : 400) : DataQuality les règles ne peuvent pas être analysées](#data-quality-trouble-error-11)
+ [Erreur : Eventbridge ne déclenche pas les tâches Glue DQ selon le calendrier que j'ai configuré.](#data-quality-trouble-error-12)
+ [Erreurs CustomSQL](#data-quality-trouble-error-13)
+ [Règles dynamiques](#data-quality-trouble-error-14)
+ [Exception dans la classe utilisateur : org.apache.spark.sql. AnalysisException: org.apache.hadoop.hive.ql.metadata. HiveException](#data-quality-trouble-error-15)
+ [UNCLASSIFIED\$1ERROR ; IllegalArgumentException : Erreur d'analyse : aucune règle ni analyseur fournis., aucune alternative viable en entrée](#data-quality-trouble-error-16)

## Erreur : module AWS Glue Data Quality manquant
<a name="data-quality-trouble-error-1"></a>

**Message d'erreur** : aucun module nommé « awsgluedq ».

**Résolution** : Cette erreur se produit lorsque vous exécutez AWS Glue Data Quality dans une version non prise en charge. AWS Glue Data Quality n'est prise en charge que dans les versions 3.0 et ultérieures de Glue.

## Erreur : autorisations insuffisantes pour AWS Lake Formation
<a name="data-quality-trouble-error-2"></a>

**Message d'erreur** : exception dans la classe utilisateur `com.amazonaws.services.glue.model.AccessDeniedException` : autorisations de Lake Formation insuffisantes sur impact\$1sdg\$1involvement (Service : ; Code d'état : 400 ; Code d'erreur : AWS Glue ; ID de demande : AccessDeniedException 465ae693-b7ba-4df0-a4e4-6b17xxxxxxxx ; Proxy : nul).

**Résolution** : Vous devez fournir des autorisations suffisantes dans AWS Lake Formation.

## Erreur : les ensembles de règles ne sont pas nommés de manière unique
<a name="data-quality-trouble-error-3"></a>

**Message d'erreur** : Exception dans la classe utilisateur :... services.glue.model. AlreadyExistsException: Un autre ensemble de règles portant le même nom existe déjà.

**Résolution** : les ensembles de règles sont globaux et doivent être uniques.

## Erreur : tables contenant des caractères spéciaux
<a name="data-quality-trouble-error-4"></a>

**Message d'erreur** : Exception dans la classe utilisateur : org.apache.spark.sql. AnalysisException: impossible de résoudre les colonnes d'entrée « C » données : [primary.data\$1end\$1time, primary.data\$1start\$1time, primary.end\$1time, primary.last\$1updated, primary.message, primary.process\$1date, primary.rowhash, primary.run\$1by, primary.run\$1id, primary.start\$1time, primary.status] ; ligne 1 pos 44 ;.

**Résolution** : Il existe actuellement une limite selon laquelle AWS Glue Data Quality ne peut pas être exécuté sur des tables contenant des caractères spéciaux tels que «. ».

## Erreur : erreur de débordement avec un ensemble de règles volumineux
<a name="data-quality-trouble-error-5"></a>

**Message d'erreur** : Exception dans la classe utilisateur : java.lang. StackOverflowError.

**Résolution** : si vous disposez d'un ensemble de règles de plus de 2 000 règles, vous pouvez rencontrer ce problème. Divisez vos règles en plusieurs ensembles de règles.

## Erreur : échec du statut général de la règle
<a name="data-quality-trouble-error-6"></a>

**Condition d'erreur** : mon ensemble de règles est réussi, mais le statut général de mes règles est un échec.

**Résolution** : Cette erreur s'est probablement produite parce que vous avez choisi l'option de publier les statistiques sur Amazon CloudWatch lors de la publication. Si votre ensemble de données se trouve dans un VPC, celui-ci n'autorise peut-être pas AWS Glue à publier des métriques sur Amazon. CloudWatch Dans ce cas, vous devez configurer un point de terminaison pour que votre VPC puisse accéder à Amazon. CloudWatch

## AnalysisException: Impossible de vérifier l'existence de la base de données par défaut
<a name="data-quality-trouble-error-7"></a>

 **Condition d'erreur** AnalysisException : Impossible de vérifier l'existence de la base de données par défaut : com.amazonaws.services.glue.model. AccessDeniedException: Autorisations de Lake Formation insuffisantes par défaut (Service : AWS Glue ; Code d'état : 400 ; Code d'erreur : ; ID de demande : AccessDeniedException XXXXXXXX-XXXX-XXXX-XXXX -XXXXXXXXXXXX ; Proxy : nul) 

**Résolution** : dans l'intégration du catalogue de la tâcheAWS Glue, AWS Glue essaie toujours de vérifier si la base de données par défaut existe ou non en utilisant AWS Glue `GetDatabase API`. Lorsque l'autorisation `DESCRIBE` Lake Formation n'est pas accordée ou que l'autorisation `GetDatabase IAM` est accordée, la tâche échoue lors de la vérification de l'existence de la base de données par défaut. 

 Pour résoudre le problème : 

1.  Ajoutez l'autorisation `DESCRIBE` dans Lake Formation pour la base de données par défaut. 

1.  Configurez le rôle IAM associé à la tâche AWS Glue en tant que créateur de base de données dans Lake Formation. Cela crée automatiquement une base de données par défaut et accorde les autorisations Lake Formation requises pour le rôle. 

1.  Désactivez l'option `--enable-data-catalog`. (Elle est affichée en tant que **Utiliser Data Catalog en tant que métastore Hive dans AWS Glue Studio**). 

   Si vous n'avez pas besoin de l'intégration Data Catalog de Spark SQL dans la tâche, vous pouvez la désactiver.

## Message d'erreur : la clé de distribution fournie ne convient pas aux cadres de données fournies.
<a name="data-quality-trouble-error-8"></a>

 **Condition d'erreur** : la clé de distribution fournie ne convient pas aux cadres de données fournies. 

 **Résolution** : vous utilisez le **DataSetMatch**type de règle et les clés de jointure sont dupliquées. Vos clés de jointure doivent être uniques et ne doivent pas être nulles. Dans les cas où vous ne pouvez pas avoir de clés de jointure uniques, envisagez d'utiliser d'autres types de règles, par exemple **AggregateMatch**pour établir une correspondance sur des données récapitulatives. 

## Exception dans la classe utilisateur : java.lang. RuntimeException : Impossible de récupérer les données. Vérifiez les connexions CloudWatch pour obtenir plus de détails
<a name="data-quality-trouble-error-9"></a>

 **Condition d'erreur** : exception dans la classe utilisateur : java.lang. RuntimeException : Impossible de récupérer les données. Vérifiez les connexions CloudWatch pour obtenir plus de détails. 

 **Résolution** : Cela se produit lorsque vous créez des règles DQ sur un tableau basé sur Amazon S3 qui est comparé à Amazon RDS ou. Amazon Redshift Dans ces cas, AWS Glue ne peut pas charger la connexion. Essayez plutôt de configurer une règle DQ sur le jeu de données Amazon Redshift ou Amazon RDS. Il s'agit d'un bogue connu. 

## ERREUR DE LANCEMENT : erreur lors du téléchargement depuis S3 pour le compartiment
<a name="data-quality-trouble-error-10"></a>

 **Condition d'erreur** : ERREUR DE LANCEMENT : erreur lors du téléchargement depuis S3 pour le compartiment : `aws-glue-ml-data-quality-assets-us-east-1, key: jars/aws-glue-ml-data-quality-etl.jar.Access Denied (Service: Amazon S3; Status Code: 403; Please refer logs for details) `. 

 **Résolution** : Les autorisations associées au rôle transmises à AWS Glue Data Quality doivent permettre la lecture depuis l'emplacement Amazon S3 précédent. Cette politique IAM doit être associée au rôle : 

```
{
  "Sid": "allowS3",
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::aws-glue-ml-data-quality-assets-<region>/*"
}
```

 Reportez-vous à [Data Quality authorization](https://docs.aws.amazon.com/glue/latest/dg/data-quality-authorization.html) pour obtenir la liste des autorisations détaillées. Ces bibliothèques sont nécessaires pour évaluer la qualité des données de vos jeux de données. 

## InvalidInputException (statut : 400) : DataQuality les règles ne peuvent pas être analysées
<a name="data-quality-trouble-error-11"></a>

 **Condition d'erreur** : InvalidInputException (statut : 400) : DataQuality les règles ne peuvent pas être analysées. 

 **Résolution** : il existe de nombreuses possibilités pour cette erreur. Il est possible que vos règles comportent des guillemets simples. Assurez-vous qu’ils sont entre guillemets. Par exemple : 

```
Rules = [
ColumnValues "tipo_vinculo" in ["CODO", "DOCO", "COCO", "DODO"] AND "categoria" = 'ES"
    AND "cod_bandera" = 'CEP'
```

 Remplacer par : 

```
Rules = [
(ColumnValues "tipovinculo" in [ "CODO", "DOCO", "COCO", "DODO"]) AND (ColumnValues "categoria" = "ES") 
    AND (ColumnValues "codbandera" = "CEP")
]
```

## Erreur : Eventbridge ne déclenche pas les tâches Glue DQ selon le calendrier que j'ai configuré.
<a name="data-quality-trouble-error-12"></a>

 **Condition d'erreur** : erreur : Eventbridge ne déclenche pas les tâches AWS Glue Data Quality selon le calendrier que j'ai configuré. 

 **Résolution** : le rôle déclenchant la tâche ne dispose peut-être pas des autorisations appropriées. Assurez-vous que le rôle que vous utilisez pour lancer les tâches dispose des autorisations mentionnées dans la rubrique [Configuration IAM nécessaire à la planification des évaluations](https://docs.aws.amazon.com/glue/latest/dg/data-quality-authorization.html#data-quality-iam-setup-evaluation-runs). 

## Erreurs CustomSQL
<a name="data-quality-trouble-error-13"></a>

**Condition d'erreur** : ` The output from CustomSQL must contain at least one column that matches the input dataset for AWS Glue Data Quality to provide row level results. The SQL query is a valid query but no columns from the SQL result are present in the Input Dataset. Ensure that matching columns are returned from the SQL`.

 **Résolution** : la requête SQL est valide, mais assurez-vous que vous ne sélectionnez que les colonnes de la table principale. La sélection de fonctions d'agrégation telles que somme, nombre sur les colonnes à partir de la table principale peut entraîner cette erreur. 



**Condition d'erreur** : ` There was a problem when executing your SQL statement: cannot resolve "Col"`.

 **Résolution** : cette colonne n'est pas présente dans la table principale. 



**Condition d'erreur** : ` The columns that are returned from the SQL statement should only belong to the primary table. "In this case, some columns ( Col ) belong to reference table"`. 

 **Résolution** : dans les requêtes SQL, lorsque vous attachez la table principale à d’autres tables de référence, assurez-vous que votre instruction SELECT ne contient que des noms de colonnes de votre table principale afin de générer des résultats au niveau de la ligne pour la table principale. 

## Règles dynamiques
<a name="data-quality-trouble-error-14"></a>

 **Condition d’erreur**`: Dynamic rules require job context, and cannot be evaluated in interactive session or data preview.`.

**Cause :** ce message d’erreur peut apparaître dans les résultats de l’aperçu des données, ou dans d’autres sessions interactives, lorsque votre jeu de règles contient des règles DQ dynamiques. Les règles dynamiques font référence à des métriques historiques associées à un nom de tâche et à un contexte d’évaluation particuliers, de sorte qu’elles ne peuvent pas être évaluées lors de sessions interactives. 

 **Résolution** : l’exécution de votre tâche AWS Glue produira des métriques historiques, qui pourront être référencées lors d’exécutions ultérieures de la même tâche. 

 **Condition d’erreur** : 
+  ` [RuleType] rule only supports simple atomic operands in thresholds.`. 
+  `Function last not yet implemented for [RuleType] rule.` 

 **Résolution** : les règles dynamiques sont généralement prises en charge pour tous les types de règles DQDL dans les expressions numériques (voir [Référence DQDL](dqdl.md)). Cependant, certaines règles qui produisent plusieurs métriques ColumnValues et ColumnLength ne sont pas encore prises en charge. 

**Condition d'erreur** : ` Binary expression operands must resolve to a single number.`. 

**Cause** : les règles dynamiques prennent en charge les expressions binaires, telles que `RowCount > avg(last(5)) * 0.9`. Ici, l’expression binaire est `avg(last(5)) * 0.9`. Cette règle est valide parce que les opérandes `avg(last(5))` et `0.9` se résolvent en un seul nombre. Un exemple incorrect est `RowCount > last(5) * 0.9` parce que `last(5)` produira une liste qui ne pourra pas être comparée de manière significative au nombre actuel de lignes. 

 **Résolution** : utilisez des fonctions d’agrégation pour réduire un opérande à valeurs multiples en un seul nombre. 

**Condition d’erreur** :
+  `Rule threshold results in list, and a single value is expected. Use aggregation functions to produce a single value. Valid example: sum(last(10)), avg(last(10)).` 
+  `Rule threshold results in empty list, and a single value is expected.` 

**Cause** : les règles dynamiques peuvent être utilisées pour comparer certaines fonctionnalités de votre jeu de données avec ses valeurs historiques. La fonction « last » permet de récupérer plusieurs valeurs historiques, à condition de fournir un argument entier positif. Par exemple, `last(5)` récupérera les cinq dernières valeurs observées lors des exécutions de tâches pour votre règle. 

 **Résolution** : une fonction d’agrégation doit être utilisée pour réduire ces valeurs en un seul nombre afin de réaliser une comparaison significative avec la valeur observée dans l’exécution de tâche actuelle. 

Exemples valides :
+ `RowCount >= avg(last(5))`
+ `RowCount > last(1)`
+ `RowCount < last()`

Exemple non valide : `RowCount > last(5)`.

**Condition d’erreur** :
+  `Function index used in threshold requires positive integer argument.` 
+  `Index argument must be an integer. Valid syntax example: RowCount > index(last(10, 2)), which means RowCount must be greater than third most recent execution from last 10 job runs.` 

 **Résolution** : lors de la création de règles dynamiques, vous pouvez utiliser la fonction d’agrégation `index` pour sélectionner une valeur historique à partir d’une liste. Par exemple, `RowCount > index(last(5)`, 1) vérifiera si le nombre de lignes observé dans l’exécution de tâche actuelle est strictement supérieur au nombre de lignes le plus récent, après le dernier, observé pour votre tâche. `index` est indexé à partir de zéro. 

**Condition d'erreur** : ` IllegalArgumentException: Parsing Error: Rule Type: DetectAnomalies is not valid`. 

 **Résolution** : la détection d’anomalies est uniquement disponible dans AWS Glue 4.0. 

**Condition d'erreur** : ` IllegalArgumentException: Parsing Error: Unexpected condition for rule of type ... no viable alternative at input ...`. 

 Remarque : `...` est dynamique. Exemple: `IllegalArgumentException: Parsing Error: Unexpected condition for rule of type RowCount with number return type, line 4:19 no viable alternative at input '>last'`. 

 **Résolution** : la détection d’anomalies est uniquement disponible dans AWS Glue 4.0. 

## Exception dans la classe utilisateur : org.apache.spark.sql. AnalysisException: org.apache.hadoop.hive.ql.metadata. HiveException
<a name="data-quality-trouble-error-15"></a>

 **Condition d’erreur**`: Exception in User Class: org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to fetch table mailpiece_submitted. StorageDescriptor#InputFormat cannot be null for table: mailpiece_submitted (Service: null; Status Code: 0; Error Code: null; Request ID: null; Proxy: null)` 

 **Cause :** vous utilisez Apache Iceberg dans AWS Glue Data Catalog et l'attribut Input Format est vide dans AWS Glue Data Catalog. 

 **Résolution** : ce problème se produit lorsque vous utilisez le type de règle CustomSQL dans votre règle DQ. Une façon de résoudre ce problème consiste à utiliser « principal » ou à ajouter un nom de catalogue `glue_catalog.` à `<database>.<table> in Custom ruletype`. 

## UNCLASSIFIED\$1ERROR ; IllegalArgumentException : Erreur d'analyse : aucune règle ni analyseur fournis., aucune alternative viable en entrée
<a name="data-quality-trouble-error-16"></a>

 **Condition d’erreur**`: UNCLASSIFIED_ERROR; IllegalArgumentException: Parsing Error: No rules or analyzers provided., no viable alternative at input` 

 **Résolution** : le DQDL n’est pas analysable. Cela peut se produire dans quelques instances. Si vous utilisez des règles composites, assurez-vous qu’elles comportent des parenthèses droites. 

```
(RowCount >= avg(last(10)) * 0.6) and (RowCount <= avg(last(10)) * 1.4) instead of
      RowCount >= avg(last(10)) * 0.6 and RowCount <= avg(last(10)) * 1.4
```