

# AWS Glue Data Quality
<a name="glue-data-quality"></a>

O AWS Glue Data Quality permite que você meça e monitore a qualidade dos dados para que você possa tomar decisões de negócios acertadas. Baseado na estrutura de código aberto do DeeQu, o AWS Glue Data Quality fornece uma experiência de tecnologia sem servidor gerenciada para ajudar você a avaliar e monitorar a qualidade dos dados. O AWS Glue Data Quality trabalha com Data Quality Definition Language (DQDL), que é uma linguagem específica de domínio que você usa para definir regras para o de qualidade de dados. Para saber mais sobre a DQDL e os tipos de regras compatíveis, consulte [Referência de Data Quality Definition Language (DQDL)](dqdl.md).

Para detalhes adicionais sobre o produto e os preços, consulte a página de serviços do [AWS Glue Data Quality](https://aws.amazon.com/glue/features/data-quality).

## Benefícios e principais atributos
<a name="glue-data-quality-key-features"></a>

 Os benefícios e os principais atributos do AWS Glue Data Quality incluem: 
+  **Tecnologia sem servidor**: não requer instalação, aplicação de patches nem manutenção. 
+  **Comece rapidamente**: o AWS Glue Data Quality analisa rapidamente os dados e cria regras de qualidade de dados para você. Você pode começar com dois cliques: “Criar regras de qualidade de dados → Recomendar regras”. 
+  **Detectar problemas de qualidade de dados**: use o machine learning (ML) para detectar anomalias e problemas de qualidade de dados difíceis de detectar. 
+  **Improvise as regras**: começando com mais de 25 regras de DQ prontas para usar, você pode criar regras que atendam às suas necessidades específicas. 
+  **Avalie a qualidade e tome decisões comerciais confiáveis**: depois de avaliar as regras, você obtém uma pontuação de qualidade de dados que fornece uma visão geral da integridade dos dados. Use a pontuação de qualidade de dados para tomar decisões de negócios confiáveis. 
+  **Concentre-se nos dados insatisfatórios**: o AWS Glue Data Quality ajuda você a identificar os registros exatos que causaram a queda de suas pontuações de qualidade. Identifique-os facilmente, coloque-os em quarentena e corrija-os. 
+  **Pagamento conforme o uso**: não há necessidade de licenças anuais para usar o AWS Glue Data Quality. 
+  **Sem exigência de fidelidade**: o AWS Glue Data Quality é baseado no DeeQu de código aberto, permitindo que você mantenha as regras que estiver criando em uma linguagem aberta. 
+  **Verificações de qualidade de dados**: é possível forçar verificações de qualidade de dados em pipelines de ETL do Data Catalog e do AWS Glue, o que permite gerenciar a qualidade dos dados em repouso e em trânsito. 
+  **Detecção de qualidade de dados baseada em ML**: use o machine learning (ML) para detectar anomalias e problemas de qualidade de dados difíceis de detectar. 
+  **Linguagem aberta para expressar regras**: garante que as regras de qualidade de dados sejam criadas de maneira consistente e simples. Os usuários corporativos podem expressar facilmente as regras de qualidade de dados em uma linguagem simples e compreensível. Para engenheiros, essa linguagem proporciona a flexibilidade de gerar código, implementar controle consistente de versão e automatizar implantações. 

## Como funciona
<a name="glue-data-quality-how-it-works"></a>

Há dois pontos de entrada para o AWS Glue Data Quality: os trabalhos de ETL do AWS Glue Data Catalog e do AWS Glue. Esta seção fornece uma visão geral dos casos de uso e dos atributos do AWS Glue compatíveis com cada ponto de entrada.

### Qualidade de dados para o AWS Glue Data Catalog
<a name="glue-data-quality-for-data-catalog"></a>

O AWS Glue Data Quality avalia objetos armazenados no AWS Glue Data Catalog. Ele oferece a quem não é programador uma maneira fácil de configurar regras de qualidade de dados. Essas pessoas incluem administradores de dados e analistas de negócios.



[![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)




Você pode escolher essa opção para os seguintes casos de uso:
+ Você deseja realizar tarefas de qualidade de dados em conjuntos de dados que já catalogou no AWS Glue Data Catalog.
+ Você trabalha com governança de dados e precisa identificar ou avaliar problemas de qualidade de dados no data lake de forma constante.

Você pode gerenciar a qualidade dos dados do catálogo de dados usando as seguintes interfaces:
+ O console de gerenciamento do AWS Glue
+ AWS GlueAPIs do 

Para começar a usar o AWS Glue Data Quality para o AWS Glue Data Catalog, consulte [Introdução ao AWS Glue Data Quality para o Data Catalog](data-quality-getting-started.md).

### Qualidade de dados para trabalhos de ETL do AWS Glue
<a name="glue-data-quality-for-etl"></a>

O AWS Glue Data Quality para trabalhos de ETL do AWS Glue permite que você realize tarefas de qualidade de dados *proativas*. As tarefas proativas ajudam você a identificar e filtrar dados *insatisfatórios antes* de carregar um conjunto de dados no data lake.

[![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)


Você pode escolher a qualidade dos dados para trabalhos de ETL para os seguintes casos de uso:
+ Você deseja incorporar tarefas de qualidade de dados nos trabalhos de ETL
+ Você deseja escrever um código que defina tarefas de qualidade de dados em scripts de ETL
+ Você quer gerenciar a qualidade dos dados que fluem pelos pipelines de dados visuais

Você pode gerenciar a qualidade dos dados para trabalhos de ETL usando as seguintes interfaces:
+ AWS Glue Studio, cadernos do AWS Glue Studio e sessões interativas do AWS Glue
+ Bibliotecas do AWS Glue para scripts ETL
+ AWS GlueAPIs do 

Para começar com a qualidade de dados para trabalhos de ETL, consulte [Tutorial: Getting started with Data Quality](https://docs.aws.amazon.com/glue/latest/ug/gs-data-quality-chapter.html) no *AWS Glue Studio User Guide*.

### Comparar a qualidade dos dados do catálogo de dados com a qualidade dos dados dos trabalhos de ETL
<a name="glue-data-quality-compare"></a>

Esta tabela fornece uma visão geral dos atributos que cada ponto de entrada compatível com o AWS Glue Data Quality.


****  

| Recurso | Qualidade dos dados para o catálogo de dados | Qualidade de dados para trabalhos de ETL | 
| --- | --- | --- | 
| Fontes de dados | Amazon S3, Amazon Redshift, fontes JDBC compatíveis com o Catálogo de dados e formatos de data lake transacionais, como Apache Iceberg, Apache Hudi e Delta Lake. Formatos OTF gerenciados do AWS Lake Formation também são compatíveis, com algumas limitações. Visualizações do Amazon Athena catalogadas no Catálogo de dados do AWS Glue não são compatíveis. Consulte [Tipos de fontes com suporte](data-quality-getting-started.md#data-quality-get-started-supported-source-types).  | Todas as fontes de dados compatíveis com o AWS Glue, incluindo conectores personalizados e conectores de terceiros. | 
| Recomendações de regras de qualidade de dados | Compatível | Não compatível | 
| Criar e executar regras DQDL | Compatível | Compatível | 
| Ajuste de escala automático | Não compatível | Compatível | 
| Compatibilidade com o AWS Glue Flex | Não compatível | Compatível | 
| Agendamento | Compatível ao avaliar regras de qualidade de dados e por meio do Step Functions. | Compatível com o uso do Step Functions e fluxos de trabalho. | 
| Identificação de registros que falharam nas verificações de qualidade de dados | Não compatível | Compatível | 
| Integração com o Amazon EventBridge | Compatível | Compatível | 
| Integração com o AWS Cloudwatch | Compatível | Compatível | 
| Gravar resultados de qualidade de dados no Amazon S3 | Compatível | Compatível | 
| Qualidade incremental dos dados | Compatível por meio dos predicados de pushdown | Compatível por meio dos marcadores do AWS Glue | 
| Compatibilidade com o AWS CloudFormation | Compatível | Compatível | 
| Detecção de anomalias baseada em ML | Não compatível | Compatível | 
| Regras dinâmicas | Não compatível | Compatível | 

## Considerações
<a name="glue-data-quality-considerations"></a>

Considere os seguintes itens antes de usar o AWS Glue Data Quality:
+ As regras de qualidade de dados não podem avaliar fontes de dados aninhadas ou do tipo lista. Consulte [Nivelar structs aninhados](transforms-flatten.md). 

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

A tabela a seguir define os termos relacionados ao AWS Glue Data Quality.

**Data Quality Definition Language (DQDL)**  
Uma linguagem específica de domínio que você pode usar para escrever regras do AWS Glue Data Quality.   
Para saber mais sobre DQDL, consulte o guia de [Referência de Data Quality Definition Language (DQDL)](dqdl.md).

**qualidade de dados **  
Descreve em que medida um conjunto de dados atende à sua finalidade específica. AWS Glue O Data Quality avalia as regras em relação a um conjunto de dados para medir a qualidade dos dados. Cada regra verifica características específicas, como atualidade ou integridade dos dados. Para quantificar a qualidade dos dados, você pode usar uma *pontuação de qualidade de dados*.

**pontuação de qualidade e dados**  
A porcentagem de regras de qualidade de dados aprovadas (resultam em verdadeiras) quando você avalia um conjunto de regras com o AWS Glue Data Quality.

**regra**  
Uma expressão DQDL que verifica os dados em busca de uma característica específica e retorna um valor booliano. Para obter mais informações, consulte [Estrutura da regra](dqdl.md#dqdl-syntax-rule-structure).

**analisador**  
Uma expressão de DQDL que reúne estatísticas de dados. Um analisador reúne estatísticas de dados que podem ser usadas por algoritmos de ML para detectar anomalias e problemas de qualidade de dados difíceis de detectar ao longo do tempo.

**conjunto de regras**  
Um recurso do AWS Glue que compreende um conjunto de regras de qualidade de dados. Um conjunto de regras deve estar associado a uma tabela no AWS Glue Data Catalog. Ao salvar um conjunto de regras, o AWS Glue atribui nome do recurso da Amazon (ARN) ao conjunto de regras.

**pontuação de qualidade e dados**  
A porcentagem de regras de qualidade de dados aprovadas (resultam em verdadeiras) quando você avalia um conjunto de regras com o AWS Glue Data Quality.

**observação**  
Um insight não confirmado gerado pelo AWS Glue pela análise de estatísticas de dados coletadas de regras e analisadores ao longo do tempo.

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

 Limites de serviço do AWS Glue Data Quality: 
+  Você pode ter 2.000 regras em um conjunto de regras. Se seus conjuntos de regras forem maiores, recomendamos dividi-los em vários conjuntos de regras. 
+  O tamanho do conjunto de regras é 65 KB. Se seus conjuntos de regras forem maiores, recomendamos dividi-los em vários conjuntos de regras. 
+  O AWS Glue Data Quality coleta estatísticas quando você cria uma regra ou um analisador. Não há custo associado ao armazenamento dessas estatísticas. No entanto, há um limite de 100.000 estatísticas por conta, e essas estatísticas serão mantidas por no máximo 2 anos. 

## Notas de versão do AWS Glue Data Quality
<a name="data-quality-release-notes"></a>

Este tópico descreve os atributos introduzidos no AWS Glue Data Quality.

### Disponibilidade geral: novos atributos
<a name="data-quality-release-notes-ga"></a>

Os seguintes atributos novos estão disponíveis com a disponibilidade geral do AWS Glue Data Quality:
+ A capacidade de identificar quais registros não foram aprovados nas verificações de qualidade de dados agora é compatível com o AWS Glue Studio
+ Novos tipos de regras de qualidade de dados, como validação da integridade referencial de dados entre dois conjuntos de dados, comparação de dados entre dois conjuntos de dados e verificações de tipos de dados
+ Experiência de usuário aprimorada no AWS Glue Data Catalog
+ Compatibilidade com o Apache Iceberg, o Apache Hudi e o Delta Lake
+ Compatibilidade com o Amazon Redshift
+ Notificação simplificada com o Amazon EventBridge
+ Compatibilidade com o AWS CloudFormation para criação de conjuntos de regras
+ Melhorias no performance: opção de armazenamento em cache em ETL e no AWS Glue Studio para uma performance mais rápida ao avaliar a qualidade dos dados

### 27 de novembro de 2023 (pré-visualização)
<a name="data-quality-release-notes-preview"></a>
+  Os recursos de detecção de anomalias com tecnologia ML agora estão disponíveis no AWS Glue ETL e AWS Glue Studio. Com isso, agora é possível detectar anomalias e problemas de qualidade de dados difíceis de detectar 
+  [ As regras dinâmicas permitem que você forneça limites dinâmicos (p. ex: `RowCount> avg(last(10))`) ](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-dynamic-rules) 

### 12 de março de 2024
<a name="data-quality-release-notes-mar12"></a>
+  Melhorias em DQDL 
  +  [ Suporte a palavras-chave como NULL, BLANKS, WHITESPACES\$1ONLY ](dqdl.md#dqdl-keywords-null-empty-whitespaces_only) 
  +  [ Opções para especificar como a qualidade de dados do AWS Glue deve lidar com regras compostas ](dqdl.md#dqdl-syntax-rule-composition) 
  +  [ O tipo de regra ColumnValues não permitirá que valores NULL sejam passados durante comparações ](dqdl.md#dqdl-keywords-null-empty-whitespaces_only) 
  +  [ Suporte ao operador NOT em DQDL ](dqdl.md#dqdl-syntax-rule-expressions) 

### 26 de junho de 2024
<a name="data-quality-release-notes-jun26"></a>
+ Melhorias em DQDL
  + Agora, O DQDL agora é compatível com a [cláusula where](dqdl.md#dqdl-filtering-data-in-dqdl) para que você possa filtrar dados antes de aplicar as regras do DQ

### 7 de agosto de 2024
<a name="data-quality-release-notes-aug7"></a>
+ A detecção de anomalias e as regras dinâmicas já estão disponíveis ao público

### 22 de novembro de 2024
<a name="data-quality-release-notes-nov22-2024"></a>
+  [ Regras compostas complexas permitem que você crie regras de negócios mais complexas com suporte aninhado ](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-syntax-rule-composition) 
+  Novos tipos de regras para gerenciar a qualidade dos dados de seus arquivos 
  +  [ 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) 
+ Verificações de qualidade de dados padrão em trabalhos de Visual ETL

### 6 de dezembro de 2024
<a name="data-quality-release-notes-dec6-2024"></a>
+ O AWS Glue Data Quality agora oferece suporte a tabelas do Amazon SageMaker AI LakeHouse e tabelas do Iceberg, Delta e HUDI gerenciadas pelo AWS Lake Formation no AWS Glue ETL 5.0.

### 7 de julho de 2025
<a name="data-quality-release-notes-jul7-2025"></a>
+  Qualidade dos dados do AWS Glue; agora compatível com tabelas do Amazon S3, RMS, Lakehouse e tabelas do Iceberg gerenciadas do AWS Lake Formation no Catálogo de dados do AWS Glue. 

### 21º de novembro de 2025
<a name="data-quality-release-notes-nov21-2025"></a>
+ O AWS Glue Data Quality agora oferece suporte à rotulagem de regras para relatórios aprimorados. Você pode organizar e analisar os resultados da qualidade dos dados de forma mais eficaz, consultando os resultados por rótulos específicos para identificar regras com falhas em categorias específicas, contabilizar os resultados das regras por equipe ou domínio e criar relatórios direcionados para diferentes partes interessadas. Para obter mais informações, consulte [Rótulos](dqdl.md#dqdl-labels).
+ O AWS Glue Data Quality agora oferece suporte a constantes no DQDL, permitindo que você defina valores constantes e faça referência a eles em todo o seu script. Isso ajuda a evitar problemas relacionados aos limites de tamanho da consulta ao trabalhar com instruções SQL grandes. Para obter mais informações, consulte [Constantes](dqdl.md#dqdl-constants).

# Detecção de anomalias no AWS Glue Data Quality
<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)




 Os engenheiros gerenciam centenas de pipelines de dados ao mesmo tempo. Cada pipeline pode extrair dados de diferentes fontes e carregá-los no data lake ou em outros repositórios de dados. Para garantir a entrega de dados de alta qualidade para a tomada de decisões, eles estabelecem regras de qualidade de dados. Essas regras avaliam os dados com base em critérios fixos que refletem o estado atual dos negócios. No entanto, quando o ambiente de negócios muda, as propriedades dos dados também mudam, tornando esses critérios fixos desatualizados e resultando em baixa qualidade dos dados. 

 Por exemplo, um engenheiro de dados de uma empresa de varejo estabeleceu uma regra que valida que as vendas diárias devem exceder o limite de um milhão de dólares. Após alguns meses, as vendas diárias ultrapassaram dois milhões de dólares, tornando o limite obsoleto. Devido à ausência de notificação e ao esforço necessário para analisar e atualizar manualmente a regra, o engenheiro de dados não conseguiu atualizar as regras para refletir os limites mais recentes. No final do mês, os usuários corporativos observaram uma queda de 25% em suas vendas. Após muitas horas de investigação, os engenheiros de dados descobriram que um pipeline de ETL responsável por extrair dados de algumas lojas havia falhado sem gerar erros. A regra com limites desatualizados continuou operando com sucesso e sem detectar esse problema. 

 Como alternativa, alertas proativos capazes de detectar essas anomalias poderiam ter permitido que os usuários detectassem esse problema. Além disso, o monitoramento da sazonalidade nos negócios pode destacar problemas significativos de qualidade de dados. Por exemplo, as vendas no varejo podem ser maiores nos finais de semana e durante as festas de fim de ano, enquanto relativamente baixas nos dias de semana. A divergência desse padrão pode indicar problemas de qualidade de dados ou mudanças nas condições comerciais. As regras de qualidade de dados não são capazes de detectar padrões sazonais, pois isso requer algoritmos avançados que possam aprender com padrões anteriores que capturam a sazonalidade para detectar desvios. 

 Por fim, os usuários acham difícil criar e manter regras devido à natureza técnica do processo de criação de regras e ao tempo necessário para criá-las. Como resultado, eles preferem explorar os insights de dados antes de definir as regras. Os clientes precisam ter a capacidade de detectar anomalias facilmente, viabilizando a detecção proativa de problemas de qualidade de dados e a tomada de decisão com confiança. 

## Como funciona
<a name="data-quality-anomaly-detection-how-it-works"></a>

**nota**  
 A detecção de anomalias só é compatível com o processo de ETL do AWS Glue. Esse recurso não é compatível com qualidade de dados baseada no Catálogo de Dados. 

![\[A captura de tela mostra o processo de detecção de anomalias da qualidade de dados.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-anomaly-detection-process.png)


 O AWS Glue Data Quality combina o poder da qualidade de dados baseada em regras e das capacidades de detecção de anomalias para fornecer dados de alta qualidade. Para começar, é necessário configurar regras e analisadores, e então habilitar a detecção de anomalias. 

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

 **Regras**: as regras expressam as expectativas para seus dados em uma linguagem aberta chamada de Data Quality Definition Language (DQDL). Veja um exemplo de regra abaixo. Essa regra será bem-sucedida quando não houver valores vazios ou NULL na coluna `passenger\$1count`: 

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

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

 Em situações nas quais você conheça as colunas críticas, mas talvez não saiba o suficiente sobre os dados para criar regras específicas, será possível monitorar essas colunas usando analisadores. Os analisadores são uma maneira de coletar estatísticas de dados sem definir regras explícitas. Veja um exemplo de configuração de analizadores abaixo: 

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

 Neste exemplo, há três analisadores configurados: 

1.  O primeiro analisador, `AllStatistics “fare\$1amount"`, capturará todas as estatísticas disponíveis para o campo `fare\$1amount`. 

1.  O segundo Analisador, `DistinctValuesCount “pulocationid"`, capturará a contagem de valores distintos na coluna `pulocationid`. 

1.  O terceiro analisador, `RowCount`, capturará o número total de registros no conjunto de dados. 

 Os analisadores são uma maneira simples de coletar estatísticas de dados relevantes sem especificar regras complexas. Ao monitorar essas estatísticas, você pode obter insights sobre a qualidade dos dados e identificar possíveis problemas ou anomalias que possam exigir uma investigação mais aprofundada ou a criação de regras específicas. 

### Estatísticas de tabela
<a name="data-quality-anomaly-data-statistics"></a>

 Tanto os analisadores quanto as regras no AWS Glue Data Quality coletam estatísticas de dados, também conhecidas como perfis de dados. Essas estatísticas fornecem insights sobre as características e a qualidade dos seus dados. As estatísticas coletadas são armazenadas ao longo do tempo no serviço AWS Glue, permitindo que você acompanhe e analise as alterações em seus perfis de dados. 

 Invocando as APIs adequadas, é possível recuperar facilmente essas estatísticas e gravá-las no Amazon S3 para análise adicional ou armazenamento de longo prazo. Essa funcionalidade permite integrar a criação de perfis de dados aos seus fluxos de trabalho de processamento de dados e aproveitar as estatísticas coletadas para vários fins, como monitoramento da qualidade dos dados e detecção de anomalias. 

 Ao armazenar os perfis de dados no Amazon S3, você pode aproveitar a escalabilidade, durabilidade e economia do serviço de armazenamento de objetos da Amazon. Além disso, você pode aproveitar outros serviços da AWS ou ferramentas de terceiros para analisar e visualizar os perfis de dados, permitindo que você obtenha insights mais profundos sobre a qualidade dos dados e tome decisões informadas sobre gerenciamento e governança de dados. 

 Veja um exemplo das estatísticas de dados armazenadas ao longo do tempo. 

![\[A captura de tela mostra um gráfico de linhas das estatísticas de qualidade de dados ao longo do tempo.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-data-statistics-over-time.png)


**nota**  
 O AWS Glue Data Quality coletará estatísticas apenas uma vez, mesmo que você tenha a **regra** e o **analisador** para as mesmas colunas, tornando eficiente o processo de geração de estatísticas. 

### Detecção de anomalias
<a name="data-quality-anomaly-observation-detection"></a>

 Para detectar anomalias, o AWS Glue Data Quality requer um mínimo de três pontos de dados. Ele utiliza um algoritmo de machine learning para aprender com as tendências passadas e, em seguida, prever valores futuros. Quando o valor efetivo não estiver dentro da faixa prevista, o AWS Glue Data Quality criará uma observação de anomalias. Isso disponibilizará uma representação visual do valor efetivo e das tendências. Há quatro valores exibidos no gráfico abaixo. 

![\[A captura de tela mostra um gráfico de linhas da detecção de eventos de anomalia de qualidade de dados ao longo do tempo.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-anomaly-detection-trend.png)


1.  A estatística efetiva e sua tendência ao longo do tempo. 

1.  Uma tendência derivada do aprendizado com a tendência efetiva. Isso é útil para entender a direção da tendência. 

1.  O possível limite superior para a estatística. 

1.  O possível limite inferior para a estatística. 

1.  Regras de qualidade de dados recomendadas capazes de detectar esses problemas no futuro. 

 Há algumas coisas importantes a serem observadas em relação às anomalias: 
+  Quando há a geração de anomalias, as pontuações de qualidade dos dados não são afetadas. 
+  Quando há a detecção de uma anomalia, ela é considerada normal para execuções subsequentes. A menos que esse valor anômalo seja explicitamente excluído, o algoritmo de machine learning o considerará como uma entrada. 

### Retreinamento
<a name="data-quality-anomaly-detection-retraining"></a>

 É fundamental retreinar o modelo de detecção de anomalias para detectar as anomalias corretas. Quando há a detecção de anomalias, o AWS Glue Data Quality inclui a anomalia no modelo como um valor normal. Para garantir que a detecção de anomalias funcione com precisão, é importante fornecer feedback reconhecendo ou rejeitando a anomalia. AWS O Glue Data Quality fornece mecanismos no AWS Glue Studio e nas APIs para fornecer feedback ao modelo. Para saber mais, consulte a documentação sobre como configurar a [Anomaly Detection in AWS Glue ETL pipelines](data-quality-configuring-anomaly-detection-etl-jobs.md). 

## Detalhes do algoritmo de detecção de anomalias
<a name="data-quality-anomaly-detection-algorithm"></a>
+  O algoritmo de detecção de anomalias examina as estatísticas dos dados ao longo do tempo. O algoritmo considera todos os pontos de dados disponíveis e ignora todas as estatísticas que tenham sido explicitamente excluídas. 
+  Essas estatísticas de dados são armazenadas no serviço AWS Glue e você pode fornecer chaves do AWS KMS para criptografá-las. Consulte o Guia de segurança para saber como fornecer chaves do AWS KMS para criptografar as estatísticas do AWS Glue Data Quality. 
+  O componente de tempo é crucial para o algoritmo de detecção de anomalias. O AWS Glue Data Quality determina os limites superior e inferior com base nos valores anteriores. Durante essa determinação, ele considera o componente de tempo. Os limites serão diferentes para os mesmos valores em um intervalo de 1 minuto, um intervalo de 1 hora ou um intervalo diário. 

### Captura da sazonalidade
<a name="data-quality-anomaly-capturing-seasonality"></a>

 O algoritmo de detecção de anomalias do AWS Glue Data Quality pode capturar padrões sazonais. Por exemplo, ele pode entender que os padrões dos dias da semana são diferentes dos padrões dos finais de semana. É possível ver isso no exemplo abaixo, no qual o AWS Glue Data Quality detecta uma tendência sazonal nos valores dos dados. Você não precisa fazer nada específico para habilitar essa capacidade. Com o tempo, o AWS Glue Data Quality aprende tendências sazonais e detecta anomalias quando esses padrões deixam de existir. 

![\[A captura de tela mostra uma guia de qualidade de dados com dados que mostram anomalias ao capturar tendências sazonais.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-capturing-seasonality.png)


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

 Você receberá cobranças com base no tempo necessário para detectar anomalias. Cada estatística recebe a cobrança de 1 DPU para o tempo necessário para a detecção de anomalias. Consulte [Definição de preço do AWS Glue](https://aws.amazon.com/glue/pricing/) para ver exemplos detalhados. 

### Considerações importantes
<a name="data-quality-anomaly-detection-considerations"></a>

 Não há custo para armazenar as estatísticas. No entanto, há um limite de 100.000 estatísticas por conta. Essas estatísticas serão armazenadas por no máximo 2 anos. 

# Permissões do IAM para o AWS Glue Data Quality
<a name="data-quality-authorization"></a>

Este tópico fornece informações para ajudar você a entender as ações e os recursos que podem ser usados em uma política do AWS Identity and Access Management (IAM) para o AWS Glue Data Quality. Inclui também exemplos de políticas do IAM com as permissões mínimas necessárias para usar o AWS Glue Data Quality com o AWS Glue Data Catalog.

Para obter mais informações sobre grupos de segurança no AWS Glue, consulte [Segurança no AWS Glue](security.md).

## Permissões do IAM para o AWS Glue Data Quality
<a name="data-quality-authorization-permissions"></a>

A tabela a seguir lista as permissões de que um usuário precisa para realizar operações específicas do AWS Glue Data Quality. Para definir uma autorização refinada para o AWS Glue Data Quality, você pode especificar essas ações no elemento `Action` de uma instrução de política do IAM. 


**Ações do AWS Glue Data Quality**  

| Ação | Descrição | Tipos de recursos | 
| --- | --- | --- | 
| glue:CreateDataQualityRuleset | Concede permissão para criar um conjunto de regras de qualidade de dados. | ::dataQualityRuleset/<name> | 
| glue:DeleteDataQualityRuleset | Concede permissão para excluir um conjunto de regras de qualidade de dados. | ::dataQualityRuleset/<name> | 
| glue:GetDataQualityRuleset | Concede permissão para recuperar um conjunto de regras de qualidade de dados. | ::dataQualityRuleset/<name> | 
| glue:ListDataQualityRulesets | Concede permissão para recuperar todos os conjunto de regras de qualidade de dados. | ::dataQualityRuleset/\$1 | 
| glue:UpdateDataQualityRuleset | Concede permissão para atualizar um conjunto de regras de qualidade de dados. | ::dataQualityRuleset/<name> | 
| glue:GetDataQualityResult |  Concede permissão para recuperar um resultado de execução de tarefa de qualidade de dados. Essa ação do IAM também fornece permissões para as seguintes APIs: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/data-quality-authorization.html)  | ::dataQualityRuleset/<name> | 
| glue:ListDataQualityResults | Concede permissão para recuperar todos os resultados de execução de tarefas de qualidade de dados. | ::dataQualityRuleset/\$1 | 
| glue:CancelDataQualityRuleRecommendationRun | Concede permissão para interromper uma execução de tarefa de recomendação de qualidade de dados em andamento. | ::dataQualityRuleset/\$1 | 
| glue:GetDataQualityRuleRecommendationRun | Concede permissão para recuperar uma execução de tarefa de recomendação de qualidade de dados. | ::dataQualityRuleset/\$1 | 
| glue:ListDataQualityRuleRecommendationRuns | Concede permissão para recuperar todas as execuções de tarefas de recomendação de qualidade de dados. | ::dataQualityRuleset/\$1 | 
| glue:StartDataQualityRuleRecommendationRun | Concede permissão para iniciar uma execução de tarefa de recomendação de qualidade de dados. | ::dataQualityRuleset/\$1 | 
| glue:CancelDataQualityRulesetEvaluationRun | Concede permissão para interromper uma execução de recomendação de tarefa de qualidade de dados em andamento. | ::dataQualityRuleset/\$1 | 
| glue:GetDataQualityRulesetEvaluationRun | Concede permissão para recuperar uma execução de uma tarefa de qualidade de dados. | ::dataQualityRuleset/\$1 | 
| glue:ListDataQualityRulesetEvaluationRuns | Concede permissão para recuperar todas as execuções de tarefas de qualidade de dados. | ::dataQualityRuleset/\$1 | 
| glue:StartDataQualityRulesetEvaluationRun | Concede permissão para iniciar uma execução de tarefa de qualidade de dados. | ::dataQualityRuleset/<name> | 
| glue:PublishDataQuality | Concede permissão para publicar resultados de qualidade de dados. | ::dataQualityRuleset/<name> | 
| glue:GetDataQualityModel | Concede permissão para recuperar um modelo de qualidade de dados. | ::dataQualityRuleset/<name>, ::job/<name>  | 
| glue:GetDataQualityModelResult | Concede permissão para recuperar resultados de um modelo de qualidade de dados. | ::dataQualityRuleset/<name>, ::job/<name>  | 
| glue:PutDataQualityStatisticAnnotation |  Concede permissão para adicionar anotações às Estatísticas. Essa ação do IAM também fornece permissões para as seguintes APIs: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/data-quality-authorization.html)  | ::dataQualityRuleset/<name>, ::job/<name>  | 
| glue:PutDataQualityProfileAnnotation | Concede permissão para colocar anotações em todas as estatísticas em um perfil. | ::dataQualityRuleset/<name>, ::job/<name>  | 

## A configuração do IAM é requerida para agendar execuções de avaliação
<a name="data-quality-iam-setup-evaluation-runs"></a>

### permissões do IAM
<a name="data-quality-iam-setup-evaluation-runs-permissions"></a>

Para que as execuções de avaliação da qualidade de dados agendadas sejam realizadas, você deve adicionar a ação `IAM:PassRole` à política de permissões.


**Permissões do Agendador do AWS EventBridge requeridas**  

| Ação | Descrição | Tipos de recursos | 
| --- | --- | --- | 
| iam:PassRole | Concede permissão para o IAM a fim de permitir que o usuário passe os perfis aprovados. | ARN do perfil usado para chamar StartDataQualityRulesetEvaluationRun | 

Sem essas permissões, ocorre o seguinte erro:

```
"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"
```

### Entidades confiáveis do IAM
<a name="data-quality-iam-setup-evaluation-runs-trusted-entities"></a>

Os serviços AWS Glue e Agendados do AWS EventBridge precisam estar listados nas entidades confiáveis para criar e executar uma `StartDataQualityEvaluationRun` agendada.

------
#### [ 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"
    }
  ]
}
```

------

## Políticas de exemplo do IAM.
<a name="data-quality-authorization-example-policy"></a>

Um perfil do IAM para o AWS Glue Data Quality precisa dos seguintes tipos de permissões:
+ Permissões para operações do AWS Glue Data Quality para que você possa obter as regras de qualidade de dados recomendadas e executar uma tarefa de qualidade de dados em uma tabela do AWS Glue Data Catalog. Os exemplos de políticas do IAM desta seção incluem as permissões mínimas necessárias para as operações do AWS Glue Data Quality.
+ Permissões que concedem acesso à tabela do Data Catalog aos dados subjacentes. Essas permissões variam dependendo do caso de uso. Por exemplo, para dados que você cataloga no Amazon S3, as permissões devem incluir acesso ao Amazon S3. 
**nota**  
Você deve configurar as permissões do Amazon S3 além das descritas nesta seção.

### Permissões mínimas para obter as regras de qualidade de dados recomendadas
<a name="example-policy-get-dq-rule-recommendations"></a>

Esse exemplo de política inclui as permissões necessárias para gerar as regras de qualidade de dados recomendadas. 

------
#### [ 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": "*"
    }
  ]
}
```

------

### Permissões mínimas para executar uma tarefa de qualidade de dados
<a name="example-policy-run-dq-task"></a>

Esse exemplo de política inclui as permissões necessárias para executar a tarefa de avaliação de qualidade de dados. 

As seguintes instruções da política são opcionais dependendo do caso de uso:
+ `AllowCloudWatchPutMetricDataToPublishTaskMetrics`: obrigatório se você quiser publicar métricas de execução de qualidade de dados no Amazon CloudWatch.
+ `AllowS3PutObjectToWriteTaskResults`: obrigatório se você quiser gravar resultados de execução de qualidade de dados no 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/*"
    }
  ]
}
```

------

### Permissões mínimas para executar um trabalho de qualidade de dados
<a name="example-policy-run-dq-etl-job"></a>

 Esse exemplo de política inclui as permissões necessárias para executar um trabalho de ETL de qualidade de dados. 

------
#### [ 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}"
      ]
    }
	]
}
```

------

# Introdução ao AWS Glue Data Quality para o Data Catalog
<a name="data-quality-getting-started"></a>

 Esta seção de introdução fornece instruções para ajudar você a começar a usar o AWS Glue Data Quality no console da AWS Glue. Você aprenderá a realizar as tarefas essenciais, como gerar recomendações de regras de qualidade de dados e avaliar um conjunto de regras em relação aos seus dados. 

**Topics**
+ [Pré-requisitos](#data-quality-prereqs)
+ [Exemplo passo a passo](#data-quality-step-by-step-example)
+ [Gerar recomendações de regras](#data-quality-get-recommendations)
+ [Monitorar recomendações de regras](#data-quality-monitor-recommendations)
+ [Editar conjuntos de regras recomendadas](#data-quality-edit-ruleset)
+ [Criar um conjunto de regras](#data-quality-create-ruleset)
+ [Como executar um conjunto de regras para avaliar a qualidade de dados](#data-quality-run-data-quality-task)
+ [Como visualizar o índice de qualidade de dados e os resultados](#data-quality-view-results)
+ [Uso de consultas de pré-processamento](#data-quality-preprocessing-queries)
+ [Tipos de fontes com suporte](#data-quality-get-started-supported-source-types)
+ [Tópicos relacionados](#data-quality-get-started-related)

## Pré-requisitos
<a name="data-quality-prereqs"></a>

 Antes de usar o AWS Glue Data Quality, você deve estar familiarizado com o uso do Data Catalog e de crawlers no AWS Glue. Com o AWS Glue Data Quality, você pode avaliar a qualidade das tabelas em um banco de dados do Data Catalog. Você precisará dos seguintes itens: 
+  Uma tabela do Data Catalog para avaliar segundo o conjunto de regras de qualidade de dados. 
+  Um perfil do IAM para o AWS Glue Glue, que você fornece quando gera recomendações de regras ou executa uma tarefa de qualidade de dados. Esse perfil deve ter permissão para acessar os recursos que vários processos do AWS Glue Data Quality exigem para realizar a execução em seu nome. Esses recursos incluem o AWS Glue, o Amazon S3 e o CloudWatch. Para ver exemplos de políticas que incluem as permissões mínimas para o AWS Glue Data Quality, consulte [Políticas de exemplo do IAM.](data-quality-authorization.md#data-quality-authorization-example-policy). 

   Para saber mais sobre perfis do IAM para o AWS Glue, consulte [Create an IAM policy for the AWS Glue service](https://docs.aws.amazon.com/glue/latest/dg/create-service-policy.html) e[Create an IAM role for the AWS Glue service](https://docs.aws.amazon.com/glue/latest/dg/create-an-iam-role.html). Você também pode ver uma lista de todas as permissões do AWS Glue que são específicas para qualidade de dados em [Authorization for AWS Glue Data Quality actions](https://docs.aws.amazon.com/glue/latest/dg/data-quality-authorization.html). 
+  Um banco de dados com pelo menos uma tabela que contém uma variedade de dados. A tabela usada neste tutorial é denominada `yyz-tickets`, com a tabela `tickets`. Esses dados são uma coleção de informações publicamente disponíveis da cidade de Toronto para multas de estacionamento. Se você criar sua própria tabela, certifique-se de que ela esteja preenchida com uma variedade de dados válidos para obter o melhor conjunto de regras recomendadas. 

## Exemplo passo a passo
<a name="data-quality-step-by-step-example"></a>

 Para ver um exemplo passo a passo com conjuntos de dados de amostra, consulte a [postagem do blog sobre o AWS Glue Data Quality](https://aws.amazon.com/blogs/big-data/getting-started-with-aws-glue-data-quality-from-the-aws-glue-data-catalog/). 

## Gerar recomendações de regras
<a name="data-quality-get-recommendations"></a>

 As recomendações de regras tornam mais fácil começar a trabalhar com qualidade de dados sem precisar escrever código. O AWS Glue Data Quality analisa os dados, identifica as regras e cria um conjunto de regras que você pode avaliar em uma tarefa de qualidade de dados. As execuções de recomendação são excluídas automaticamente após 90 dias.

**Para gerar recomendações de regras de qualidade de dados**

1.  Abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/). 

1.  No painel de navegação, selecione **Tables** (Tabelas). Em seguida, selecione a tabela para a qual deseja gerar recomendações de regras de qualidade de dados. 

1.  Na página de detalhes da tabela, selecione a guia **Qualidade dos dados** para acessar as regras e as configurações do AWS Glue Data Quality para a tabela. 

1.  Na guia **Qualidade dos dados**, escolha **Adicionar regras e monitorar a qualidade dos dados**. 

1.  Na página **Criador de conjuntos de regras**, um alerta na parte superior da página solicitará que você inicie uma tarefa de recomendação se não houver nenhuma execução de recomendação de regra. 

1.  Escolha **Recomendar regras** para abrir o modal e inserir os parâmetros para a tarefa de recomendação. 

1.  Escolha um perfil do IAM com acesso ao AWS Glue. Esse perfil deve ter permissão para acessar os recursos que vários processos do AWS Glue Data Quality exigem para realizar a execução em seu nome. 

1.  Depois que os campos forem preenchidos de acordo com suas preferências, escolha **Recomendar regras** para iniciar a execução da tarefa de recomendação. Se as execuções de recomendação estiverem em andamento ou tiverem sido concluídas, você poderá gerenciar as execuções neste alerta. Talvez seja necessário atualizar o alerta para ver a alteração de status. As execuções de tarefas de recomendação concluídas e em andamento aparecem na página **Histórico de execução**, que lista todas as execuções de recomendação dos últimos 90 dias. 

### O que significam as regras recomendadas
<a name="data-quality-recommend-rules"></a>

 O AWS Glue Data Quality gera regras com base nos dados de cada coluna da tabela de entrada. Ele usa as regras para identificar possíveis limites nos quais os dados podem ser filtrados para manter os requisitos de qualidade. A lista de regras geradas a seguir inclui exemplos que são úteis para entender o que as regras significam e o que elas podem fazer quando aplicadas aos dados. 

 Para obter uma lista completa dos tipos de regras em Data Quality Definition Language (DQDL) gerados, consulte a [ referência de tipos de regras de DQDL](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-rule-types). 
+  `IsComplete "SET_FINE_AMOUNT"`: a regra `IsComplete` verifica se a coluna está preenchida para qualquer linha dada. Use essa regra para marcar colunas como não opcionais nos dados. 
+  `Uniqueness "TICKET_NUMBER" > 0.95`: a `Uniqueness` regra verifica se os dados dentro da coluna atendem a algum limite de exclusividade. Neste exemplo, foi determinado que os dados que preenchem qualquer linha dada para `"TICKET_NUMBER"` têm, no máximo, 95% de conteúdo idêntico a todas as outras linhas, o que sugere essa regra. 
+  `ColumnValues "PROVINCE" in ["ON", "QC", "AB", "NY",...]`: a regra `ColumnValues` define valores válidos para a coluna, com base no conteúdo existente da coluna. Neste exemplo, os dados de cada linha são uma placa de código de licença de 2 letras para um estado ou província. 
+  `ColumnLength "INFRACTION_DESCRIPTION" between 15 and 31`: a regra `ColumnLength` impõe uma restrição de tamanho aos dados de uma coluna. Essa regra é gerada a partir dos dados de amostra com base nos comprimentos mínimo e máximo registrados para uma coluna de strings. 

## Monitorar recomendações de regras
<a name="data-quality-monitor-recommendations"></a>

 Quando as recomendações de regras de qualidade de dados estão em execução, a página **Adicionar regras e monitorar a qualidade de dados** exibe informações e ações adicionais que você pode realizar na barra superior. 

 Quando as recomendações de regras estão em andamento, você pode escolher **Parar a execução** antes que a tarefa de recomendação seja concluída. Enquanto a tarefa estiver em andamento, você verá o status, **em andamento** e a data e a hora em que a execução começou. 

 Quando as recomendações de regras forem concluídas, a barra de recomendação de regras exibirá o número de regras recomendadas, o status da última execução da recomendação e a data e o timestamp em que ela foi concluída. 

 Você pode adicionar as regras recomendadas escolhendo **Inserir recomendação de regra**. Para ver as regras recomendadas anteriormente, selecione uma data específica. Para executar uma nova recomendação, escolha **Mais ações** e depois **Regras recomendadas**. 

 Defina as configurações padrão escolhendo **Gerenciar configurações do usuário**. Você pode definir o caminho padrão para o Amazon S3 armazenar conjuntos de regras ou configurar uma função padrão para executar o catálogo de dados. 

## Editar conjuntos de regras recomendadas
<a name="data-quality-edit-ruleset"></a>

Como o AWS Glue Data Quality gera regras com base nos dados existentes que você tem disponíveis, é possível ver algumas regras inesperadas ou indesejáveis nas sugestões automatizadas. Para tirar o máximo proveito dos conjuntos de regras recomendadas, você precisa avaliá-los e modificá-los. Nesta etapa do tutorial, você toma as regras geradas na etapa anterior e as ajusta para impor qualidades mais restritivas a alguns dados. Você também relaxa outras regras para garantir que dados corretos e exclusivos possam ser adicionados posteriormente. 

**Editar um conjunto de regras sugeridas**

1.  No console do AWS Glue, escolha **Catálogo de dados** no painel de navegação e depois **Adicionar banco de dados**. Selecione a tabela `tickets`. 

1. Na página de detalhes da tabela, escolha a guia **Qualidade dos dados** para acessar as regras e as configurações do AWS Glue Data Quality para a tabela.

1.  Na seção **Conjuntos de regras**, selecione o conjunto de regras gerado em [Gerar recomendações de regras](#data-quality-get-recommendations). 

1.  Escolha **Ações** e depois escolha **Editar** na janela do console. O editor do conjunto de regras é carregado no console. Ele inclui um painel de edição para as regras e uma referência rápida de DQDL. 

1. Remova a linha `2` do script. Isso relaxa a exigência de que o tamanho do banco de dados seja restrito a um determinado número de linhas. Após a edição, o arquivo deve conter o seguinte nas linhas de 1 a 3:

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

1. Remova a linha `25` do script. Isso relaxa a exigência de que 96% das províncias registradas sejam `ON`. Após a edição, o arquivo deve conter o seguinte, da linha `24` até o final do conjunto de regras:

   ```
   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. Altere a linha `14` para o seguinte:

   ```
   IsComplete "TIME_OF_INFRACTION",
   ```

    Isso *reforça* a exigência na coluna, limitando o banco de dados apenas a multas que contenham a hora da infração registrada. Você deve sempre considerar as multas cuja hora da infração não está registrada como dados inválidos nesse conjunto de dados. Isso é diferente de situações em que o particionamento ou a transformação podem ser mais apropriados para uso ou inspeção adicional de dados para determinar uma regra de qualidade.

1. Escolha **Atualizar conjunto de regras** na parte inferior da página do console.

## Criar um conjunto de regras
<a name="data-quality-create-ruleset"></a>

 Um conjunto de regras é um grupo de regras de qualidade de dados que você avalia em relação aos seus dados. No console do AWS Glue, você pode criar conjuntos de regras personalizados usando Data Quality Definition Language (DQDL). 

**Para criar um conjunto de regras de qualidade de dados**

1.  No console do AWS Glue, escolha **Catálogo de dados**, **Bancos de dados** e depois **Tabelas** no painel de navegação. Selecione a tabela `tickets`. 

1. Abra a guia **Data quality** (Qualidade de dados).

1.  Na seção **Regras**, escolha **Criar regra)**. O editor DQDL é iniciado no console. Ele tem uma área de texto para edição direta e uma referência rápida para as regras do DQDL e o esquema da tabela. 

1.  Comece a adicionar regras à área de texto do editor DQDL. Você pode escrever as regras diretamente deste tutorial ou usar o atributo de criação de regras **Criador de regras DQDL** do editor de regras de qualidade de dados. 
**nota**  
 Selecione um tipo de regra na lista e o sinal de adição para inserir um exemplo de sintaxe no painel do editor. 
Troque os nomes das colunas do espaço reservado por seus próprios nomes de coluna. Os nomes das colunas da tabela estão disponíveis na guia **Esquema**. 
 Atualize o parâmetro de expressão conforme desejar. Para obter uma lista completa de expressões compatíveis com DQDL, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions). 

    Como exemplo, as regras a seguir são restrições para a validação de dados da coluna `ticket_number` na tabela `tickets`. Para adicionar as seguintes regras, use o criador de regras DQDL ou edite diretamente o conjunto de regras: 

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

1. Forneça um nome para o novo conjunto de regras no campo **Nome do conjunto de regras**.

1. Escolha **Salvar conjunto de regras**.

### Avaliar a qualidade dos dados em vários conjuntos de dados
<a name="data-quality-create-ruleset-referential-integrity"></a>

 Você pode configurar regras de qualidade de dados em vários conjuntos de dados usando os conjuntos de regras ReferentialIntegrity e DatasetMatch. ReferentialIntegrity verifica se os dados no conjunto de dados primário estão presentes em outros conjuntos de dados. 

Para adicionar um conjunto de dados de referência, escolha a guia **Esquema** e depois **Atualizar tabelas de referência**. Será solicitado que você selecione um banco de dados e uma tabela. Você pode adicionar a tabela e depois configurar as regras de qualidade dos dados. Tipos de regras como AggregateMatch, RowCountMatch, ReferentialIntegrity, SchemaMatch, and DatasetMatch ofesão compatíveis com a capacidade de executar verificações de qualidade de dados em vários conjuntos de dados. 

## Como executar um conjunto de regras para avaliar a qualidade de dados
<a name="data-quality-run-data-quality-task"></a>

 Quando você executa uma tarefa de qualidade de dados, o AWS Glue Data Quality avalia um conjunto de regras em relação aos seus dados e calcula uma pontuação de qualidade de dados. A pontuação representa a porcentagem de regras de qualidade de dados aprovadas para os dados fornecidos. 

**Para executar uma tarefa de qualidade de dados**

1. No console do AWS Glue, escolha **Catálogo de dados**, **Bancos de dados** e depois **Tabelas** no painel de navegação. Selecione a tabela `tickets`.

1. Escolha a guia **Qualidade de dados**.

1. Na lista **Conjuntos de regras**, escolha o conjunto de regras segundo as quais você deseja avaliar a tabela. Para esta etapa, recomendamos usar um conjunto de regras que você já tenha escrito ou modificado, em vez de regras geradas. Escolha **Executar**. 

1.  No modal, escolha seu perfil do IAM. Esse perfil deve ter permissão para acessar os recursos que vários processos do AWS Glue Data Quality exigem para realizar a execução em seu nome. Você pode salvar o perfil do IAM como padrão ou modificá-lo acessando a página **Configuração padrão**. 

1.  Em **Data quality actions** (Ações de qualidade de dados), escolha se você deseja **Publish metrics to Amazon CloudWatch**. (Publicar métricas no Amazon CloudWatch). Quando essa opção está selecionada, o AWS Glue Data Quality publica métricas que indicam o número de regras aprovadas e o número de regras reprovadas. Para atuar sobre as métricas armazenadas dessa forma, você pode usar os alarmes do CloudWatch. As principais métricas também são publicadas no Amazon EventBridge para você configurar alertas. Para obter mais informações, consulte [Configurar alertas, implantações e agendamentos](https://docs.aws.amazon.com/glue/latest/dg/data-quality-alerts.html). 

1.  Em **Frequência de execução**, escolha executar sob demanda ou agende o conjunto de regras. Ao agendar um conjunto de regras, é solicitado a você um nome de tarefa. A agenda será criada no Amazon EventBridge. Você pode editar sua agenda no Amazon EventBridge. 

1.  Para salvar os resultados de qualidade dos dados no Amazon S3, escolha um **Local para os resultados de qualidade de dados**. O perfil do IAM que você selecionou anteriormente para essa tarefa deve ter acesso de gravação ao local escolhido. 

1.  Em **Configurações adicionais**, insira o **Número necessário de operadores** que você deseja que o AWS Glue aloque para a tarefa de qualidade de dados. 

1.  Opcionalmente, você pode configurar um filtro na fonte de dados. Isso ajuda a reduzir os dados que você está lendo. Você também pode usar um filtro para executar validações incrementais selecionando as informações da partição e passando-as como parâmetros por meio de chamadas de API. Para melhorar a performance, você pode fornecer um predicado de partição. 

1.  Escolha **Executar**. Você deve ver a nova tarefa na lista **Data quality task runs** (Execuções de tarefas de qualidade de dados). Quando a coluna **Status da execução** da tarefa for exibida como **Concluída**, você poderá visualizar os resultados da pontuação de qualidade. Pode ser necessário atualizar a janela do console para que o status seja atualizado corretamente. 

1.  Para visualizar a coluna dos detalhes do resultado da qualidade dos dados, escolha o ícone “\$1” para expandir o conjunto de regras. Os resultados mostram as regras em que as regras foram aprovadas e reprovadas na avaliação e o que causou a reprovação da regra. 

## Como visualizar o índice de qualidade de dados e os resultados
<a name="data-quality-view-results"></a>

**Para ver a última execução em todos os conjuntos de regras criados**

1.  No console do AWS Glue, escolha **Tables** (Tabelas) no painel de navegação. Em seguida, selecione a tabela para a qual deseja executar uma tarefa de qualidade de dados. 

1.  Escolha a guia **Qualidade de dados**. 

1.  O **resumo da qualidade de dados** mostra uma tendência geral das execuções ao longo do tempo. As últimas 10 execuções em todos os conjuntos de regras são exibidas por padrão. Para filtrar por conjunto de regras, selecione o conjunto desejado na lista suspensa. Se houver menos de 10 execuções, todas as execuções concluídas disponíveis serão exibidas. 

1.  Na tabela **Qualidade de dados**, cada conjunto de regras com sua última execução (se houver) é mostrado, junto com a pontuação. A expansão do conjunto de regras exibe as regras que estão nesse conjunto de regras, junto com os resultados da regra na execução. 



**Para ver a última execução de um conjunto de regras específico**

1.  No console do AWS Glue, escolha **Tables** (Tabelas) no painel de navegação. Em seguida, selecione a tabela para a qual deseja executar uma tarefa de qualidade de dados. 

1.  Escolha a guia **Qualidade de dados**. 

1.  Na tabela **Qualidade de dados**, escolha um conjunto de regras específico. 

1.  Na página de **Detalhes do conjunto de regras**, escolha a guia **Histórico de execuções**. 

    Todas as execuções de avaliação desse conjunto de regras específico estão listadas na tabela dessa guia. Você pode ver o histórico das pontuações e o status das execuções. 

1.  Para ver mais informações sobre uma execução específica, escolha a **ID da execução** para acessar a página **Detalhes da execução de avaliação**. Nessa página, você pode ver detalhes específicos sobre a execução e mais detalhes sobre o status dos resultados de regras individuais. 

## Uso de consultas de pré-processamento
<a name="data-quality-preprocessing-queries"></a>

 O AWS Glue Data Quality oferece suporte a consultas de pré-processamento que permitem transformar seus dados antes de executar verificações de qualidade de dados. Esse recurso permite que você: 
+ Crie colunas derivadas para validação da qualidade dos dados.
+ Filtre dados com base em condições específicas.
+ Execute cálculos ou transformações para verificações de qualidade.
+ Valide as relações entre as colunas.

**nota**  
 Esse recurso só é compatível com as APIs e não com o console. 

### Usanr consultas de pré-processamento com a CLI e o SDK
<a name="data-quality-preprocessing-queries-cli-sdk"></a>

#### A recomendação é executada
<a name="data-quality-preprocessing-queries-recommendation-runs"></a>

 Os exemplos a seguir mostram como usar consultas de pré-processamento com execuções de recomendação. 

 **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 para 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);
```

#### A avaliação do conjunto de regras é executada
<a name="data-quality-preprocessing-queries-evaluation-runs"></a>

 Os exemplos a seguir mostram como usar consultas de pré-processamento com execuções de avaliação de conjuntos de regras. 

 **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 para 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);
```

### Considerações ao criar consultas de pré-processamento
<a name="data-quality-preprocessing-queries-considerations"></a>

 Ao escrever uma consulta de pré-processamento: 
+ A referência da tabela deve ser formatada como ``databaseName.tableName`` usando crase.
+ A consulta deve ser uma instrução SELECT válida.
+ Os nomes das colunas na saída da consulta serão usados para regras de qualidade de dados.

 O exemplo a seguir mostra uma consulta de pré-processamento: 

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

### Limitações
<a name="data-quality-preprocessing-queries-limitations"></a>
+ A consulta deve fazer referência à tabela usando crase e o formato completo ``databaseName.tableName``.
+ O tamanho máximo é de 51.200 caracteres.
+ A consulta deve retornar pelo menos uma linha de dados.
+ Todas as colunas referenciadas em seu conjunto de regras devem estar presentes na saída da consulta.

## Tipos de fontes com suporte
<a name="data-quality-get-started-supported-source-types"></a>


**Suporte ao tipo de tabela por configuração do AWS Lake Formation**  

| Tipo de tabela | AWS Lake Formation - Acesso a todas as tabelas | AWS Lake Formation Habilitado com colunas | AWS Lake Formation Habilitado com filtros de dados | AWS Lake FormationSuporte Cross-Account - Acesso a todas as tabelas | AWS Lake Formation desabilitados | 
| --- | --- | --- | --- | --- | --- | 
| Parquet | Compatível | Sem suporte | Sem suporte | Compatível | Compatível | 
| ORC | Compatível | Sem suporte | Sem suporte | Compatível | Compatível | 
| CSV, JSON, TSV | Compatível | Sem suporte | Sem suporte | Compatível | Compatível | 
| Avro | Compatível | Sem suporte | Sem suporte | Compatível | Compatível | 
| JSON | Compatível | Sem suporte | Sem suporte | Compatível | Compatível | 
| Iceberg | Compatível | Sem suporte | Sem suporte | Compatível | Compatível | 
| HUDI | Sem suporte | Sem suporte | Sem suporte | Sem suporte | Compatível | 
| Delta | Sem suporte | Sem suporte | Sem suporte | Sem suporte | Compatível | 
| RMS | Compatível\$1 | Compatível\$1 | Compatível\$1 | Sem suporte | Sem suporte | 
| Tabelas do Amazon S3 | Compatível\$1 | Sem suporte | Sem suporte | Não aplicável | Compatível | 
| Amazon RDS e Aurora | Não aplicável | Não aplicável | Não aplicável | Não aplicável | Sem suporte | 
| JDBC | Não aplicável | Não aplicável | Não aplicável | Não aplicável | Compatível | 

 \$1 Não há suporte para tabelas do Amazon S3 e o SageMaker Lakehouse no Console do AWS Glue. Atualmente, as execuições de recomendações de tabelas do Amazon S3 e do Catálogo de dados do SageMaker Lakehouse e as execuições de avaliação da qualidade dos dados do Catálogo de Dados somente são compatíveis com a CLI. 

### Outras limitações conhecidas
<a name="w2aac49c43c47b7"></a>
+  Tabelas Symlink do Delta Lake: não compatíveis com execuções de recomendações de qualidade de dados do AWS Glue ou execuções de avaliação de qualidade de dados do Catálogo de dados. 
+  Publicação de ativos de tabelas da Amazon S3 no Estúdio Unificado do SageMaker: atualmente, a publicação de tabelas do Amazon S3 como ativos no Estúdio Unificado do SageMaker não está disponível; como resultado, a visualização das execuições da qualidade dos dados de tabelas da Amazon S3 não está disponível no Estúdio Unificado do SageMaker. 

## Tópicos relacionados
<a name="data-quality-get-started-related"></a>
+ [Referência de tipos de regra DQDL](dqdl-rule-types.md)
+ [Referência de Data Quality Definition Language (DQDL)](dqdl.md)

# Avaliar qualidade de dados com o AWS
<a name="data-quality-gs-studio"></a>

 O AWS Glue Data Quality avalia e monitora a qualidade dos dados com base em regras que você define. Isso facilita a identificação dos dados que precisam de ação. No AWS Glue Studio, você pode adicionar nós de qualidade de dados ao trabalho visual para criar regras de qualidade de dados em tabelas no catálogo de dados. Você poderá, então, monitorar e avaliar as alterações nos conjuntos de dados à medida que eles evoluírem ao longo do tempo. Para obter uma visão geral de como trabalhar com a qualidade de dados do AWS Glue no AWS Glue Studio, veja o vídeo a seguir.

[![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)


 A seguir estão as etapas de alto nível de como você trabalha com o AWS Glue Data Quality: 

1. **Criar regras de qualidade de dados**: compile um conjunto de regras de qualidade de dados usando o compilador DQDL escolhendo conjuntos de regras integrados que você configura. 

1.  **Configurar um trabalho de qualidade de dados**: defina ações com base nos resultados de qualidade de dados e nas opções de saída. 

1.  **Salvar e executar um trabalho com qualidade de dados**: criar e executar um trabalho. Salvar o trabalho salvará os conjuntos de regras que você criou para o trabalho. 

1.  **Monitorar e analisar os resultados de qualidade dos dados**: analise os resultados da qualidade dos dados após a conclusão da execução do trabalho. Opcionalmente, agende o trabalho para uma data futura. 

## Benefícios
<a name="gs-data-quality-benefits"></a>

 Analistas de dados, engenheiros de dados e cientistas de dados podem usar o nó Evaluate Data Quality no AWS Glue Studio para analisar, configurar, monitorar e melhorar a qualidade dos dados do editor de trabalho visual. Os benefícios de usar o nó de qualidade de dados incluem: 
+  **Você pode detectar problemas de qualidade de dados**: você pode verificar problemas criando regras que verificam as características dos seus conjuntos de dados. 
+  **É fácil começar**: você pode começar com regras e ações pré-construídas. 
+  **Integração perfeita**: você pode usar nós de qualidade de dados no AWS Glue Studio porque o AWS Glue Data Quality é executado em cima do catálogo de dados do AWS Glue. 

# Avaliar a qualidade dos dados para trabalhos de ETL no AWS Glue Studio
<a name="tutorial-data-quality"></a>

Neste tutorial, você começa a usar o AWS Glue Data Quality no AWS Glue Studio. Você aprenderá a fazer o seguinte: 
+  Criar regras usando o compilador de regras da Data Quality Definition Language (DQDL). 
+  Especificar ações de qualidade de dados, dados a serem produzidos e o local de saída dos resultados de qualidade de dados. 
+  Analisar os resultados de qualidade dos dados. 

 Para praticar com um exemplo, revise a postagem do 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/). 

## Etapa 1: adicionar o nó de transformação Evaluate Data Quality à tarefa visual
<a name="tutorial-data-quality-step1"></a>

Nesta etapa, você adiciona o nó Evaluate Data Quality à tarefa visual 

**Para adicionar o nó de qualidade de dados**

1.  No console Glue Studio do AWS, escolha **Visual com origem e destino** na seção **Criar tarefa** e, em seguida, escolha **Criar**. 

1.  Escolha um nó ao qual você deseja aplicar a transformação de qualidade de dados. Normalmente, isso será um nó de transformação ou uma fonte de dados. 

1.  Abra o painel de recursos à esquerda escolhendo o ícone “\$1”. Em seguida, procure **Evaluate Data Quality** na barra de pesquisa e escolha **Evaluate Data Quality** nos resultados da pesquisa. 

1.  O editor visual de tarefas mostrará a ramificação do nó de transformação **Evaluate Data Quality** a partir do nó selecionado. No lado direito do console, a guia **Transform** (Transformar) é aberta automaticamente. Se você precisar alterar o nó principal, escolha a guia **Propriedades do nó** e, em seguida, escolha o nó principal no menu suspenso. 

    Quando você escolhe um novo nó principal, uma nova conexão é feita entre o nó superior e o nó **Evaluate Data Quality** (Avaliar qualidade dos dados). Remova todos os nós principais indesejados. Somente um nó principal pode ser conectado a um nó **Evaluate Data Quality**. 

1.  A transformação Evaluate Data Quality oferece suporte a vários pais para que você possa validar as regras de qualidade de dados em vários conjuntos de dados. As regras que oferecem suporte a vários conjuntos de dados incluem ReferentialIntegrity, DatasetMatch, SchemaMatch, RowCountMatch e AggregateMatch. 

   Ao adicionar várias entradas à transformação Evaluate Data Quality, você precisa selecionar sua entrada “primária”. Sua entrada principal é o conjunto de dados para o qual você deseja validar a qualidade dos dados. Todos os outros nós ou entradas são tratados como referências. 

   Você pode usar a transformação Evaluate Data Quality para identificar registros específicos que falharam nas verificações de qualidade dos dados. Recomendamos que você escolha seu conjunto de dados principal porque novas colunas que sinalizam registros incorretos são adicionadas ao conjunto de dados primário. 

1.  Você pode especificar aliases para fontes de dados de entrada. Os aliases fornecem outra forma de referenciar a fonte da entrada quando você está usando a regra ReferentialIntegrity. Como somente uma fonte de dados pode ser designada como fonte primária, cada fonte de dados adicional adicionada exigirá um alias. 

   No exemplo a seguir, a regra ReferentialIntegrity especifica a fonte de dados de entrada pelo nome do alias e realiza uma comparação individual com a fonte de dados primária. 

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

## Etapa 2: criar uma regra usando DQDL
<a name="tutorial-data-quality-step2"></a>

Nesta etapa, você cria uma regra usando DQDL. Para este tutorial, você criará uma única regra usando o tipo de regra **Completeness**. Esse tipo de regra verifica a porcentagem de valores completos (não nulos) em uma coluna em relação a uma determinada expressão. Para obter mais informações sobre o uso de DQDL, consulte [DQDL](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html). 

1.  Na guia **Transformar**, adicione um **tipo de regra** clicando no botão **Inserir**. Isso adiciona o tipo de regra ao editor de regras, onde você pode inserir os parâmetros da regra. 
**nota**  
 Ao editar regras, verifique se as regras estão entre colchetes e certifique-se de que as regras estejam separadas por vírgulas. Por exemplo, uma expressão de regra completa terá a seguinte aparência:   

   ```
   Rules= [
       Completeness "year">0.8, Completeness "month">0.8
   ]
   ```
 Este exemplo especifica o parâmetro de completude para as colunas denominadas 'ano' e 'mês'. Para que a regra seja aprovada, essas colunas devem estar mais de 80% 'completas' ou ter dados em mais de 80% das instâncias para cada coluna respectiva. 

    Neste exemplo, pesquise e insira o tipo de regra **Completeness** (Completude). Isso adiciona o tipo de regra ao editor de regras. Esse tipo de regra tem a seguinte sintaxe: `Completeness <COL_NAME> <EXPRESSION>`. 

   A maioria dos tipos de regras exige que você forneça uma expressão como parâmetro para criar uma resposta booleana. Para obter mais informações sobre expressões DQDL compatíveis, consulte [Expressões DQDL](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-syntax). Em seguida, você adicionará o nome da coluna. 

1.  No compilador de regras DQDL, clique na guia **Esquema**. Use a barra de pesquisa para localizar o nome da coluna no esquema de entrada. O esquema de entrada exibe o nome da coluna e o tipo de dados. 

1.  No editor de regras, clique à direita do tipo de regra para inserir o cursor onde a coluna será inserida. Como alternativa, você pode digitar o nome da coluna na regra. 

    Por exemplo, na lista de colunas na lista de esquemas de entrada, clique no botão **Inserir** ao lado da coluna (neste exemplo, **ano**). Isso adicionará a coluna à regra. 

1.  Em seguida, no editor de regras, adicione uma expressão para avaliar a regra. Como o tipo de regra **Completeness** verifica a porcentagem de valores completos (não nulos) em uma coluna em relação a uma determinada expressão, insira uma expressão como `> 0.8`. Essa regra verificará se a coluna tem mais de 80% de valores completos (não nulos). 

## Etapa 3: configurar saídas de qualidade de dados
<a name="tutorial-data-quality-step3"></a>

 Depois de criar regras de qualidade de dados, você pode selecionar opções adicionais para especificar a saída do nó de qualidade de dados. 

1.  Em **Data quality transform output** (Saída de transformação de qualidade de dados), escolha uma das seguintes opções: 
   +  **Original data**: escolha para saída dos dados de entrada originais. Quando você escolhe essa opção, um novo nó filho “rowLevelOutcomes” é adicionado ao trabalho. O esquema corresponde ao esquema do conjunto de dados primário que foi passado como entrada para a transformação. Essa opção é útil se você quiser apenas transmitir os dados e rejeitar o trabalho quando ocorrerem problemas de qualidade. 

     Outro caso de uso é quando você deseja detectar registros incorretos que falharam nas verificações de qualidade dos dados. Para detectar registros incorretos, escolha a opção **Adicionar novas colunas para indicar erros na qualidade dos dados**. Essa ação adiciona quatro novas colunas ao esquema da transformação “rowLevelOutcomes”. 
     +  **DataQualityRulesPass** (matriz de strings): Fornece uma matriz de regras que passaram pelas verificações de qualidade dos dados. 
     +  **DataQualityRulesFail** (matriz de strings): Fornece uma matriz de regras que foram reprovadas pelas verificações de qualidade dos dados. 
     +  **DataQualityRulesSkip** (matriz de strings): Fornece uma matriz de regras que foram ignoradas. As regras a seguir não podem identificar registros de erro porque são aplicadas no nível do conjunto de dados. 
       +  AggregateMatch 
       +  ColumnCount 
       +  ColumnExists 
       +  ColumnNamesMatchPattern 
       +  CustomSql 
       +  RowCount 
       +  RowCountMatch 
       +  StandardDeviation 
       +  Média 
       +  ColumnCorrelation 
     +  **DataQualityEvaluationResult**: fornece o status “Aprovado” ou “Falha” no nível da linha. Observe que seu resultado geral pode ser FALHA, mas um determinado registro pode ser aprovado. Por exemplo, a regra RowCount pode ter falhado, mas todas as outras regras podem ter sido bem-sucedidas. Nesses casos, o status desse campo é “Aprovado”. 

1.  **Resultados de qualidade dos dados**: opte pela saída das regras configuradas e seu status de aprovação ou reprovação. Essa opção é útil se você quiser gravar seus resultados no Amazon S3 ou em outros bancos de dados. 

1. **Configurações de saída de qualidade de dados** (Opcional): escolha **Configurações de saída de qualidade de dados** para revelar o campo **Local do resultado da qualidade de dados**. Em seguida, clique em **Procurar** para procurar um local do Amazon S3 para definir como objetivo de saída de qualidade de dados. 

## Etapa 4: Configurar ações de qualidade de dados
<a name="tutorial-data-quality-step4"></a>

 Você pode usar ações para publicar métricas do CloudWatch ou para interromper trabalhos com base em critérios específicos. As ações só estarão disponíveis depois que você criar uma regra. Quando você escolhe essa opção, as mesmas métricas também são publicadas no Amazon EventBridge. Você pode usar essas opções para [criar alertas para notificação](https://docs.aws.amazon.com/glue/latest/dg/data-quality-alerts.html). 
+  **Em caso de falha no conjunto de regras**: você pode escolher o que fazer se um conjunto de regras falhar durante a execução do trabalho. Se você quiser que o trabalho falhe se a qualidade dos dados falhar, escolha quando o trabalho deve falhar selecionando uma das opções a seguir. Por padrão, essa ação não é selecionada e a tarefa concluirá sua execução mesmo se as regras de qualidade de dados falharem. 
  +  **Nenhum**: se você escolher **Nenhum** (padrão), o trabalho não falhará e continuará sendo executado apesar das falhas no conjunto de regras. 
  +  **Falha na tarefa após carregar os dados no destino**: a tarefa falha e nenhum dado é salvo. Para salvar os resultados, escolha um local do Amazon S3 onde os resultados de qualidade dos dados serão salvos. 
  +  **Falha na tarefa sem carregar os dados de destino**: essa opção causa falha na tarefa imediatamente quando ocorre um erro de qualidade de dados. Ela não carrega nenhum destino de dados, incluindo os resultados da transformação da qualidade dos dados. 

## Etapa 5: visualizar os resultados de qualidade dos dados
<a name="tutorial-data-quality-step5"></a>

 Depois de executar o trabalho, visualize os resultados de qualidade dos dados clicando na guia **Qualidade dos dados**. 

1.  Para cada trabalho executado, veja os resultados de qualidade dos dados. Cada nó exibe um status de qualidade de dados e detalhes de status. Clique em um nó para ver todas as regras e o status de cada regra. 

1.  Escolha **Baixar resultados** para baixar um arquivo CSV que contém informações sobre a execução do trabalho e os resultados da qualidade dos dados. 

1.  Se você tiver mais de uma execução de trabalho com resultados de qualidade de dados, poderá filtrar os resultados por intervalo de data e hora. Clique em *Filtrar por um intervalo de data e hora* para expandir a janela do filtro. 

1.  É possível escolher entre intervalo relativo e intervalo absoluto. Para intervalos absolutos, use o calendário para selecionar uma data e insira valores para hora de início e hora de término. Após terminar, escolha **Aplicar**. 

## Qualidade de dados automática
<a name="automatic-data-quality"></a>

 Quando você cria um trabalho de ETL do AWS Glue com o Amazon S3 como destino, o ETL do AWS Glue habilita automaticamente uma regra de qualidade de dados que verifica se os dados que estão sendo carregados têm pelo menos uma coluna. Essa regra foi desenvolvida para garantir que os dados que estão sendo carregados não estejam vazios ou corrompidos. No entanto, se essa regra falhar, o trabalho não falhará; em vez disso, você notará uma redução no seu índice de qualidade de dados. Além disso, a detecção de anomalias é ativada por padrão e monitora o número de colunas nos dados. Se houver alguma variação ou anormalidade na contagem de colunas, o ETL do AWS Glue informará você sobre essas anomalias. Esse recurso ajuda você a identificar possíveis problemas com os dados e a tomar as medidas apropriadas. Para visualizar a regra de qualidade de dados e sua configuração, é possível clicar no destino do Amazon S3 em seu trabalho de ETL do AWS Glue. A configuração da regra será exibida, conforme mostrado na captura de tela fornecida. 

![\[A captura de tela mostra as opções automáticas de qualidade de dados disponíveis para seleção.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/automatic-data-quality.png)


 Você pode adicionar outras regras de qualidade de dados selecionando **Editar configuração de qualidade de dados**. 

## Métricas agregadas
<a name="data-quality-aggregated-metrics"></a>

Você pode exigir métricas agregadas, como o número de registros aprovados, reprovados ou ignorados no nível da regra ou no nível do conjunto de regras para criar painéis. Para obter as métricas agregadas e as métricas de regras para cada regra, primeiro habilite as métricas agregadas adicionando a opção `publishAggregatedMetrics` à sua função `EvaluateDataQuality`.

As opções possíveis para `additional_options` `publishAggregatedMetrics` são `ENABLED` e `DISABLED`. Exemplo:

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

Se não for especificado, o `publishAggregatedMetrics.status` é `DISABLED` por padrão, e as ruleMetrics e as métricas agregadas agora serão computadas. Esse atributo é atualmente suportado nas sessões interativas do AWS Glue e nas tarefas de ETL do Glue. Isso não é suportado nas APIs do Glue Catalog Data Quality.

### Recuperar resultados de métricas agregadas
<a name="data-quality-aggregated-metrics-results"></a>

Quando `additionalOptions` for `"publishAggregatedMetrics.status": "ENABLED"`, você poderá obter os resultados em dois lugares:

1. `AggregatedMetrics` e `RuleMetrics` são retornados por meio do `GetDataQualityResult()` ao fornecer o `resultId` onde `AggregatedMetrics` e `RuleMetrics` incluem:

   **Métricas agregadas:**
   + Total de linhas processadas
   + Total de linhas processadas
   + Total de linhas com falha
   + Total de regras processadas
   + Total de regras aprovadas
   + Total de regras com falha  
![\[A captura de tela mostra as métricas agregadas e a estrutura de métricas de regras para as avaliações do AWS Glue Data Quality.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-aggregated-metrics.png)

   Além disso, no nível da regra, as seguintes métricas são fornecidas:

   **Métricas de regra:**
   + Linhas aprovadas
   + Linhas com falha
   + Linha ignorada
   + Total de linhas processadas

1. `AggregatedMetrics` é retornado como um quadro de dados adicional e o quadro de dados `RuleOutcomes` é aumentado para incluir `RuleMetrics`.

### Exemplos de implementação
<a name="data-quality-aggregated-metrics-example"></a>

O exemplo a seguir mostra como implementar métricas agregadas no 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()
```

### Exemplos de resultados
<a name="data-quality-aggregated-metrics-sample-results"></a>

Os resultados são retornados da seguinte forma:

```
{
    "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
}
```

As métricas agregadas são as seguintes:

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

# Compilador de regras de qualidade de dados
<a name="data-quality-rule-builder"></a>

Com o criador de regras da Data Quality Definition Language (DQDL), você pode criar regras de qualidade de dados para avaliar seus dados. Comece selecionando um tipo de regra e depois especifique os parâmetros no editor de regras. O editor de regras também mostra erros e avisos à medida que você criar regras. 

 O [guia do DQDL](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html) fornece documentação abrangente sobre como estruturar regras usando a sintaxe, os tipos e os exemplos de regras integradas do DQDL. 

## Nó Evaluate Data Quality
<a name="gs-data-quality-transform-expand-view"></a>

 Ao trabalhar com o nó de transformação **Evaluate Data Quality** e o compilador de regras DQDL, você pode expandir o espaço de trabalho. 
+  Para expandir a guia **Transformar** para preencher a tela inteira, escolha o ícone de expansão no canto superior direito do painel de detalhes do nó. 
+  Para expandir o editor de regras DQDL, escolha o ícone **<<** para expandir o editor de regras e fechar as guias **Tipos de regras** e **Esquema**.   
![\[A captura de tela mostra um diagrama de trabalho com o nó Avaliar qualidade de dados.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data_quality_example.png)

## Componentes
<a name="gs-data-quality-rule-builder-components"></a>

 Existem 26 tipos de regras que são incorporados ao AWS Glue Studio. Cada tipo de regra tem uma descrição e exemplos de como elas podem ser usadas. 

### Tipos de regras de qualidade de dados
<a name="gs-data-quality-rule-types"></a>

 O AWS Glue Studio fornece tipos de regras integrados para facilitar a criação de uma regra. Para obter mais informações sobre tipos de regras, consulte [Referência de tipos de regras DQDL](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-rule-types). 

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

 A guia **Schema** (Esquema) exibe os nomes das colunas e o tipo de dados do nó principal. Esquemas de vários nós são exibidos. Você pode visualizar o esquema de entrada, pesquisar pelo nome da coluna e inserir a coluna no editor de regras. 

![\[A captura de tela mostra o editor de regras com uma regra completa usando o tipo de regra Completeness.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data_quality_schema.png)


### Editor de regras
<a name="gs-dataquality-rule-editor"></a>

 O editor de regras é um editor de texto em que você pode escrever e editar regras. Se você selecionar um tipo de regra no compilador de regras DQDL, o tipo de regra será adicionado ao editor de regras. Em seguida, você pode especificar parâmetros, adicionar regras e editar regras conforme necessário, modificando o texto. O AWS Glue Studio valida as regras no editor de regras e exibe erros e avisos, se houver. 

 **Erros e advertências** 

 Se uma regra não seguir a sintaxe da regra DQDL, o editor de regras mostra vários indicadores visuais de que há um erro: 
+  O editor de regras exibe um ícone de erro e a linha com o erro em vermelho. 
+  O editor de regras exibe o número de erros ao lado do ícone vermelho de erro. 
+  Quando você escolhe a linha com o erro, uma descrição e o local (linha e coluna) do erro são exibidos na parte inferior do editor de regras. 

![\[A captura de tela mostra o editor de regras DQDL com indicadores de erro na linha 1 e na parte inferior do editor de regras com o número de erros. Abaixo está a descrição do erro.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data_quality_rule_editor_error.png)


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

 **Ações de qualidade de dados** 

 Por padrão, essa ação não é selecionada e o trabalho concluirá sua execução mesmo se as regras de qualidade de dados falharem. 

 Escolha entre as ações a seguir. Você pode usar ações para publicar resultados no CloudWatch ou interromper trabalhos com base em critérios específicos. As ações só estarão disponíveis depois que você criar uma regra. 
+  **Publicar resultados no CloudWatch**: ao executar um trabalho, adicione os resultados ao CloudWatch. 
+  **Reprovar o trabalho quando a qualidade dos dados for reprovada**: se as regras de qualidade de dados forem reprovadas, o trabalho também será reprovado como resultado. 

 **Saída da transformação Data quality** 
+  **Dados originais**: escolha a saída dos dados de entrada originais. Essa opção é ideal se você quiser interromper o trabalho quando problemas de qualidade forem detectados. 
+  **Métricas de qualidade de dados**: opte pela saída das regras configuradas e o status de aprovação ou reprovação correspondente. Essa opção é útil se você quiser fazer uma ação personalizada. 

 **Configurações de saída de qualidade de dados** 

 Defina a localização do resultado de qualidade de dados especificando o local do Amazon S3 como o destino de saída de qualidade de dados. 

# Configuração da detecção de anomalias em tarefas de ETL do AWS Glue
<a name="data-quality-configuring-anomaly-detection-etl-jobs"></a>

 Para começar com a detecção de anomalias no AWS Glue Studio, abra uma tarefa do AWS Glue Studio e clique em **Avaliar transformação do Data Quality**. 

 Ao habilitar esse recurso, o AWS Glue Data Quality analisará seus dados ao longo do tempo para detectar anomalias. Isso fornecerá estatísticas de dados e observações valiosas sobre seus dados, permitindo que você adote medidas sobre quaisquer anomalias identificadas. 

 Consulte a documentação de [detecção de anomalias](data-quality-anomaly-detection.md) para entender o funcionamento interno desse recurso. 

## Como habilitar a detecção de anomalias
<a name="data-quality-enabling-anomaly-detection"></a>

**Para habilitar a detecção de anomalias no AWS Glue Studio:**

1.  Escolha o nó do **Data Quality** em seu trabalho e, em seguida, escolha a guia **Detecção de anomalias**. Alterne o seletor para ativar a opção **Habilitar detecção de anomalias**.   
![\[A captura de tela mostra a opção “Habilitar detecção de anomalias” ativada. É possível ativar ou desativar isso.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-enable-anomaly-detection.png)

1.  Defina os dados para monitorar anomalias ao escolher **Adicionar analisador**. Há dois campos que você pode preencher: Estatísticas e Dados. 
   +  As **Estatísticas** são informações sobre a forma e outras propriedades dos dados. É possível escolher uma ou mais estatísticas por vez ou escolher **Todas as estatísticas**. As estatísticas incluem: completude, exclusividade, média, soma, desvio padrão, entropia, DistinctValuesCount e UniqueValueRatio. Consulte a documentação [Analisadores](dqdl.md#dqdl-analyzers) para obter mais detalhes. 
   +  Os **Dados** são as colunas no seu conjunto de dados. Você pode escolher todas as colunas ou colunas individuais.   
![\[A captura de tela mostra os campos “Estatísticas” e “Dados”. Você pode escolher quais estatísticas deseja aplicar ao seu conjunto de dados e em quais colunas.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-add-analyzer.png)

1.  Escolha **Adicionar escopo de detecção de anomalias** para salvar as alterações. Depois de adicionar analisadores, você poderá visualizá-los na seção **Escopo de detecção de anomalias**. 

    Você também pode usar o menu **Ações** para editar seus analisadores ou escolher a guia **Editor de conjunto de regras** e editar o analisador diretamente no bloco de notas do editor de conjunto de regras. Você verá os analisadores que salvou abaixo de todas as regras que criou. 

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

 Após a configuração do conjunto de regras e dos analisadores atualizados, o AWS Glue Data Quality vai monitorar continuamente os fluxos de dados recebidos. Dependendo de suas configurações, ele poderá sinalizar possíveis anomalias por meio de alertas ou interrupções de tarefa. Esse monitoramento proativo ajuda a garantir a qualidade e a integridade dos dados em todos os seus pipelines de dados. 

 Na próxima seção, você aprenderá a monitorar com eficácia as anomalias identificadas pelo sistema. Você também aprenderá a visualizar e analisar as estatísticas de dados coletadas pelo AWS Glue Data Quality. Além disso, você entenderá como fornecer feedback ao modelo de machine learning que alimenta o recurso de detecção de anomalias. Esse ciclo de feedback é crucial para melhorar a precisão do modelo e garantir que ele possa detectar com eficácia anomalias que se alinhem aos requisitos comerciais e aos padrões de dados específicos. 

# Visualização de pontuações de qualidade de dados e anomalias
<a name="data-quality-viewing-scores-and-anomalies"></a>

 Nesta seção, exploraremos o painel de qualidade de dados e as diferentes funcionalidades que ele disponibiliza. 

## Visualizar e compreender métricas e tendências de alto nível sobre qualidade de dados
<a name="data-quality-visualize-metrics-and-trends"></a>

 Quando sua tarefa for bem-sucedida, escolha a guia **Qualidade de dados** para ver as pontuações e anomalias da qualidade de dados. 

![\[A captura de tela mostra a guia Qualidade de dados selecionada e as pontuações e métricas.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-visualize-data-quality-metrics.png)


 Os componentes a seguir na guia Qualidade de dados disponibilizam informações úteis. 

1.  Escolha a guia **Qualidade de dados** para visualizar as métricas de qualidade dos dados. 

1.  Selecione um ID específico de execução de tarefa para ver a pontuação de qualidade de dados. 

1.  Esse painel mostra três informações importantes. Você pode escolher cada um deles para acessar as tabelas específicas a fim de visualizar anomalias, estatísticas de dados ou regras. 
   +  Pontuação de qualidade de dados quando as regras são configuradas. 
   +  Número de estatísticas coletadas por regras e analisadores. 
   +  O número total de anomalias detectadas. 

1.  Esse gráfico de tendências mostra como a qualidade dos dados está evoluindo ao longo do tempo. Você pode passar o mouse sobre a tendência e acessar um horário específico no qual as pontuações de qualidade dos dados se deterioraram. 

1.  As tendências de anomalias ao longo do tempo mostrarão o número de anomalias detectadas ao longo do tempo. 

1.  Guias: 
   +  A guia Regras é a guia padrão que mostra a lista de todas as regras e status. No caso de regras dinâmicas, as regras avaliadas são úteis para visualizar o valor efetivo com base no qual a regra foi avaliada. 
   +  A guia Estatísticas lista todas as estatísticas, permitindo que você visualize as métricas e as tendências ao longo do tempo. 
   +  A guia Anomalias mostra a lista das anomalias que foram detectadas. 

## Visualização de anomalias e treino do algoritmo de detecção de anomalias
<a name="data-quality-visualize-anomalies"></a>

![\[A captura de tela mostra a guia Anomalias com métricas.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-visualize-anomaly-detection.png)


 Explicações para a imagem acima: 

1.  Quando houver a detecção de anomalias, clique na anomalia ou selecione a guia Anomalias. 

1.  O AWS Glue Data Quality apresenta uma explicação detalhada da anomalia, o valor efetivo e a faixa prevista. 

1.  O AWS Glue Data Quality mostra uma linha de tendência. Ela tem o valor efetivo, uma tendência derivada com base nos valores efetivos (linha vermelha), o limite superior e o limite inferior 

1.  OAWS Glue Data Quality recomenda regras de qualidade de dados que podem ser usadas para capturar os padrões para o futuro. Você pode copiar todas as regras recomendadas e aplicá-las ao seu nó de qualidade de dados para capturar esses padrões de modo eficaz. 

1.  É possível fornecer entradas para o modelo de machine learning (ML) para excluir valores anômalos, garantindo que execuções futuras detectem anomalias com precisão. Se você não excluir as anomalias explicitamente, o AWS Glue Data Quality as considerará automaticamente como parte do modelo para previsões futuras. É importante observar que somente a execução mais recente refletirá as entradas do modelo que você fornece. Por exemplo, se você retornar e excluir pontos anômalos de algumas execuções anteriores, o modelo não refletirá essas alterações, a menos que você visualize e atualize as entradas do modelo na última execução. O modelo continuará usando as entradas fornecidas anteriormente até que você faça os ajustes necessários na execução mais recente. Ao gerenciar ativamente a exclusão de valores anômalos, você pode refinar a compreensão do modelo de ML sobre o que constitui uma anomalia em seus padrões e requisitos de dados específicos, levando a uma detecção mais precisa de anomalias ao longo do tempo. 

## Visualização de estatísticas de dados ao longo do tempo e oferta de informações de treinamento
<a name="data-quality-visualize-data-statistics-over-time"></a>

 Às vezes, talvez você queira visualizar estatísticas de dados ou perfis de dados e ver como eles estão progredindo ao longo do tempo. Para fazer isso, escolha **Estatísticas** ou abra a guia **Estatísticas**. Em seguida, você poderá ver as estatísticas de dados mais recentes coletadas pelo AWS Glue Data Quality. 

![\[A captura de tela mostra a guia Estatísticas com estatísticas do conjunto de dados e da coluna.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-visualize-data-statistics-over-time.png)


 Clicar em **Exibir tendências** mostra como cada uma das estatísticas está progredindo ao longo do tempo. 

![\[A captura de tela mostra a guia Estatísticas com estatísticas do conjunto de dados e da coluna.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-view-trends-over-time.png)


1.  Você pode selecionar a estatística para uma coluna especificada. 

1.  Você pode ver como as tendências estão progredindo. 

1.  Você pode selecionar valores anômalos e optar por excluí-los ou incluí-los. Ao fornecer esse feedback, o algoritmo excluirá ou incluirá os pontos de dados anômalos identificados e retreinará o modelo. Esse processo de reciclagem garante a detecção precisa de anomalias no futuro, conforme o modelo aprende com o feedback que você forneceu sobre quais valores devem ser considerados anômalos ou não. 

    Por meio desse ciclo de feedback, você tem a capacidade de refinar a compreensão do algoritmo sobre o que constitui uma anomalia para seus padrões de dados e requisitos comerciais específicos. Ao excluir valores que não devem ser sinalizados como anomalias ou incluir valores que não foram devidamente capturados, o modelo retreinado se tornará melhor na diferenciação entre pontos de dados esperados e verdadeiramente anômalos. 

# Qualidade de dados para trabalhos de ETL em cadernos do AWS Glue Studio
<a name="data-quality-gs-studio-notebooks"></a>

Neste tutorial, você aprende a usar o AWS Glue Data Quality para extração, transformação e carregamento (ETL) em cadernos do AWS Glue Studio. 

Você pode usar cadernos no AWS Glue Studio para editar scripts de trabalhos e visualizar a saída sem precisar executar um trabalho inteiro. Você também pode adicionar markdown e salvar cadernos como arquivos do `.ipynb` e scripts de trabalho. Observe que é possível iniciar um caderno sem instalar software localmente nem gerenciar servidores. Quando estiver satisfeito com seu código, você pode usar o AWS Glue Studio para converter facilmente seu caderno em um trabalho do AWS Glue. 

O conjunto de dados que você usa neste exemplo consiste nos dados de pagamento de um provedor da Medicare obtidos baixando dois conjuntos de dados do *Data.CMS.gov*: "Inpatient Prospective Payment System Provider Summary for the Top 100 Diagnosis-Related Groups - FY2011" e "Inpatient Charge Data FY 2011". 

Depois de fazer download dos dados, nós os modificamos para apresentar alguns registros errados ao final do arquivo. Esse arquivo modificado está localizado em um bucket público do Amazon S3 em `s3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv`. 

## Pré-requisitos
<a name="w2aac49c54c14"></a>
+  AWS GlueFunção do com a permissão do Amazon S3 para gravar no seu bucket Amazon S3 de destino 
+  Um novo caderno (consulte [Getting started with notebooks in AWS Glue Studio](https://docs.aws.amazon.com/glue/latest/ug/notebook-getting-started.html)) 

## Criar um trabalho de ETL no AWS Glue Studio
<a name="data-quality-notebooks-example"></a>

**Para criar um trabalho de ETL**

1.  Altere a versão da sessão para AWS Glue 3.0. 

    Para fazer isso, remova todas as células de código padronizado com a seguinte mágica e execute a célula. Observe que esse código padronizado é fornecido automaticamente na primeira célula quando um novo caderno é criado.

   ```
   %glue_version 3.0
   ```

1.  Copie código a seguir no e execute na célula. 

   ```
   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.  Na próxima célula, importe a classe `EvaluateDataQuality` que avalia AWS Glue Data Quality. 

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

1. Na próxima célula, leia os dados de origem usando o arquivo .csv que está armazenado no bucket público do 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.  Converta os dados em um AWS Glue DynamicFrame. 

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

1.  Crie o conjunto de regras usando a Data Quality Definition Language (DQDL).

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

1.  Valide o conjunto de dados em relação ao conjunto de regras. 

   ```
   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.  Reveja os resultados.

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

    Resultado: 

   ```
   --------------------------------------+-------+-----------------------------------------------------+-------------------------------------------+
   |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.  Filtre as linhas aprovadas e revise as linhas com falha nos resultados em nível de linha do Data Quality. 

   ```
   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
   ```

    Resultado: 

   ```
   +----------------------------------------+-----------+-------------------------------------+--------------------------+-------------+--------------+-----------------+------------------------------------+------------------+-------------------------+------------------------+-------------------------+--------------------------+----------------------------------------+----------------------------+---------------------------+
   |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
   ```

    Observe que o AWS Glue Data Quality adicionou quatro novas colunas (DataQualityRulesPass, DataQualityRulesFail, DataQualityRulesSkip e DataQualityEvaluationResult). Isso indica os registros aprovados, os registros que falharam, as regras ignoradas para a avaliação em nível de linha e os resultados gerais em nível de linha. 

1.  Grave a saída em um bucket do Amazon S3 para analisar os dados e visualizar os resultados.

   ```
   #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")
   ```

# Referência de Data Quality Definition Language (DQDL)
<a name="dqdl"></a>

Data Quality Definition Language (DQDL) é uma linguagem específica de domínio que você usa para definir regras para o AWS Glue Data Quality.

Este guia apresenta os principais conceitos de DQDL para ajudar você a entender a linguagem. Ele também fornece uma referência para tipos de regras DQDL com sintaxe e exemplos. Antes de usar este guia, recomendamos que você se familiarize com o AWS Glue Data Quality. Para obter mais informações, consulte [AWS Glue Data Quality](glue-data-quality.md). 

**nota**  
 As regras dinâmicas são aceitas somente em ETL do AWS Glue. 

**Contents**
+ [Sintaxe DQDL](#dqdl-syntax)
  + [Estrutura da regra](#dqdl-syntax-rule-structure)
  + [Regras compostas](#dqdl-syntax-rule-composition)
    + [Como as regras compostas funcionam](#dqdl-syntax-composite-rules)
  + [Expressões](#dqdl-syntax-rule-expressions)
    + [Palavras-chave para NULL, EMPTY e WHITESPACES\$1ONLY](#dqdl-keywords-null-empty-whitespaces_only)
    + [Filtragem com a cláusula Where](#dqdl-filtering-data-in-dqdl)
  + [Constantes](#dqdl-constants)
  + [Rótulos](#dqdl-labels)
    + [Sintaxe para rótulos DQDL](#dqdl-labels-syntax)
      + [Restrições do rótulo](#dqdl-labels-constraints)
    + [Recuperar rótulos DQDL](#dqdl-labels-retrieving)
      + [Resultados da regra](#dqdl-labels-rule-outcomes)
      + [Resultados por linha](#dqdl-labels-row-level-results)
      + [Resposta da API](#dqdl-labels-api-response)
  + [Regras dinâmicas](#dqdl-dynamic-rules)
  + [Analisadores](#dqdl-analyzers)
  + [Comentários](#dqdl-syntax-comments)
+ [Referência de tipos de regra 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)
  + [Completeness](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)
  + [Entropia](dqdl-rule-types-Entropy.md)
  + [IsComplete](dqdl-rule-types-IsComplete.md)
  + [IsPrimaryKey](dqdl-rule-types-IsPrimaryKey.md)
  + [IsUnique](dqdl-rule-types-IsUnique.md)
  + [Média](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)
  + [Sum](dqdl-rule-types-Sum.md)
  + [SchemaMatch](dqdl-rule-types-SchemaMatch.md)
  + [Exclusividade](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)

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

Um documento DQDL diferencia maiúsculas de minúsculas e contém um *conjunto de regras* que agrupa regras individuais de qualidade de dados. Para estruturar um conjunto de regras, você deve criar uma lista denominada `Rules` (em maiúsculas), delimitada por colchetes. A lista deve conter uma ou mais regras DQDL separadas por vírgula, como no exemplo a seguir.

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

### Estrutura da regra
<a name="dqdl-syntax-rule-structure"></a>

A estrutura de uma regra DQDL depende do tipo de regra. No entanto, as regras DQDL geralmente se encaixam no formato a seguir.

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

`RuleType` é o nome com distinção entre maiúsculas e minúsculas do tipo de regra que você quer configurar. Por exemplo, `IsComplete`, `IsUnique` ou `CustomSql`. Os parâmetros da regra diferem para cada tipo de regra. Para obter uma referência completa dos tipos de regras DQDL e seus parâmetros, consulte [Referência de tipos de regra DQDL](dqdl-rule-types.md).

### Regras compostas
<a name="dqdl-syntax-rule-composition"></a>

 A DQDL é compatível com os seguintes operadores lógicos que você pode usar para combinar regras. Essas regras são chamadas de regras compostas. 

**and**  
O operador lógico `and` resultará em `true` se, e somente se, as regras que ele conecta forem `true`. Caso contrário, a regra combinada resultará em `false`. Cada regra que você conecta com o operador `and` deve estar entre parênteses.  
O exemplo a seguir usa o operador `and` para combinar duas regras DQDL.  

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

**or**  
O operador lógico `or` resultará em `true` se, e somente se, uma ou mais regras que ele conecta forem `true`. Cada regra que você conecta com o operador `or` deve estar entre parênteses.  
O exemplo a seguir usa o operador `or` para combinar duas regras DQDL.  

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

Você pode usar o mesmo operador para conectar várias regras, portanto, a combinação de regras a seguir é permitida.

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

Você pode combinar os operadores lógicos em uma única expressão. Por exemplo:

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

Você também pode criar regras mais complexas e aninhadas.

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

#### Como as regras compostas funcionam
<a name="dqdl-syntax-composite-rules"></a>

 Por padrão, as regras compostas são avaliadas como regras individuais em todo o conjunto de dados ou tabela e, em seguida, os resultados são combinados. Em outras palavras, a coluna inteira é avaliada primeiro e, em seguida, o operador é aplicado. Esse comportamento padrão é explicado abaixo com um exemplo: 

```
# Dataset

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

# Overall outcome

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

 No exemplo acima, o AWS Glue Data Quality avalia primeiro `(ColumnValues "myCol1" > 1)`, o que resultará em uma falha. Em seguida, ele avaliará `(ColumnValues "myCol2" > 2)`, que também falhará. A combinação de ambos os resultados será anotada como FALHA. 

 No entanto, se você preferir um comportamento semelhante ao SQL, em que a linha inteira deve ser avaliada, é necessário definir explicitamente o parâmetro `ruleEvaluation.scope` conforme mostrado em `additionalOptions` no trecho de código abaixo. 

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

 No Catálogo de Dados do AWS Glue, é possível configurar facilmente essa opção na interface do usuário, conforme demonstrado abaixo. 

![\[A captura de tela mostra uma janela de configurações de regra composta na qual você pode escolher a configuração de avaliação da regra entre linha e coluna. Se você escolher Linha, as regras compostas se comportarão como uma única regra avaliando a linha inteira. Se você escolher Coluna, as regras compostas avaliarão cada regra individualmente em todo o conjunto de dados e combinarão os resultados.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/composite-rule-settings.png)


 Depois de definidas, as regras compostas se comportarão como uma única regra avaliando a linha inteira. O exemplo a seguir ilustra esse comportamento. 

```
# 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                     |
+------+------+------------------------------------------------------------+---------------------------+
```

 Algumas regras não podem ser aceitas nesse recurso porque seu resultado geral depende de limites ou proporções. Elas estão listadas abaixo. 

 Regras baseadas em índices: 
+  Completeness 
+  DatasetMatch 
+  ReferentialIntegrity 
+  Exclusividade 

 Regras dependentes de limites: 

 Quando as regras a seguir incluem limites, elas não são aceitas. No entanto, as regras que não envolvem `with threshold` permanecem válidas. 
+  ColumnDataType 
+  ColumnValues 
+  CustomSQL 

### Expressões
<a name="dqdl-syntax-rule-expressions"></a>

Se um tipo de regra não produzir uma resposta booliana, você deverá fornecer uma expressão como parâmetro para criar uma resposta booliana. Por exemplo, a regra a seguir verifica a média de todos os valores em uma coluna em relação a uma expressão para retornar um resultado verdadeiro ou falso.

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

Alguns tipos de regras, como `IsUnique` e `IsComplete` já retornam uma resposta booleana.

A tabela a seguir lista as expressões que você pode usar nas regras DQDL. 


**Expressões DQDL compatíveis**  

| Expressão | Descrição | Exemplo | 
| --- | --- | --- | 
| = x | Será resolvido como true se a resposta do tipo de regra for igual a x. |  <pre>Completeness "colA" = "1.0",<br />ColumnValues "colA" = "2022-06-30"</pre>  | 
|  \$1=x  | x será resolvido como verdadeiro se a resposta do tipo de regra for diferente de x. |  <pre>ColumnValues "colA" != "a",<br />ColumnValues "colA" != "2022-06-30"</pre>  | 
| > x | Será resolvido como true se a resposta do tipo de regra for maior que x. |  <pre>ColumnValues "colA" > 10</pre>  | 
| < x | Será resolvido como true se a resposta do tipo de regra for menor que x. |  <pre>ColumnValues "colA" < 1000,<br />ColumnValues "colA" < "2022-06-30"</pre>  | 
| >= x | Será resolvido como true se a resposta do tipo de regra for maior que ou igual a x. |  <pre>ColumnValues "colA" >= 10</pre>  | 
| <= x | Será resolvido como true se a resposta do tipo de regra for menor que ou igual a x. |  <pre>ColumnValues "colA" <= 1000</pre>  | 
| between x and y | Será resolvido como true se a resposta do tipo de regra estiver em um intervalo especificado (exclusivo). Use esse tipo de expressão apenas para tipos numéricos e de data. |  <pre>Mean "colA" between 8 and 100,<br />ColumnValues "colA" between "2022-05-31" and "2022-06-30"</pre>  | 
|  not between x and y  |  Será resolvido como verdadeiro se a resposta do tipo de regra não estiver em um intervalo especificado (inclusive). Você só deve usar esse tipo de expressão para tipos numéricos e dados.  |  <pre>ColumnValues "colA" not between "2022-05-31" and "2022-06-30"</pre>  | 
| in [a, b, c,... ] | Será resolvido para true se a resposta do tipo de regra está no conjunto especificado. |  <pre>ColumnValues "colA" in [ 1, 2, 3 ],<br />ColumnValues "colA" in [ "a", "b", "c" ]</pre>  | 
| not in [a, b, c, ...] | Será resolvido para true se a resposta do tipo de regra não estiver no conjunto especificado. |  <pre>ColumnValues "colA" not in [ 1, 2, 3 ],<br />ColumnValues "colA" not in [ "a", "b", "c" ]</pre>  | 
| matches /ab\$1c/i | Será resolvido como true se a resposta do tipo de regra corresponder a uma expressão regular. |  <pre>ColumnValues "colA" matches "[a-zA-Z]*"</pre>  | 
| not matches /ab\$1c/i | Será resolvido como true se a resposta do tipo de regra não corresponder a uma expressão regular. |  <pre>ColumnValues "colA" not matches "[a-zA-Z]*"</pre>  | 
| now() | Só funciona com o tipo de regra ColumnValues para criar uma expressão de data. |  <pre>ColumnValues "load_date" > (now() - 3 days)</pre>  | 
| matches/in […]/not matches/not in [...] with threshold | Especifica a porcentagem de valores que correspondem às condições da regra. Funciona somente com os tipos de regras ColumnValues, ColumnDataType e 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>  | 

#### Palavras-chave para NULL, EMPTY e WHITESPACES\$1ONLY
<a name="dqdl-keywords-null-empty-whitespaces_only"></a>

 Se desejar validar se uma coluna de string tem uma string nula, vazia ou apenas com espaços em branco, você pode usar as seguintes palavras-chave: 
+  NULL/null: Essa palavra-chave é resolvida como verdadeira para um valor `null` em uma coluna de string. 

   `ColumnValues "colA" != NULL with threshold > 0.5` retornaria verdadeiro se mais de 50% dos seus dados não tivessem valores nulos. 

   `(ColumnValues "colA" = NULL) or (ColumnLength "colA" > 5)` retornaria verdadeiro para todas as linhas que têm um valor nulo ou comprimento > 5. *Observe que isso exigirá o uso da opção "compositeRuleEvaluation.method" = "ROW".* 
+  EMPTY/empty: essa palavra-chave é resolvida como verdadeira para um valor de string vazio ("") em uma coluna de string. Alguns formatos de dados transformam nulos em uma coluna de string para strings vazias. Essa palavra-chave ajuda a filtrar strings vazias em seus dados. 

   `(ColumnValues "colA" = EMPTY) or (ColumnValues "colA" in ["a", "b"])` retornaria verdadeiro se uma linha estivesse vazia, "a" ou "b". *Observe que isso exige o uso da opção "compositeRuleEvaluation.method" = "ROW".* 
+  WHITESPACES\$1ONLY/whitespaces\$1only: essa palavra-chave é resolvida como verdadeira para uma string somente com espaços em branco (" ") em uma coluna de string. 

   `ColumnValues "colA" not in ["a", "b", WHITESPACES_ONLY]` retornaria verdadeiro se uma linha não fosse "a" ou "b" nem apenas espaços em branco. 

   Regras compatíveis: 
  +  [ColumnValues](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-rule-types-ColumnValues) 

 Para uma expressão numérica ou baseada em data, se você quiser validar se uma coluna tem um valor nulo, poderá usar as palavras-chave a seguir. 
+  NULL/null: Essa palavra-chave é resolvida como verdadeira para um valor nulo em uma coluna de string. 

   `ColumnValues "colA" in [NULL, "2023-01-01"]` retornaria verdadeiro se as datas em sua coluna fossem iguais a `2023-01-01` ou nulas. 

   `(ColumnValues "colA" = NULL) or (ColumnValues "colA" between 1 and 9)` retornaria verdadeiro para todas as linhas que têm um valor nulo ou valores entre 1 e 9. *Observe que isso exigirá o uso da opção "compositeRuleEvaluation.method" = "ROW".* 

   Regras compatíveis: 
  +  [ColumnValues](https://docs.aws.amazon.com/glue/latest/dg/dqdl.html#dqdl-rule-types-ColumnValues) 

#### Filtragem com a cláusula Where
<a name="dqdl-filtering-data-in-dqdl"></a>

**nota**  
 A cláusula Where só é compatível com o AWS Glue 4.0. 

 Você pode filtrar seus dados ao criar regras. Isso é útil quando você quiser aplicar regras condicionais. 

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

 É necessário especificar o filtro com a palavra-chave `where`, seguida por uma instrução válida do SparkSQL entre aspas `("")`. 

 Se você quiser adicionar a cláusula where a uma regra com um limite, será necessário especificar a cláusula where antes da condição de limite. 

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

 Com essa sintaxe, você pode escrever regras como as seguintes. 

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

 Vamos validar se a instrução do SparkSQL fornecida é válida. Se for inválida, a avaliação da regra falhará e lançaremos o `IllegalArgumentException` com o seguinte formato: 

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

 **Comportamento da cláusula where quando a identificação do registro de erro no nível de linha estiver ativada** 

 Com o AWS Glue Data Quality, você pode identificar registros específicos que falharam. Ao aplicar uma cláusula where às regras compatíveis com resultados no nível de linha, rotularemos como `Passed` as linhas que forem filtradas pela cláusula where. 

 Se você preferir rotular separadamente as linhas filtradas como `SKIPPED`, defina o seguinte `additionalOptions` para a tarefa de 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"
        }
      """
    )
  )
}
```

 Como exemplo, consulte a regra e o quadro de dados a seguir: 

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


| id | att1 | att2 | Resultados no nível de linha (padrão) | Resultados no nível de linha (opção ignorada) | Comentários | 
| --- | --- | --- | --- | --- | --- | 
| 1 | a | f | PASSED | PASSED |  | 
| 2 | b | d | PASSED | SKIPPED | A linha é filtrada, pois att1 não é "a" | 
| 3 | a | nulo | FAILED | FAILED |  | 
| 4 | a | f | PASSED | PASSED |  | 
| 5 | b | nulo | PASSED | SKIPPED | A linha é filtrada, pois att1 não é "a" | 
| 6 | a | f | PASSED | PASSED |  | 

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

 No DQDL, você pode definir valores constantes e referenciá-los em todo o script. Isso ajuda a evitar problemas relacionados aos limites de tamanho da consulta, por exemplo, ao trabalhar com instruções SQL grandes que podem exceder os limites permitidos. Ao atribuir esses valores a constantes, você pode simplificar seu DQDL e evitar atingir esses limites. 

 O exemplo a seguir mostra como definir e usar uma constante: 

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

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

 Neste exemplo, a consulta SQL é atribuída à constante `mySql`, que é então referenciada na regra usando o prefixo `$`. 

### Rótulos
<a name="dqdl-labels"></a>

 Os rótulos fornecem uma maneira eficaz de organizar e analisar os resultados de qualidade dos dados. Você pode consultar os resultados por rótulos específicos para identificar regras com falhas em categorias específicas, contar os resultados das regras por equipe ou domínio e criar relatórios focados para diferentes partes interessadas. 

 Por exemplo, você pode aplicar todas as regras que dizem respeito à equipe financeira com um rótulo `"team=finance"` e gerar um relatório personalizado para mostrar métricas de qualidade específicas para a equipe financeira. Você pode rotular regras de alta prioridade como `"criticality=high"` para priorizar os esforços de remediação. Os rótulos podem ser criados como parte do DQDL. Você pode consultar os rótulos como parte dos resultados das regras, resultados em nível de linha e respostas da API, facilitando a integração com seus fluxos de trabalho de monitoramento e geração de relatórios existentes. 

**nota**  
 Os rótulos só estão disponíveis no AWS Glue ETL e não estão disponíveis no Data Quality baseado no Catálogo de Dados do AWS Glue. 

#### Sintaxe para rótulos DQDL
<a name="dqdl-labels-syntax"></a>

 O DQDL oferece suporte a rótulos padrão e específicos de regras. Os rótulos padrão são definidos no nível do conjunto de regras e se aplicam automaticamente a todas as regras dele. As regras individuais também podem ter seus próprios rótulos e, como os rótulos são implementados como pares de chave-valor, os rótulos específicos da regra podem substituir os rótulos padrão ao usar a mesma chave. 

 O exemplo a seguir mostra como usar rótulos padrão e específicos para regras: 

```
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]
]
```

##### Restrições do rótulo
<a name="dqdl-labels-constraints"></a>

 Os rótulos têm as seguintes restrições: 
+ No máximo 10 rótulos por regra DQDL.
+ Os rótulos são especificados como uma lista de pares de chave-valor.
+ A chave e o valor do rótulo diferenciam maiúsculas de minúsculas.
+ O comprimento máximo da chave do rótulo é de 128 caracteres. A chave do rótulo não pode estar vazia nem ser nula.
+ O comprimento máximo do valor do rótulo é de 256 caracteres. O valor do rótulo pode estar vazio ou ser nulo.

#### Recuperar rótulos DQDL
<a name="dqdl-labels-retrieving"></a>

 Você pode recuperar rótulos DQDL de resultados de regras, resultados em nível de linha e respostas de API. 

##### Resultados da regra
<a name="dqdl-labels-rule-outcomes"></a>

 Os rótulos DQDL estão sempre visíveis nos resultados das regras. Nenhuma configuração adicional é necessária para habilitá-los. 

##### Resultados por linha
<a name="dqdl-labels-row-level-results"></a>

 Os rótulos DQDL são desabilitados por padrão nos resultados em nível de linha, mas podem ser habilitados usando as `AdditionalOptions` no `EvaluateDataQuality`. 

 O exemplo a seguir mostra como habilitar rótulos em resultados por linha: 

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

 Quando habilitado, o quadro de dados de resultados em nível de linha inclui rótulos para cada regra nas colunas `DataQualityRulesPass`, `DataQualityRulesFail` e `DataQualityRulesSkip`. 

##### Resposta da API
<a name="dqdl-labels-api-response"></a>

 Os rótulos DQDL estão sempre visíveis nas respostas da API em um novo campo `Labels` no objeto `RuleResults`. 

 O exemplo a seguir mostra os rótulos em uma resposta da 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"
            }
        }
    ]
}
```

### Regras dinâmicas
<a name="dqdl-dynamic-rules"></a>

**nota**  
As regras dinâmicas são compatíveis somente no ETL do AWS Glue e não são compatíveis no Catálogo de Dados do AWS Glue.

 Agora é possível criar regras dinâmicas para comparar as métricas atuais produzidas por suas regras com seus valores históricos. Essas comparações históricas são habilitadas ao usar o operador `last()` em expressões. Por exemplo, a regra `RowCount > last()` terá êxito quando o número de linhas na execução atual for maior do que a contagem de linhas anterior mais recente para o mesmo conjunto de dados. `last()` usa um argumento opcional de número natural que descreve quantas métricas anteriores devem ser consideradas; `last(k)` em que `k >= 1` fará referência às últimas `k` métricas. 
+ Se nenhum ponto de dados estiver disponível, `last(k)` retornará o valor padrão 0,0.
+ Se menos de `k` métricas estiverem disponíveis, `last(k)` retornará todas as métricas anteriores.

 Para formar expressões válidas, use `last(k)`, em que `k > 1` requer uma função de agregação para reduzir vários resultados históricos a um único número. Por exemplo, `RowCount > avg(last(5))` verificará se a contagem de linhas do conjunto de dados atual é estritamente maior do que a média das últimas cinco contagens de linhas do mesmo conjunto de dados. `RowCount > last(5)` produzirá um erro porque a contagem de linhas do conjunto de dados atual não pode ser comparada de forma significativa a uma lista. 

 Funções de agregação compatíveis: 
+ `avg`
+ `median`
+ `max`
+ `min`
+ `sum`
+ `std` (desvio padrão)
+ `abs` (valor absoluto)
+  `index(last(k), i)` permitirá selecionar o `i` valor mais recente entre os últimos `k`. `i` é indexado em zero, então `index(last(3), 0)` retornará o ponto de dados mais recente e `index(last(3), 3)` resultará em um erro, pois há apenas três pontos de dados e tentamos indexar o 4.º mais recente. 

 **Exemplos de expressões** 

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

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

 A maioria dos tipos de regras com condições ou limites numéricos é compatível com as regras dinâmicas. Consulte a tabela fornecida, [Analisadores e regras](#dqdl-analyzers-table), para determinar se as regras dinâmicas são compatíveis com seu tipo de regra. 

 **Exclusão de estatísticas das regras dinâmicas** 

 Às vezes, você precisará excluir estatísticas de dados dos cálculos das regras dinâmicas. Digamos que você tenha feito um carregamento de dados históricos e não queira que isso afete as médias. Para fazer isso, abra o trabalho no ETL do AWS Glue e escolha a guia **Qualidade de dados**, em seguida escolha **Estatísticas** e selecione as estatísticas que você deseja excluir. Você poderá ver um gráfico de tendências com uma tabela de estatísticas. Selecione os valores que você deseja excluir e escolha **Excluir estatísticas**. Agora, as estatísticas excluídas não serão consideradas nos cálculos dinâmicos das regras. 

![\[A captura de tela mostra a opção de excluir ou incluir estatísticas no menu suspenso após a seleção de uma estatística.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-excluding-statistics-from-dynamic-rules.png)


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

**nota**  
 Não há suporte a analisadores no Catálogo de Dados do AWS Glue. 

 As regras de DQDL usam funções chamadas *analisadores* para coletar informações sobre seus dados. Essas informações são empregadas por uma expressão booleana da regra para determinar se a regra terá êxito ou não. Por exemplo, a regra RowCount `RowCount > 5 ` usará um analisador de contagem de linhas para descobrir o número de linhas em seu conjunto de dados e comparar essa contagem com a expressão `> 5` para verificar se existem mais de cinco linhas no conjunto de dados atual. 

 Às vezes, em vez de criar regras, recomendamos criar analisadores e depois fazer com que eles gerem estatísticas que possam ser usadas para detectar anomalias. Para esses casos, será necessário criar analisadores. Os analisadores diferem das regras nas seguintes maneiras: 


| Característica | Analisadores | Regras | 
| --- | --- | --- | 
| Parte do conjunto de regras | Sim | Sim | 
| Gera estatísticas | Sim | Sim | 
| Gera observações | Sim | Sim | 
| Pode avaliar e afirmar uma condição | Não | Sim | 
| É possível configurar ações, como interromper os trabalhos em caso de falha ou continuar o processamento do trabalho | Não | Sim | 

 Os analisadores podem existir de forma independente, sem a necessidade de regras, permitindo a configuração rápida e a construção progressiva de regras de qualidade de dados. 

 Alguns tipos de regras podem ser inseridos no bloco de `Analyzers` do seu conjunto de regras para executar as regras necessárias para os analisadores e coletar informações sem aplicar verificações para nenhuma condição. Alguns analisadores não estão associados a regras e só podem ser inseridos no bloco de `Analyzers`. A tabela a seguir indica se cada item é compatível como uma regra ou como um analisador independente, junto com detalhes adicionais para cada tipo de regra. 

 **Exemplo de conjunto de regras com o analisador** 

 O seguinte conjunto de regras usa: 
+ uma regra dinâmica para verificar se um conjunto de dados está crescendo acima da média final nas últimas três execuções de trabalho;
+ um analisador de `DistinctValuesCount` para registrar o número de valores distintos na coluna `Name` do conjunto de dados;
+ um analisador de `ColumnLength` para rastrear o tamanho mínimo e máximo de `Name` ao longo do tempo.

 Os resultados das métricas do analisador podem ser visualizados na guia Data Quality da execução do trabalho. 

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

 O AWS Glue Data Quality é compatível com os seguintes analisadores. 


| Nome do analisador | Funcionalidade | 
| --- | --- | 
| RowCount | Calcula as quantidades de linhas para um conjunto de dados | 
| Completeness | Calcula a porcentagem de completude de uma coluna | 
| Uniqueness | Calcula a porcentagem de exclusividade de uma coluna | 
| Mean | Calcula a média de uma coluna numérica | 
| Sum | Calcula a soma de uma coluna numérica | 
| StandardDeviation | Calcula o desvio padrão de uma coluna numérica | 
| Entropy | Calcula a entropia de uma coluna numérica | 
| DistinctValuesCount | Calcular o número de valores distintos em uma coluna | 
| UniqueValueRatio | Calcula a proporção de valores exclusivos em uma coluna | 
| ColumnCount | Calcula o número de colunas em um conjunto de dados | 
| ColumnLength | Calcula o comprimento de uma coluna | 
| ColumnValues | Calcula o mínimo e o máximo para colunas numéricas Calcula o mínimo e o máximo de ColumnLength para colunas não numéricas | 
| ColumnCorrelation | Calcula as correlações de colunas para colunas específicas | 
| CustomSql | Calcula as estatísticas retornadas pelo CustomSQL | 
| AllStatistics | Calcula as seguintes estatísticas: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/dqdl.html)  | 

### Comentários
<a name="dqdl-syntax-comments"></a>

É possível usar o caractere "\$1" para adicionar um comentário ao seu documento DQDL. Qualquer coisa após o caractere "\$1" e até o final da linha é ignorada pelo DQDL.

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

# Referência de tipos de regra DQDL
<a name="dqdl-rule-types"></a>

Esta seção fornece uma referência para cada tipo de regra compatível com o AWS Glue Data Quality.

**nota**  
Atualmente, o DQDL não é compatível com dados de colunas aninhadas ou do tipo lista.
Os valores entre colchetes na tabela abaixo serão substituídos pelas informações fornecidas nos argumentos da regra.
As regras normalmente exigem um argumento adicional para expressão.


| Ruletype | Descrição | Argumentos | Métricas reportadas | Compatível como regra? | Compatível como analisador? | Retorna resultados em nível de linha? | Compatível com regras dinâmicas? | Gera observações | Compatível com sintaxe da cláusula Where? | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AggregateMatch | Verifica se há correspondência entre dois conjuntos de dados comparando as métricas resumidas, como o valor total das vendas. Útil para instituições financeiras compararem se todos os dados são ingeridos dos sistemas de origem. | Uma ou mais agregações |  Quando os nomes da primeira e da segunda coluna de agregação coincidem: `Column.[Column].AggregateMatch` Quando os nomes da primeira e da segunda coluna de agregação divergem: `Column.[Column1,Column2].AggregateMatch`  | Sim | Não | Não | Não | Não | Não | 
| AllStatistics | Analisador independente para coletar diversas métricas para a coluna fornecida em um conjunto de dados. | Um único nome de coluna |  Para as colunas de todos os tipos: `Dataset.*.RowCount` `Column.[Column].Completeness` `Column.[Column].Uniqueness` Métricas adicionais para colunas com valor de string: `ColumnLength metrics` Métricas adicionais para colunas com valor numérico: `ColumnValues metrics`  | Não | Sim | Não | Não | Não | Não | 
| ColumnCorrelation | Verifica em que medida duas colunas estão correlacionadas. | Exatamente dois nomes de coluna | Multicolumn.[Column1,Column2].ColumnCorrelation | Sim | Sim | Não | Sim | Não | Sim | 
| ColumnCount | Verifica se alguma coluna foi descartada. | Nenhum | Dataset.\$1.ColumnCount | Sim | Sim | Não | Sim | Sim | Não | 
| ColumnDataType | Verifica se uma coluna é compatível com um tipo de dados. | Exatamente um nome de coluna | Column.[Column].ColumnDataType.Compliance | Sim | Não | Não | Sim, na expressão de limite em nível de linha | Não | Sim | 
| ColumnExists | Verifica se existem colunas em um conjunto de dados. Isso permite que os clientes criem plataformas de dados de autoatendimento para garantir que determinadas colunas sejam disponibilizadas. | Exatamente um nome de coluna | N/D | Sim | Não | Não | Não | Não | Não | 
| ColumnLength | Verifica se o comprimento dos dados é consistente. | Exatamente um nome de coluna |  `Column.[Column].MaximumLength` `Column.[Column].MinimumLength` Métrica adicional quando o limite de nível de linha é fornecido: `Column.[Column].ColumnValues.Compliance`  | Sim | Sim | Sim, quando o limite de nível de linha é fornecido | Não | Sim. Gera apenas observações ao analisar o comprimento mínimo e máximo | Sim | 
| ColumnNamesMatchPattern | Verifica se os nomes das colunas correspondem a padrões definidos. Útil para equipes de governança imporem consistência nos nomes das colunas.  | Um regex para nomes de colunas | Dataset.\$1.ColumnNamesPatternMatchRatio | Sim | Não | Não | Não | Não | Não | 
| ColumnValues | Verifica se os dados são consistentes de acordo com os valores definidos. Essa regra é compatível com expressões regulares. | Exatamente um nome de coluna |  `Column.[Column].Maximum` `Column.[Column].Minimum` Métrica adicional quando o limite de nível de linha é fornecido: `Column.[Column].ColumnValues.Compliance`  | Sim | Sim | Sim, quando o limite de nível de linha é fornecido | Não | Sim. Gera apenas observações ao analisar valores mínimos e máximos | Sim | 
| Completeness | Verifica se há espaços em branco ou nulos nos dados. | Exatamente um nome de coluna | `Column.[Column].Completeness` | Sim | Sim | Sim | Sim | Sim | Sim | 
| CustomSql |  Os clientes podem implementar praticamente qualquer tipo de verificação de qualidade de dados em SQL. |  Uma instrução SQL (Opcional) Um limite em nível de linha  |  `Dataset.*.CustomSQL` Métrica adicional quando o limite de nível de linha é fornecido: `Dataset.*.CustomSQL.Compliance`  | Sim | Não | Sim, quando o limite de nível de linha é fornecido | Sim | Não | Não | 
| DataFreshness | Verifica se os dados estão atualizados. | Exatamente um nome de coluna | Column.[Column].DataFreshness.Compliance | Sim | Não | Sim | Não | Não | Sim | 
| DatasetMatch | Compara dois conjuntos de dados e identifica se eles estão sincronizados. |  Nome de um conjunto de dados de referência Um mapeamento de colunas (Opcional) Colunas para verificar as correspondências  | Dataset.[ReferenceDatasetAlias].DatasetMatch | Sim | Não | Sim | Sim | Não | Não | 
| DistinctValuesCount | Verifica a existência de valores duplicados. | Exatamente um nome de coluna | Column.[Column].DistinctValuesCount | Sim | Sim | Sim | Sim | Sim | Sim | 
| DetectAnomalies | Verifica anomalias nas métricas relatadas de outro tipo de regra. | Um tipo de regra | Métricas relatadas pelo argumento do tipo de regra | Sim | Não | Não | Não | Não | Não | 
| Entropia | Verifica a entropia dos dados. | Exatamente um nome de coluna | Column.[Column].Entropy | Sim | Sim | Não | Sim | Não | Sim | 
| IsComplete | Verifica se 100% dos dados estão completos. | Exatamente um nome de coluna | Column.[Column].Completeness | Sim | Não | Sim | Não | Não | Sim | 
| IsPrimaryKey | Verifica se uma coluna é uma chave primária (não NULA e exclusiva). | Exatamente um nome de coluna |  Para colunas únicas: `Column.[Column].Uniqueness` Para várias colunas: `Multicolumn.[CommaDelimitedColumns].Uniqueness`  | Sim | Não | Sim | Não | Não | Sim | 
| IsUnique | Verifica se 100% dos dados estão exclusivos. | Exatamente um nome de coluna | Column.[Column].Uniqueness | Sim | Não | Sim | Não | Não | Sim | 
| Média | Verifica se a média atende ao limite definido. | Exatamente um nome de coluna | Column.[Column].Mean | Sim | Sim | Sim | Sim | Não | Sim | 
| ReferentialIntegrity | Verifica se dois conjuntos de dados têm integridade referencial. |  Um ou mais nomes de coluna do conjunto de dados Um ou mais nomes de coluna do conjunto de dados de referência  | Column.[ReferenceDatasetAlias].ReferentialIntegrity | Sim | Não | Sim | Sim | Não | Não | 
| RowCount | Verifica se a contagem de registros atende a um limite. | Nenhum | Dataset.\$1.RowCount | Sim | Sim | Não | Sim | Sim | Sim | 
| RowCountMatch | Verifica se há correspondência nas contagens de registros entre dois conjuntos de dados. | Alias do conjunto de dados de referência | Dataset.[ReferenceDatasetAlias].RowCountMatch | Sim | Não | Não | Sim | Não | Não | 
| StandardDeviation | Verifica se o desvio padrão atende ao limite. | Exatamente um nome de coluna | Column.[Column].StandardDeviation | Sim | Sim | Sim | Sim | Não | Sim | 
| SchemaMatch | Verifica se há correspondência de esquema entre dois conjuntos de dados. | Alias do conjunto de dados de referência | Dataset.[ReferenceDatasetAlias].SchemaMatch | Sim | Não | Não | Sim | Não | Não | 
| Soma | Verifica se a soma atende ao limite definido. | Exatamente um nome de coluna | Column.[Column].Sum | Sim | Sim | Não | Sim | Não | Sim | 
| Exclusividade | Verifica se a exclusividade do conjunto de dados atende ao limite. | Exatamente um nome de coluna | Column.[Column].Uniqueness | Sim | Sim | Sim | Sim | Não | Sim | 
| UniqueValueRatio | Verifica se a razão de valores exclusivos atende ao limite. | Exatamente um nome de coluna | Column.[Column].UniqueValueRatio | Sim | Sim | Sim | Sim | Não | Sim | 
| FileFreshness | Verifica se arquivos no Amazon S3 estão atualizados. | Caminho e um limite de arquivo ou pasta. |  `Dataset.*.FileFreshness.Compliance` `Dataset.*.FileCount`  | Sim | Não | Não | Não | Não | Não | 
| FileMatch | Verifica se o conteúdo do arquivo corresponde a uma soma de verificação ou a outro arquivo. Essa regra usa somas de verificação para validar se dois arquivos são iguais. | Caminho do arquivo ou pasta de origem e caminho do arquivo ou pasta de destino. | Nenhuma estatística é gerada. | Sim | Não | Não | Não | Não | Não | 
| FileSize | Verifica se o tamanho de um arquivo corresponde a uma condição especificada. | Caminho e limite de arquivo ou pasta. | `Dataset.*.FileSize.Compliance` `Dataset.*.FileCount` `Dataset.*.MaximumFileSize` `Dataset.*.MinimumFileSize`  | Sim | Não | Não | Não | Não | Não | 
| FileUniqueness | Verifica se os arquivos são exclusivos usando somas de verificação. | Caminho e limite de arquivo ou pasta. | `Dataset.*.FileUniquenessRatio` `Dataset.*.FileCount`  | Sim | Não | Não | Não | Não | Não | 

**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)
+ [Completeness](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)
+ [Entropia](dqdl-rule-types-Entropy.md)
+ [IsComplete](dqdl-rule-types-IsComplete.md)
+ [IsPrimaryKey](dqdl-rule-types-IsPrimaryKey.md)
+ [IsUnique](dqdl-rule-types-IsUnique.md)
+ [Média](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)
+ [Sum](dqdl-rule-types-Sum.md)
+ [SchemaMatch](dqdl-rule-types-SchemaMatch.md)
+ [Exclusividade](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>

Verifica a razão de agregações de duas colunas em relação a uma dada expressão. Esse tipo de regra funciona em vários conjuntos de dados. As agregações de duas colunas são avaliadas e uma razão é produzida dividindo o resultado da agregação da primeira coluna pelo resultado da agregação da segunda coluna. A razão é verificada em relação à expressão fornecida para produzir uma resposta booleana.

**Sintaxe**

**Agregação de colunas**

```
AggregateMatch <AGG_OPERATION> (<OPTIONAL_REFERENCE_ALIAS>.<COL_NAME>)
```
+ **AGG\$1OPERATION**: a operação a ser usada para a agregação. No momento, `sum` e `avg` são compatíveis.

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **OPTIONAL\$1REFERENCE\$1ALIAS**: esse parâmetro precisa ser fornecido se a coluna for de um conjunto de dados de referência e não do conjunto de dados primário. Se você estiver usando essa regra no catálogo de dados do AWS Glue, o alias de referência deverá seguir o formato "<nome\$1banco de dados>.<nome\$1tabela>.<nome\$1coluna>

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **COL\$1NAME**: o nome da coluna a ser agregada.

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto

**Exemplo: média**

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

**Exemplo: soma**

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

**Exemplo: média da coluna no conjunto de dados de referência**

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

**Regra**

```
AggregateMatch <AGG_EXP_1> <AGG_EXP_2> <EXPRESSION>
```
+ **AGG\$1EXP\$11**: a agregação da primeira coluna.

  Tipos de coluna compatíveis: byte, decimal, duplo, flutuante, inteiro, longo, curto

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **AGG\$1EXP\$12**: a agregação da segunda coluna.

  Tipos de coluna compatíveis: byte, decimal, duplo, flutuante, inteiro, longo, curto

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: Aggregate Match usando soma**

O exemplo de regra a seguir verifica se a soma dos valores na coluna `amount` é exatamente igual à soma dos valores na coluna `total_amount`.

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

**Exemplo: Aggregate Match usando média**

O exemplo de regra a seguir verifica se a média dos valores na coluna `ratings` é igual a pelo menos 90% da média dos valores na coluna `ratings` no conjunto de dados `reference`. O conjunto de dados de referência é fornecido como uma fonte de dados adicional na experiência de ETL ou do catálogo de dados.

No AWS Glue ETL, você pode usar:

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

No catálogo de dados do AWS Glue, você pode usar:

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

**Comportamento nulo**

 A `AggregateMatch` regra ignorará as linhas com valores NULL no cálculo dos métodos de agregação (soma/média). Por exemplo: 

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

 A média da coluna `units` será (0 \$1 20 \$1 40)/3 = 20. As linhas 101 e 103 não são consideradas nesse cálculo. 

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

Verifica a *correlação* entre duas colunas em relação a uma determinada expressão. AWS O Glue Data Quality usa o coeficiente de correlação de Pearson para medir a correlação linear entre duas colunas. O resultado é um número entre -1 e 1 que mede a força e a direção da relacão. 

**Sintaxe**

```
ColumnCorrelation <COL_1_NAME> <COL_2_NAME> <EXPRESSION>
```
+ **COL\$11\$1NAME**: o nome da primeira coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **COL\$12\$1NAME**: o nome da segunda coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: correlação de colunas**

O exemplo de regra a seguir verifica se o coeficiente de correlação entre as colunas `height` e `weight` tem uma correlação positiva forte (um valor de coeficiente maior que 0,8).

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

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

 **Exemplos de regras dinâmicas** 
+ `ColumnCorrelation "colA" "colB" between min(last(10)) and max(last(10))`
+ `ColumnCorrelation "colA" "colB" < avg(last(5)) + std(last(5))`

**Comportamento nulo**

 A `ColumnCorrelation` regra ignorará linhas com valores `NULL` no cálculo da correlação. Por exemplo: 

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

 As linhas 101 e 103 serão ignoradas e `ColumnCorrelation` será 1.0. 

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

Verifica a contagem de colunas de um conjunto de dados primário em relação a uma expressão dada. Na expressão, você pode especificar o número de colunas ou um intervalo de colunas usando operadores como `>` e `<`.

**Sintaxe**

```
ColumnCount <EXPRESSION>
```
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: verificação numérica da contagem de colunas**

O exemplo de regra a seguir verifica se a contagem de colunas está dentro de um dado intervalo.

```
ColumnCount between 10 and 20
```

**Exemplos de regras dinâmicas**
+ `ColumnCount >= avg(last(10))`
+ `ColumnCount between min(last(10))-1 and max(last(10))+1`

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

 Verifica se os valores em uma determinada coluna podem ser convertidos no Apache Spark para o tipo fornecido. Aceita uma expressão `with threshold` para verificar um subconjunto dos valores da coluna. 

 **Sintaxe** 

```
ColumnDataType <COL_NAME> = <EXPECTED_TYPE>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  Tipos de coluna compatíveis: string

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **EXPECTED\$1TYPE**: o tipo esperado dos valores da coluna.

  Valores compatíveis: booleano, data, timestamp, inteiro, duplo, flutuante, longo

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **EXPRESSION**: uma expressão opcional para especificar a porcentagem de valores que devem ser do tipo esperado.

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto

 **Exemplo: números inteiros do tipo de dados da coluna como strings** 

 O exemplo de regra a seguir verifica se os valores na coluna indicada, que é do tipo string, podem ser números inteiros.

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

 **Exemplo: números inteiros do tipo de dados da coluna como strings verificam um subconjunto dos valores** 

 O exemplo de regra a seguir verifica se mais de 90% dos valores na coluna indicada, que é do tipo string, podem ser números inteiros. 

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

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

Verifica se uma coluna existe.

**Sintaxe**

```
ColumnExists <COL_NAME>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: qualquer tipo de coluna

**Exemplo: A coluna existe**

O exemplo de regra a seguir verifica se a coluna nomeada `Middle_Name` existe.

```
ColumnExists "Middle_Name"
```

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

Verifica se o tamanho de cada linha de uma coluna está de acordo com uma determinada expressão.

**Sintaxe**

```
ColumnLength <COL_NAME><EXPRESSION>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: string
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: tamanho da linha da coluna**

O exemplo de regra a seguir verifica se o valor em cada linha na coluna nomeada `Postal_Code` contém 5 caracteres.

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

**Comportamento nulo**

 A `ColumnLength` regra trata `NULL`s como strings de comprimento 0. Para uma linha `NULL`: 

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

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

 O exemplo de regra composta a seguir fornece uma maneira de falhar explicitamente valores `NULL`: 

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

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

Verifica se os nomes de todas as colunas no conjunto de dados primário correspondem à expressão regular dada.

**Sintaxe**

```
ColumnNamesMatchPattern <PATTERN>
```
+ **PATTERN**: o padrão em relação ao qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto

**Exemplo: os nomes das colunas correspondem ao padrão**

O exemplo de regra a seguir verifica se todas as colunas começam com o prefixo "aws\$1"

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

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

Executa uma expressão em relação aos valores em uma coluna.

**Sintaxe**

```
ColumnValues <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: qualquer tipo de coluna
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: valores permitidos**

O exemplo de regra a seguir verifica se cada valor na coluna especificada está em um conjunto de valores permitidos (inclusive nulo, vazio e strings somente com espaços em branco).

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

**Exemplo: expressão regular**

O exemplo de regra a seguir verifica os valores em uma coluna em relação a uma expressão regular.

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

**Exemple: valores de data**

O exemplo de regra a seguir verifica os valores em uma coluna de datas em relação a uma expressão regular.

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

**Exemplo: valores numéricos**

O exemplo de regra a seguir verifica se os valores da coluna correspondem a uma determinada restrição numérica.

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

**Comportamento nulo**

 Para todas as regras `ColumnValues` (exceto `!=` e`NOT IN`), as linhas `NULL` falharão na regra. Se a regra falhar devido a um valor nulo, o motivo da falha exibirá o seguinte: 

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

 O exemplo de regra composta a seguir fornece uma maneira de permitir explicitamente valores `NULL`: 

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

 As regras de ColumnValues negadas usando a sintaxe `!=` e `not in` serão transmitidas para as linhas `NULL`. Por exemplo: 

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

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

 Os exemplos a seguir fornecem uma maneira de falhar explicitamente valores `NULL` 

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

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

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

Verifica a porcentagem de valores completos (não nulos) em uma coluna em relação a uma determinada expressão.

**Sintaxe**

```
Completeness <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: qualquer tipo de coluna
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: porcentagem de valor nulo**

O exemplo de regras a seguir verifica se mais de 95 por cento dos valores em uma coluna são completos .

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

 **Exemplos de regras dinâmicas** 
+ `Completeness "colA" between min(last(5)) - 1 and max(last(5)) + 1`
+ `Completeness "colA" <= avg(last(10))`

**Comportamento nulo**

 Observação sobre formatos de dados CSV: linhas em branco em colunas CSV podem apresentar vários comportamentos. 
+  Se uma coluna for do tipo `String`, a linha em branco será reconhecida como uma string vazia e não falhará na regra `Completeness`. 
+  Se uma coluna for de outro tipo de dados, por exemplo, `Int`, a linha em branco será reconhecida como `NULL` e falhará na regra `Completeness`. 

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

Esse tipo de regra foi estendido para ser compatível a dois casos de uso:
+ Executar uma instrução SQL personalizada em um conjunto de dados e verificar o valor de retorno em relação a uma dada expressão.
+ Executar uma instrução SQL personalizada na qual você especifica um nome de coluna na instrução SELECT a qual você compara com alguma condição para obter resultados no nível de linha.

**Sintaxe**

```
CustomSql <SQL_STATEMENT> <EXPRESSION>
```
+ **SQL\$1STATEMENT**: uma instrução SQL que retorna um único valor numérico entre aspas duplas.
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: SQL personalizado para recuperar o resultado de uma regra geral**

Esse exemplo de regra usa uma instrução SQL para recuperar a contagem de registros de um conjunto de dados. A regra então verifica se a contagem de registros está entre 10 e 20.

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

**Exemplo: SQL personalizado para recuperar resultados no nível de linha**

Esse exemplo de regra usa uma instrução SQL personalizada na qual você especifica um nome de coluna na instrução SELECT que você compara com alguma condição para obter resultados no nível de linha. Uma expressão de condição limite define um limite de quantos registros devem ser reprovados para que toda a regra seja reprovada. Observe que uma regra pode não conter uma condição e uma palavra-chave juntas.

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

or

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

**Importante**  
O alias `primary` representa o nome do conjunto de dados que você deseja avaliar. Quando você lida com trabalhos visuais do ETL no console, `primary` sempre representa o `DynamicFrame` que está sendo passado para a transformação `EvaluateDataQuality.apply()`. Quando você usa o AWS Glue Data Catalog para executar tarefas de qualidade de dados em uma tabela, `primary` representa a tabela.

Se você estiver no catálogo de dados do AWS Glue, também poderá usar os nomes reais das tabelas:

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

Você também pode unir várias tabelas para comparar diferentes elementos de dados:

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

 No AWS Glue ETL, o CustomSQL pode identificar registros que foram reprovados nas verificações de qualidade dos dados. Para que isso funcione, você precisará retornar registros que sejam parte da tabela primária para cuja qualidade de dados você está avaliando. Os registros retornados como parte da consulta são considerados bem-sucedidos e os registros que não são retornados são considerados reprovados. Isso funciona unindo o resultado da sua consulta em CustomSQL com o conjunto de dados original. Pode haver implicações para a performance dependendo da complexidade da consulta em SQL. 

 Para fazer isso: 
+  Você precisa selecionar pelo menos uma coluna na tabela primária. 
  +  `select count(*) from primary` é uma consulta válida para a regra de DQ em CustomSQL OVERALL, mas não para CustomSQL no nível de linha. 
  +  Essa regra gerará um erro durante a avaliação: `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.` 
+  Em sua consulta em SQL, selecione uma "chave primária" na tabela ou selecione um conjunto de colunas que formam uma chave composta. Não fazer isso pode gerar resultados inconsistentes devido à correspondência de linhas duplicadas e degradação do performance. 
+  Selecione chaves SOMENTE na tabela primária e não nas tabelas de referência. 

A regra a seguir garantirá que registros com idade < 100 sejam identificados como bem-sucedidos e que os registros acima sejam marcados como reprovados.

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

Essa regra CustomSQL será aprovada quando 50% dos registros tiverem mais de 10 anos e também identificará os registros que foram reprovados. Os registros retornados por esse CustomSQL serão considerados aprovados, enquanto os não retornados serão considerados reprovados.

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

Observação: a regra CustomSQL falhará se você retornar registros que não estão disponíveis no conjunto de dados. 

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

Verifica a atualidade dos dados em uma coluna avaliando a diferença entre a hora atual e os valores de uma coluna de data. Você pode especificar uma expressão baseada em tempo para esse tipo de regra para garantir que os valores das colunas estejam atualizados.

**Sintaxe**

```
DataFreshness <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: data 
+ **EXPRESSION**: uma expressão numérica em horas ou dias. Você deve especificar a unidade de tempo na expressão.

**Exemplo: atualidade dos dados**

O exemplo de regras a seguir verifica a atualidade dos dados.

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

**Comportamento nulo**

 As regras `DataFreshness` falharão para linhas com valores `NULL`. Se a regra falhar devido a um valor nulo, o motivo da falha exibirá o seguinte: 

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

 onde 20% das linhas que falharam incluem as linhas com `NULL`. 

 O exemplo de regra composta a seguir fornece uma maneira de permitir explicitamente valores `NULL`: 

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

**Atualidade dos dados para objetos do Amazon S3**

 Às vezes, você precisará validar a atualidade dos dados com base na hora de criação do arquivo Amazon S3. Para fazer isso, é possível usar o código a seguir para obter o carimbo de data/hora e adicioná-lo ao seu quadro de dados e, em seguida, aplicar as verificações de atualidade dos dados. 

```
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>

 Verifica se os dados do conjunto de dados primário correspondem aos dados de um conjunto de dados de referência. Os dois conjuntos de dados são unidos usando os mapeamentos de colunas de chaves fornecidos. Mapeamentos de colunas adicionais podem ser fornecidos caso você deseje verificar a igualdade dos dados somente nessas colunas. Para que **DataSetMatch** funcione, suas chaves de união deverão ser exclusivas e não deverão ser NULL (deverão ser uma chave primária). Se você não atender a essas condições, receberá a mensagem de erro “O mapa de teclas fornecido não é adequado para determinados quadros de dados”. Nos casos em que você não puder ter chaves de união exclusivas, considere usar outros tipos de regras, como **AggregateMatch**, para comparar com base nos dados resumidos. 

**Sintaxe**

```
DatasetMatch <REFERENCE_DATASET_ALIAS> <JOIN CONDITION WITH MAPPING> <OPTIONAL_MATCH_COLUMN_MAPPINGS> <EXPRESSION>
```
+ **REFERENCE\$1DATASET\$1ALIAS**: o alias do conjunto de dados de referência com o qual você compara os dados do conjunto de dados primário.
+ **KEY\$1COLUMN\$1MAPPINGS**: uma lista separada por vírgulas dos nomes das colunas que formam uma chave nos conjuntos de dados. Se os nomes das colunas não forem iguais nos dois conjuntos de dados, você deverá separá-los com um `->`
+ **OPTIONAL\$1MATCH\$1COLUMN\$1MAPPINGS**: você pode fornecer esse parâmetro se quiser verificar se existe correspondência de dados somente em determinadas colunas. É usada a mesma sintaxe dos mapeamentos de colunas de chaves. Se esse parâmetro não for fornecido, compararmos os todas as colunas restantes. As colunas sem chave restantes, devem ter os mesmos nomes nos dois conjuntos de dados.
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: comparar os conjuntos de dados usando a coluna ID**

O exemplo de regra a seguir verifica se mais de 90% do conjunto de dados primário corresponde ao conjunto de dados de referência, usando a coluna "ID" para unir os dois conjuntos de dados. Ele compara todas as colunas nesse caso.

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

**Exemplo: comparar os conjuntos de dados usando várias colunas de chaves**

No exemplo a seguir, o conjunto de dados primário e o conjunto de dados de referência têm nomes diferentes para as colunas-chave. `ID_1` e `ID_2` juntos formam uma chave composta no conjunto de dados primário. `ID_ref1` e `ID_ref2` juntos formam uma chave composta no conjunto de dados de referência. Nesse cenário, você pode usar a sintaxe especial para fornecer os nomes das colunas.

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

**Exemplo: comparar conjuntos de dados usando várias colunas de chaves e verifique se a coluna específica corresponde**

Este exemplo se baseia no exemplo anterior. Queremos verificar se apenas a coluna que contém os valores corresponde. Essa coluna é denominada `Amount1` no conjunto de dados primário e `Amount2` no conjunto de dados de referência. Você quer uma correspondência exata.

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

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

Verifica o número de valores distintos em uma coluna em relação a uma determinada expressão.

**Sintaxe**

```
DistinctValuesCount <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: qualquer tipo de coluna
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: contagem distinta de valores de colunas**

O exemplo de regra a seguir verifica se a coluna denominada `State` contém mais de 3 valores distintos.

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

**Exemplos de regras dinâmicas**
+ `DistinctValuesCount "colA" between avg(last(10))-1 and avg(last(10))+1`
+ `DistinctValuesCount "colA" <= index(last(10),2) + std(last(5))`

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

Verifica se o valor de *entropia* de uma coluna corresponde a uma determinada expressão. A entropia mede o nível de informação que está contida em uma mensagem. Dada a distribuição de probabilidade pelos valores em uma coluna, a entropia descreve quantos bits são necessários para identificar um valor.

**Sintaxe**

```
Entropy <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: qualquer tipo de coluna
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: entropia de coluna**

O exemplo de regra a seguir verifica se a coluna determinada `Feedback` tem um valor de entropia maior que um.

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

 **Exemplos de regras dinâmicas** 
+ `Entropy "colA" < max(last(10))`
+ `Entropy "colA" between min(last(10)) and max(last(10))`

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

Verifica se todos os valores em uma coluna estão completos (não nulos). 

**Sintaxe**

```
IsComplete <COL_NAME>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: qualquer tipo de coluna

**Exemplo: valores nulos**

O exemplo a seguir verifica se todos os valores em uma coluna denominada `email` não são nulos.

```
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"
```

**Comportamento nulo**

 Observação sobre formatos de dados CSV: linhas em branco em colunas CSV podem apresentar vários comportamentos. 
+  Se uma coluna for do tipo `String`, a linha em branco será reconhecida como uma string vazia e não falhará na regra `Completeness`. 
+  Se uma coluna for de outro tipo de dados, por exemplo, `Int`, a linha em branco será reconhecida como `NULL` e falhará na regra `Completeness`. 

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

Verifica se uma coluna contém uma chave primária. Uma coluna contém uma chave primária se todos os valores na coluna forem exclusivos e completos (não nulos). Também é possível verificar as chaves primárias com várias colunas. 

**Sintaxe**

```
IsPrimaryKey <COL_NAME>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: qualquer tipo de coluna

**Exemplo: chave primária**

O exemplo de regra a seguir verifica se a coluna denominada `Customer_ID` contém uma chave primária.

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

 **Exemplo: chave primária com várias colunas. Qualquer um dos exemplos a seguir é válido.** 

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

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

Verifica se todos os valores em uma coluna são exclusivos e retorna um valor booliano.

**Sintaxe**

```
IsUnique <COL_NAME>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: qualquer tipo de coluna

**Exemplos**

O exemplo de regra a seguir verifica se todos os valores em uma coluna denominada `email` são exclusivos.

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

O exemplo de regra a seguir verifica várias colunas. 

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

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

Verifica se o valor mediano (média) de uma coluna corresponde a uma determinada expressão.

**Sintaxe**

```
Mean <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: valor médio**

O exemplo de regra a seguir verifica se a média de todos os valores em uma coluna excede um limite.

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

 **Exemplos de regras dinâmicas** 
+ `Mean "colA" > avg(last(10)) + std(last(2))`
+ `Mean "colA" between min(last(5)) - 1 and max(last(5)) + 1`

**Comportamento nulo**

 A regra `Mean` ignorará linhas com valores `NULL` no cálculo da média. Por exemplo: 

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

 A média da coluna `units` será (0 \$1 20 \$1 40)/3 = 20. As linhas 101 e 103 não são consideradas nesse cálculo. 

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

Verifica até que ponto os valores de um conjunto de colunas no conjunto de dados primário são um subconjunto dos valores de um conjunto de colunas em um conjunto de dados de referência.

**Sintaxe**

```
ReferentialIntegrity <PRIMARY_COLS> <REFERENCE_DATASET_COLS> <EXPRESSION>
```
+ **PRIMARY\$1COLS**: uma lista de nomes de coluna separados por vírgulas no conjunto de dados primário.

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **REFERENCE\$1DATASET\$1COLS**: esse parâmetro contém duas partes separadas por um ponto. A primeira parte é o alias do conjunto de dados de referência. A segunda parte é a lista separada por vírgulas dos nomes das colunas do conjunto de dados de referência entre colchetes.

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: verificar a integridade referencial de uma coluna de códigos postais**

O exemplo de regra a seguir verifica se mais de 90% dos valores da coluna `zipcode` do conjunto de dados primário estão presentes na coluna `zipcode` do conjunto de dados `reference`.

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

**Exemplo: verificar a integridade referencial das colunas de cidades e estados**

No exemplo a seguir, existem colunas contendo informações sobre cidades e estados no conjunto de dados primário e no conjunto de dados de referência. Os nomes das colunas são diferentes nos dois conjuntos de dados. A regra verifica se o conjunto de valores das colunas do conjunto de dados primário é exatamente igual ao conjunto de valores das colunas do conjunto de dados de referência.

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

 **Exemplos de regras dinâmicas** 
+ `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>

Verifica a contagem de linhas de um conjunto de dados em relação a uma determinada expressão. Na expressão, você pode especificar o número de linhas ou um intervalo de linhas usando operadores como `>` e `<`.

**Sintaxe**

```
RowCount <EXPRESSION>
```
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: verificação numérica da contagem de linhas**

O exemplo de regra a seguir verifica se a contagem de linhas está dentro de um determinado intervalo.

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

 **Exemplos de regras dinâmicas** 

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

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

Verifica a razão entre a contagem de linhas do conjunto de dados primário e a contagem de linhas de um conjunto de dados de referência em relação à expressão dada.

**Sintaxe**

```
RowCountMatch <REFERENCE_DATASET_ALIAS> <EXPRESSION>
```
+ **REFERENCE\$1DATASET\$1ALIAS** O alias do conjunto de dados de referência com o qual comparar as contagens de linhas.

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: verificação da contagem de linhas em relação a um conjunto de dados de referência**

O exemplo de regra a seguir verifica se a contagem de linhas do conjunto de dados primário é pelo menos 90% da contagem de linhas do conjunto de dados de referência.

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

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

Verifica o desvio padrão de todos os valores em uma coluna em relação a uma determinada expressão.

**Sintaxe**

```
StandardDeviation <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: desvio padrão**

O exemplo de regra a seguir verifica se o desvio padrão dos valores em uma coluna denominada `colA` é menor que um valor especificado.

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

 **Exemplos de regras dinâmicas** 
+ `StandardDeviation "colA" > avg(last(10) + 0.1`
+ `StandardDeviation "colA" between min(last(10)) - 1 and max(last(10)) + 1`

**Comportamento nulo**

 A regra `StandardDeviation` ignorará linhas com valores `NULL` no cálculo do desvio padrão. Por exemplo: 

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

 O desvio padrão da coluna `units1` não considerará as linhas 101 e 103 e resultará em 16,33. O desvio padrão da coluna `units2` resultará em 16. 

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

Verifica a soma de todos os valores em uma coluna em relação a uma determinada expressão.

**Sintaxe**

```
Sum <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: soma**

O exemplo de regra a seguir verifica se a soma de todos os valores em uma coluna excede um limite.

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

 **Exemplos de regras dinâmicas** 
+ `Sum "ColA" > avg(last(10))`
+ `Sum "colA" between min(last(10)) - 1 and max(last(10)) + 1`

**Comportamento nulo**

 A regra `Sum` ignorará linhas com valores `NULL` no cálculo da soma. Por exemplo: 

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

 A soma da coluna `units` não considerará as linhas 101 e 103 e resultará em (0 \$1 20 \$1 40) = 60. 

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

Verifica se o esquema do conjunto de dados primário corresponde ao esquema de um conjunto de dados de referência. A verificação de esquema é feita coluna por coluna. O esquema de duas colunas corresponde se os nomes forem idênticos e os tipos forem idênticos. A ordem das colunas não importa.

**Sintaxe**

```
SchemaMatch <REFERENCE_DATASET_ALIAS> <EXPRESSION>
```
+ **REFERENCE\$1DATASET\$1ALIAS**: o alias do conjunto de dados de referência com o qual comparar os esquemas.

  **Tipos de coluna compatíveis**: byte, decimal, duplo, flutuante, inteiro, longo, curto
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: SchemaMatch**

A regra de exemplo a seguir verifica se o esquema do conjunto de dados primário corresponde exatamente ao esquema de um conjunto de dados de referência.

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

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

Verifica a porcentagem de valores exclusivos em uma coluna em relação a uma determinada expressão. Valores exclusivos ocorrem exatamente uma vez.

**Sintaxe**

```
Uniqueness <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: qualquer tipo de coluna
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo**

O exemplo de regra a seguir verifica se a porcentagem de valores exclusivos em uma coluna corresponde a determinados critérios numéricos.

```
Uniqueness "email" = 1.0
Uniqueness "Customer_ID" != 1.0 where "Customer_ID < 10"
```

O exemplo de regra a seguir verifica várias colunas. 

```
Uniqueness "vendorid" "tpep_pickup_datetime" = 1
```

 **Exemplos de regras dinâmicas** 
+ `Uniqueness "colA" between min(last(10)) and max(last(10))`
+ `Uniqueness "colA" >= avg(last(10))`

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

Verifica a *razão de valores exclusivos* em uma coluna em relação a uma determinada expressão. Uma razão de valor exclusivo é a fração de valores exclusivos dividida pelo número de todos os valores distintos em uma coluna. Valores exclusivos ocorrem exatamente uma vez, enquanto valores distintos ocorrem *pelo menos* uma vez. 

Por exemplo, o conjunto `[a, a, b]` contém um valor exclusivo (`b`) e dois valores distintos (`a` e `b`). Portanto, a proporção de valores exclusivos do conjunto é ½ = 0,5.

**Sintaxe**

```
UniqueValueRatio <COL_NAME> <EXPRESSION>
```
+ **COL\$1NAME**: o nome da coluna em relação à qual você deseja avaliar a regra de qualidade de dados.

  **Tipos de coluna compatíveis**: qualquer tipo de coluna
+ **EXPRESSION**: uma expressão a ser executada na resposta do tipo de regra para produzir um valor booliano. Para obter mais informações, consulte [Expressões](dqdl.md#dqdl-syntax-rule-expressions).

**Exemplo: razão de valores exclusivos**

Esse exemplo verifica a proporção de valores exclusivos de uma coluna em relação a um intervalo de valores.

```
UniqueValueRatio "test_score" between 0 and 0.5
UniqueValueRatio "Customer_ID" between 0 and 0.9 where "Customer_ID < 10"
```

 **Exemplos de regras dinâmicas** 
+ `UniqueValueRatio "colA" > avg(last(10))`
+ `UniqueValueRatio "colA" <= index(last(10),2) + std(last(5))`

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

 Detecta anomalias em uma determinada regra de qualidade de dados. Cada execução da regra DetectAnomalies resulta em salvar o valor avaliado para a regra fornecida. Quando há dados suficientes coletados, o algoritmo de detecção de anomalias pega todos os dados históricos dessa regra e executa a detecção de anomalias. A regra DetectAnomalies falha quando uma anomalia é detectada. Para obter mais informações sobre qual anomalia foi detectada, consulte Observações. 

**Sintaxe**

```
       DetectAnomalies <RULE_NAME> <RULE_PARAMETERS>
```

 `RULE_NAME`: o nome da regra para a qual você quer avaliar e detectar anomalias. Regras compatíveis: 
+ "RowCount"
+ "Completeness"
+ "Uniqueness"
+ "Mean"
+ "Sum"
+ "StandardDeviation"
+ "Entropy"
+ "DistinctValuesCount"
+ "UniqueValueRatio"
+ "ColumnLength"
+ "ColumnValues"
+ "ColumnCorrelation"
+ "CustomSQL"
+ "ColumnCount"

 `RULE_PARAMETERS`: algumas regras exigem parâmetros adicionais para serem executadas. Consulte a documentação da regra fornecida para ver os parâmetros necessários. 

**Exemplo: anomalias para RowCount**

Por exemplo, se quisermos detectar anomalias de RowCount, fornecemos RowCount como nome de regra. 

```
DetectAnomalies "RowCount"
```

**Exemplo: anomalias para ColumnLength**

Por exemplo, se quisermos detectar anomalias de ColumnLength, fornecemos ColumnLength como nome de regra e nome de coluna. 

```
DetectAnomalies "ColumnLength" "id"
```

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

 O FileFreshness garante que os arquivos de dados estejam atualizados com base nas condições que você fornece. Ele usa a hora da última modificação dos arquivos para garantir que os arquivos de dados ou a pasta inteira esteja atualizada. 

 Essa regra reúne duas métricas: 
+ Conformidade com o FileFreshness com base na regra que você configurou
+ O número de arquivos que foram verificados pela regra

```
{"Dataset.*.FileFreshness.Compliance":1,"Dataset.*.FileCount":1} 
```

 A detecção de anomalias não considera essas métricas. 

 **Verificação da atualização do arquivo** 

 A regra a seguir garante que o tickets.parquet tenha sido criado nas últimas 24 horas. 

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/tickets.parquet" > (now() - 24 hours)
```

 **Verificação da atualização da pasta** 

 A regra a seguir será válida se todos os arquivos da pasta tiverem sido criados ou modificados nas últimas 24 horas. 

```
FileFreshness "s3://bucket/" >= (now() -1 days)
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" >= (now() - 24 hours)
```

 **Verificação da atualização da pasta ou do arquivo com limite** 

 A regra a seguir é válida se 10% dos arquivos da pasta “tiquetes” tiverem sido criados ou modificados nos últimos 10 dias. 

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" < (now() - 10 days) with threshold > 0.1
```

 **Verificação de arquivos ou pastas com datas específicas** 

 Você pode verificar a atualização de arquivos em dias específicos. 

```
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"
```

 **Verificação de arquivos ou pastas com hora** 

 É possível usar FileFreshness para garantir que os arquivos chegaram com base em determinadas horas. 

```
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"
```

 Considerações importantes: 
+  O FileFreshness pode avaliar arquivos usando unidades de dias, horas e minutos 
+  Para horários, ele oferece suporte aos formatos AM/PM e de 24 horas 
+  Os horários são calculados em UTC, a menos que algo diferente seja especificado 
+  As datas são calculadas em UTC no horário 00:00 

 O FileFreshness baseado em hora funciona da seguinte forma: 

```
FileFreshness "s3://amzn-s3-demo-bucket/artifacts/file/tickets/" > "21:45"
```
+  Primeiro, o horário "21h45" é combinado com a data de hoje no formato UTC para criar um campo de data e hora 
+  Em seguida, a data e hora são convertidas para um fuso horário que você especificou 
+  Finalmente, a regra é avaliada 

 **Tags de regras opcionais baseadas em arquivos:** 

 As tags permitem controlar o comportamento da regra. 

 **recentFiles** 

 Essa tag limita o número de arquivos processados ao manter primeiro o arquivo mais recente. 

```
FileFreshness "s3://amzn-s3-demo-bucket/" between (now() - 100 minutes) and (now() + 10 minutes) with recentFiles = 1
```

 **uriRegex** 

**nota**  
 A tag `uriRegex` está disponível no AWS Glue 5.0 e em versões posteriores. 

 Essa tag filtra os arquivos aplicando um padrão regex ao caminho do arquivo. Somente são processados os arquivos cujos caminhos correspondam ao padrão. Você também pode usar um lookahead negativo para excluir os arquivos que correspondam a um padrão. 

```
# 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$).*"
```

 **filterOrder** 

**nota**  
 A tag `filterOrder` está disponível no AWS Glue 5.0 e em versões posteriores. 

 Quando você usa várias tags de filtro juntas, como `recentFiles` e `uriRegex`, a tag `filterOrder` controla a ordem na qual elas são aplicadas. A ordem padronizada é primeiro `recentFiles` e depois `uriRegex`. 

```
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with recentFiles = 1 with uriRegex = "inventory_" with filterOrder = ["uriRegex","recentFiles"]
```

 No exemplo acima, primeiramente é aplicado o filtro `uriRegex` para selecionar somente os arquivos que correspondam a “inventory\$1” e, em seguida, `recentFiles = 1` obtém o arquivo mais recente desse conjunto filtrado. Sem `filterOrder`, o comportamento padrão seria selecionar primeiro o arquivo mais recente e depois aplicar o regex, o que poderia resultar na ausência de correspondência de arquivos se o arquivo mais recente não correspondesse ao padrão. 

**nota**  
 Todos os valores na lista `filterOrder` devem fazer referência a outras tags do filtro (`recentFiles` ou `uriRegex`) que também estejam presentes na mesma regra. Tags que não fazem parte do filtro, como `timeZone` ou `failFast`, não são válidas em `filterOrder`. 

 **failFast** 

 Quando definida como `"true"`, a regra informa a falha imediatamente no primeiro arquivo que falhar na condição de atualização, em vez de avaliar todos os arquivos e calcular uma taxa de conformidade. 

```
FileFreshness "s3://amzn-s3-demo-bucket/" > (now() - 24 hours) with failFast = "true"
```

 **timeZone** 

 Substituições de fuso horário aceitas, consulte [Fusos horários permitidos](https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html) para ver os fusos horários compatíveis. 

```
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"
```

 **Dedução de nomes de arquivos diretamente de quadros de dados** 

 Você nem sempre precisa fornecer um caminho de arquivo. Por exemplo, quando você está criando a regra no Catálogo de Dados do AWS Glue, pode ser difícil descobrir quais pastas as tabelas do catálogo estão usando. O AWS Glue Data Quality pode encontrar as pastas ou arquivos específicos usados para o preenchimento do quadro de dados e detectar se eles estão atualizados. 

**nota**  
 Esse recurso só funcionará quando os arquivos forem lidos com sucesso no DynamicFrame ou no DataFrame. 

```
FileFreshness > (now() - 24 hours)
```

 Essa regra descobrirá o caminho da pasta ou os arquivos usados para preencher o quadro dinâmico ou o quadro de dados. Isso funciona para caminhos do Amazon S3 ou para tabelas do Catálogo de Dados do AWS Glue baseadas no Amazon S3. Existem algumas considerações: 

1.  No ETL do AWS Glue, você deve ter a transformação **EvaluateDataQuality** imediatamente após uma transformação do Amazon S3 ou do Catálogo de Dados do AWS Glue.   
![\[A captura de tela mostra um nó de avaliação da qualidade dos dados conectado a um nó do Amazon S3.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-file-freshness.png)

1.  Essa regra não funcionará nas sessões interativas do AWS Glue. 

 Se você tentar isso em ambos os casos, ou quando o AWS Glue não conseguir encontrar os arquivos, o AWS Glue irá gerar o seguinte erro: `“Unable to parse file path from DataFrame”` 

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

 A regra FileMatch permite que você compare arquivos com outros arquivos ou somas de verificação. Isso pode ser útil em algumas situações: 

1.  Validação de arquivos recebidos de fontes externas: você pode usar o FileMatch para garantir que recebeu os arquivos corretos de fontes externas ao compará-los com somas de verificação. Isso ajuda a validar a integridade dos dados que você está ingerindo. 

1.  Comparação de dados em duas pastas diferentes: o FileMatch pode ser usado para comparar arquivos entre duas pastas. 

 Essa regra reúne uma métrica: o número de arquivos que foram examinados pela regra. 

```
{"Dataset.*.FileCount":1}
```

 **Validar arquivos com uma soma de verificação:** 

 O FileMatch aceita um arquivo e um conjunto de somas de verificação para garantir que pelo menos uma delas corresponda ao arquivo. 

```
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"]
```

 Os seguintes algoritmos padrão são compatíveis: 
+ MD5
+ SHA-1
+ SHA-256

 Se você não fornecer um algoritmo, o padrão será SHA-256. 

 **Validar todos os arquivos de uma pasta com um conjunto de somas de verificação:** 

```
FileMatch "s3://amzn-s3-demo-bucket /" in ["3ee0d8617ac041793154713e5ef8f319", "7e8617ac041793154713e5ef8f319"] with hashAlgorithm = "MD5"
FileMatch "s3://amzn-s3-demo-bucket /internal-folder/" in ["3ee0d8617ac041793154713e5ef8f319", "7e8617ac041793154713e5ef8f319"]
```

 **Comparar arquivos em pastas diferentes** 

```
# 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"]
```

 O FileMatch verificará o conteúdo dos arquivos do `original_bucket` e garantirá que eles correspondam ao conteúdo do `archive_bucket`. A regra falhará se eles não corresponderem exatamente. Ele também pode verificar o conteúdo de pastas internas ou arquivos individuais. 

 O FileMatch também pode comparar arquivos individuais uns com os outros. 

```
FileMatch "s3://amzn-s3-demo-bucket /file_old.json" "s3://amzn-s3-demo-bucket /file_new.json"
```

 **Dedução de nomes de arquivos diretamente de quadros de dados** 

 Você nem sempre precisa fornecer um caminho de arquivo. Por exemplo, quando você está criando a regra no Catálogo de Dados do AWS Glue (com o suporte do Amazon S3), pode ser difícil descobrir quais pastas as tabelas do catálogo estão usando. O AWS Glue Data Quality pode encontrar as pastas ou arquivos específicos usados para o preenchimento do quadro de dados. 

**nota**  
 Esse recurso só funcionará quando os arquivos forem lidos com sucesso no DynamicFrame ou no DataFrame. 

```
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "MD5"
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-1"
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"] with hashAlgorithm = "SHA-256"
FileMatch in ["3ee0d8617ac041793154713e5ef8f319"]
```

 Se a soma de verificação fornecida for diferente da calculada, o FileMatch alertará você sobre a diferença. 

![\[A captura de tela mostra uma regra com o status DQ de Falha na regra. O FileMatch explica a falha.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-file-match.png)


 **Tags de regras opcionais baseadas em arquivos:** 

 As tags permitem controlar o comportamento da regra. 

 **recentFiles** 

 Essa tag limita o número de arquivos processados ao manter primeiro o arquivo mais recente. 

```
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with recentFiles = 1
```

 **uriRegex** 

**nota**  
 A tag `uriRegex` está disponível no AWS Glue 5.0 e em versões posteriores. 

 Essa tag filtra os arquivos aplicando um padrão regex ao caminho do arquivo. Somente são processados os arquivos cujos caminhos correspondam ao padrão. Você também pode usar um lookahead negativo para excluir os arquivos que correspondam a um padrão. 

```
# 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$).*"
```

 **filterOrder** 

**nota**  
 A tag `filterOrder` está disponível no AWS Glue 5.0 e em versões posteriores. 

 Quando você usa várias tags de filtro juntas, como `recentFiles` e `uriRegex`, a tag `filterOrder` controla a ordem na qual elas são aplicadas. A ordem padronizada é primeiro `recentFiles` e depois `uriRegex`. 

```
FileMatch "s3://bucket/" in ["3ee0d8617ac04179sam4713e5ef8f319"] with recentFiles = 1 with uriRegex = "\.json$" with filterOrder = ["uriRegex","recentFiles"]
```

 **matchFileName** 

 Essa tag garante que os arquivos não tenham nomes duplicados. O comportamento padrão é falso. 

```
FileMatch "s3://amzn-s3-demo-bucket/file.json" in ["3ee0d8617ac04179sam4713e5ef8f319"] with matchFileName = "true"
```

 Existem algumas considerações: 

1.  No ETL do AWS Glue, você deve ter a transformação **EvaluateDataQuality** imediatamente após uma transformação do Amazon S3 ou do Catálogo de Dados do AWS Glue.   
![\[A captura de tela mostra uma regra com o status DQ de Falha na regra. O FileMatch explica a falha.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-file-match-transform.png)

1.  Essa regra não funcionará nas sessões interativas do AWS Glue. 

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

 O FileUniqueness permite que você garanta que não haja arquivos duplicados nos dados que você recebeu dos produtores de dados. 

 A regra reúne as seguintes estatísticas de dados: 

1.  O número de arquivos que foram verificados pela regra 

1.  A taxa de exclusividade dos arquivos 

```
Dataset.*.FileUniquenessRatio: 1.00, Dataset.*.FileCount: 8.00
```

 **Encontrar arquivos duplicados em uma pasta:** 

```
FileUniqueness "s3://bucket/" > 0.5
FileUniqueness "s3://bucket/folder/" = 1
```

 **Inferir nomes de pastas diretamente dos quadros de dados para detectar duplicatas:** 

 Você nem sempre precisa fornecer um caminho de arquivo. Por exemplo, quando você está criando a regra no Catálogo de Dados do AWS Glue, pode ser difícil descobrir quais pastas as tabelas do catálogo estão usando. O AWS Glue Data Quality pode encontrar as pastas ou arquivos específicos usados para o preenchimento do quadro de dados. 

**nota**  
 Quando a inferência é usada, as regras baseadas em arquivos só podem detectar arquivos lidos com sucesso no DynamicFrame ou no DataFrame. 

```
FileUniqueness > 0.5
```

 **Tags de regras opcionais baseadas em arquivos:** 

 As tags permitem controlar o comportamento da regra. 

 **recentFiles** 

 Essa tag limita o número de arquivos processados ao manter primeiro o arquivo mais recente. 

```
FileUniqueness "s3://amzn-s3-demo-bucket/" > 0.5 with recentFiles = 1
```

 **uriRegex** 

**nota**  
 A tag `uriRegex` está disponível no AWS Glue 5.0 e em versões posteriores. 

 Essa tag filtra os arquivos aplicando um padrão regex ao caminho do arquivo. Somente são processados os arquivos cujos caminhos correspondam ao padrão. Você também pode usar um lookahead negativo para excluir os arquivos que correspondam a um padrão. 

```
# 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$).*"
```

 **filterOrder** 

**nota**  
 A tag `filterOrder` está disponível no AWS Glue 5.0 e em versões posteriores. 

 Quando você usa várias tags de filtro juntas, como `recentFiles` e `uriRegex`, a tag `filterOrder` controla a ordem na qual elas são aplicadas. A ordem padronizada é primeiro `recentFiles` e depois `uriRegex`. 

```
FileUniqueness "s3://bucket/" > 0.5 with recentFiles = 5 with uriRegex = "\.csv$" with filterOrder = ["uriRegex","recentFiles"]
```

 **matchFileName** 

 Essa tag garante que os arquivos não tenham nomes duplicados. O comportamento padrão é falso. 

```
FileUniqueness "s3://amzn-s3-demo-bucket/" > 0.5 with matchFileName = "true"
```

 Existem algumas considerações: 

1.  No ETL do AWS Glue, você deve ter a transformação **EvaluateDataQuality** imediatamente após uma transformação do Amazon S3 ou do Catálogo de Dados do AWS Glue. 

1.  Essa regra não funcionará nas sessões interativas do AWS Glue. 

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

 A regra FileSize permite que você garanta que os arquivos atendam a determinados critérios de tamanho. Isso é útil para os seguintes casos de uso: 

1.  Certificar-se de que os produtores não estejam enviando arquivos vazios ou substancialmente menores para processamento. 

1.  Certificar-se de que os buckets de destino não tenham arquivos menores, o que pode causar problemas de desempenho. 

 O FileSize reúne as seguintes métricas: 

1.  Conformidade: retorna a porcentagem de arquivos que atendem ao limite da regra que você estabeleceu 

1.  Contagem de arquivos: o número de arquivos que foram verificados pela regra 

1.  Tamanho mínimo do arquivo em bytes 

1.  Tamanho máximo do arquivo em bytes 

```
Dataset.*.FileSize.Compliance: 1.00, 
Dataset.*.FileCount: 8.00, 
Dataset.*.MaximumFileSize: 327413121.00, 
Dataset.*.MinimumFileSize: 204558920.00
```

 A detecção de anomalias não é compatível com essas métricas. 

 **Validar o tamanho dos arquivos** 

 Essa regra será válida quando file.dat for maior do que 2 MB. 

```
FileSize "s3://amzn-s3-demo-bucket/file.dat" > 2 MB
```

 As unidades compatíveis incluem B (bytes), MB (megabytes), GB (gigabytes) e TB (terabytes). 

 **Validar o tamanho dos arquivos nas pastas** 

```
FileSize "s3://bucket/" > 5 B
FileSize "s3://bucket/" < 2 GB
```

 Essa regra será válida se 70% dos arquivos em s3://amzn-s3-demo-bucket tiverem entre 2 GB e 1 TB. 

```
FileSize "s3://amzn-s3-demo-bucket/" between 2 GB and 1 TB  with threshold > 0.7
```

 **Dedução de nomes de arquivos diretamente de quadros de dados** 

 Você nem sempre precisa fornecer um caminho de arquivo. Por exemplo, quando você está criando a regra no Catálogo de Dados, pode ser difícil descobrir quais pastas as tabelas do catálogo estão usando. O AWS Glue Data Quality pode encontrar as pastas ou arquivos específicos usados para o preenchimento do quadro de dados. 

**nota**  
 Esse recurso só funcionará quando os arquivos forem lidos com sucesso no DynamicFrame ou no DataFrame. 

```
FileSize < 10 MB with threshold > 0.7
```

 **Tags de regras opcionais baseadas em arquivos:** 

 As tags permitem controlar o comportamento da regra. 

 **recentFiles** 

 Essa tag limita o número de arquivos processados ao manter primeiro o arquivo mais recente. 

```
FileSize "s3://amzn-s3-demo-bucket/" > 5 B with recentFiles = 1
```

 **uriRegex** 

**nota**  
 A tag `uriRegex` está disponível no AWS Glue 5.0 e em versões posteriores. 

 Essa tag filtra os arquivos aplicando um padrão regex ao caminho do arquivo. Somente são processados os arquivos cujos caminhos correspondam ao padrão. Você também pode usar um lookahead negativo para excluir os arquivos que correspondam a um padrão. 

```
# 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$).*"
```

 **filterOrder** 

**nota**  
 A tag `filterOrder` está disponível no AWS Glue 5.0 e em versões posteriores. 

 Quando você usa várias tags de filtro juntas, como `recentFiles` e `uriRegex`, a tag `filterOrder` controla a ordem na qual elas são aplicadas. A ordem padronizada é primeiro `recentFiles` e depois `uriRegex`. 

```
FileSize "s3://bucket/" > 5 B with recentFiles = 5 with uriRegex = "\.dat$" with filterOrder = ["uriRegex","recentFiles"]
```

 **failFast** 

 Quando definida como `"true"`, a regra informa a falha imediatamente no primeiro arquivo que falhar na condição de tamanho, em vez de avaliar todos os arquivos e calcular uma taxa de conformidade. 

```
FileSize "s3://bucket/" > 2 MB with failFast = "true"
```

 Existem algumas considerações: 

1.  No ETL do AWS Glue, você deve ter a transformação EvaluateDataQuality imediatamente após uma transformação do Amazon S3 ou do Catálogo de Dados. 

1.  Essa regra não funcionará nas sessões interativas do AWS Glue. 

# Usar APIs para medir e gerenciar a qualidade dos dados
<a name="data-quality-using-apis"></a>

Este tópico descreve como usar as APIs para medir e gerenciar a qualidade dos dados.

**Contents**
+ [Pré-requisitos](#using-apis-prerequisites)
+ [Trabalhar com as recomendações do AWS Glue Data Quality](#using-apis-recommendations)
+ [Trabalhar com conjuntos de regras do AWS Glue Data Quality](#using-apis-rulesets)
+ [Trabalhar com execuções do AWS Glue Data Quality](#using-apis-runs)
+ [Trabalhar com resultados do AWS Glue Data Quality](#using-apis-results)

## Pré-requisitos
<a name="using-apis-prerequisites"></a>
+ Certifique-se de que sua versão do boto3 esteja atualizada para incluir a API do AWS Glue Data Quality mais recente.
+ Certifique-se de que sua versão da AWS CLI esteja atualizada, para incluir a CLI mais recente.

Se você estiver usando um trabalho do AWS Glue para executar essas APIs, poderá usar a opção a seguir para atualizar a biblioteca do boto3 para a versão mais recente:

```
—additional-python-modules boto3==<version>
```

## Trabalhar com as recomendações do AWS Glue Data Quality
<a name="using-apis-recommendations"></a>

**Para iniciar uma recomendação do AWS Glue Data Quality, execute:**

```
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']
```

Para uma execução de recomendação, você pode usar `pushDownPredicates` ou `catalogPartitionPredicates` para melhorar a performance e executar recomendações somente em partições específicas das fontes do catálogo.

```
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>'
  )
```

**Para obter os resultados de uma recomendação do AWS Glue Data Quality, execute:**

```
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
```

Do objeto de resposta acima, você pode extrair o conjunto de regras recomendado pela execução, para usar em outras etapas:

```
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"
]
```

**Para obter uma lista de todas as suas execuções de recomendação que podem ser filtradas e listadas:**

```
response = client.list_data_quality_rule_recommendation_runs(
    Filter={
        'DataSource': {
            'GlueTable': {
                'DatabaseName': '<database_name>',
                'TableName': '<table_name>'
            }
        }
)
```

**Para cancelar as tarefas existentes de recomendação do AWS Glue Data Quality:**

```
response = client.cancel_data_quality_rule_recommendation_run(
    RunId='dqrun-d4b6b01957fdd79e59866365bf9cb0e40fxxxxxxx'
)
```

## Trabalhar com conjuntos de regras do AWS Glue Data Quality
<a name="using-apis-rulesets"></a>

**Para criar um conjunto de regras do AWS Glue Data Quality:**

```
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>'
    }
)
```

**Para criar um conjunto de regras de qualidade de dados:**

```
response = client.get_data_quality_ruleset(
    Name='<ruleset_name>'
)
print(response)
```

Você pode usar essa API para extrair o conjunto de regras:

```
print(response['Ruleset'])
```

**Para listar todos os conjuntos de regras de qualidade de dados para uma tabela:**

```
response = client.list_data_quality_rulesets()
```

Você pode usar a condição de filtro na API para filtrar todos os conjuntos de regras anexados a um banco de dados ou a uma tabela específica:

```
response = client.list_data_quality_rulesets(
    Filter={
        'TargetTable': {
            'TableName': '<table_name>',
            'DatabaseName': '<database_name>'
        }
    },
)
```

**Para atualizar um conjunto de regras de qualidade de dados:**

```
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
```

**Para excluir um conjunto de regras de qualidade de dados:**

```
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
```

## Trabalhar com execuções do AWS Glue Data Quality
<a name="using-apis-runs"></a>

**Para iniciar uma execução do AWS Glue Data Quality:**

```
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']
```

Lembre-se de que você pode passar um parâmetro `pushDownPredicate` ou `catalogPartitionPredicate` para garantir que sua execução de qualidade de dados só tenha como objetivo um conjunto específico de partições na tabela do catálogo. Por exemplo:

```
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>',
    ]
)
```

 Você também pode configurar como as regras compostas em seu conjunto de regras são avaliadas, no nível ROW ou COLUMN. Para obter mais informações sobre o funcionamento das regras compostas, consulte [How composite rules work](dqdl.md#dqdl-syntax-composite-rules) na documentação. 

 Exemplo de como definir o método de avaliação de regra composta em sua solicitação: 

```
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>',
    ]
)
```

 **Para obter informações sobre uma execução do AWS Glue Data Quality:** 

```
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
```

**Para obter os resultados de uma execução do AWS Glue Data Quality:**

Para uma determinada execução do AWS Glue Data Quality, você pode extrair os resultados da avaliação da execução usando o seguinte método:

```
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'])
```

**Para listar todas as suas execuções do AWS Glue Data Quality:**

```
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
```

Você pode modificar a cláusula de filtro para só mostrar os resultados entre determinadas horas ou os resultados de execuções em tabelas específicas.

**Para interromper uma execução contínua do AWS Glue Data Quality:**

```
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
```

## Trabalhar com resultados do AWS Glue Data Quality
<a name="using-apis-results"></a>

 **Para obter os resultados de uma execução do AWS Glue Data Quality:** 

```
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
```

 **Para ver as estatísticas coletadas para um determinado resultado de qualidade de dados:** 

```
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
```

 **Para visualizar a série temporal de uma estatística coletada em várias execuções de qualidade de dados:** 

```
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
```

 **Para visualizar o modelo de detecção de anomalias para uma estatística específica:** 

```
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
```

 **Para excluir um ponto de dados da linha de base de detecção de anomalias de seu modelo estatístico:** 

```
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
```

 **Para visualizar o status do treinamento do modelo de detecção de anomalias para uma estatística específica:** 

```
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
```

 **Para excluir todos os resultados de uma rodada específica de qualidade de dados das linhas de base de detecção de anomalias:** 

```
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
```

 **Para obter os resultados de uma determinada rodada qualidade de dados e exibir os resultados:** 

 Com um `runID` do AWS Glue Data Quality, você pode extrair o `resultID` para obter os resultados reais, conforme apresentado abaixo: 

```
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'])
```

# Configurar alertas, implantações e agendamentos
<a name="data-quality-alerts"></a>

Este tópico descreve como configurar alertas, implantações e agendamentos para o AWS Glue Data Quality.

**Contents**
+ [Configurar alertas e notificações na integração com o Amazon EventBridge](#data-quality-alerts-eventbridge)
  + [Opções de configuração adicionais para o padrão de eventos](#data-quality-alerts-eventbridge-config-options)
  + [Formatar notificações como e-mails](#data-quality-alerts-eventbridge-format-notifications)
+ [Configurar alertas e notificações na integração com o CloudWatch](#data-quality-alerts-cloudwatch)
+ [Consultar resultados de qualidade de dados para criar painéis](#data-quality-alerts-querying-results)
+ [Implantar regras de qualidade de dados usando o AWS CloudFormation](#data-quality-deploy-cfn)
+ [Agendar regras de qualidade de dados](#data-quality-scheduling-rules)

## Configurar alertas e notificações na integração com o Amazon EventBridge
<a name="data-quality-alerts-eventbridge"></a>

O AWS Glue Data Quality é compatível com a publicação de eventos do EventBridge, que são emitidos após a conclusão de uma execução de avaliação do conjunto de regras de qualidade de dados. Com isso, você pode facilmente configurar alertas quando as regras de qualidade de dados não forem atendidas.

Aqui está um exemplo de evento quando você avalia os conjuntos de regras de qualidade de dados no catálogo de dados. Com essas informações, você pode revisar os dados disponibilizados com o Amazon EventBridge. Você pode emitir chamadas de API adicionais para obter mais detalhes. Por exemplo, chame a API `get_data_quality_result` com o ID do resultado para obter os detalhes de uma execução específica.

```
{
    "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
    }
}
```

Este é um exemplo de evento que é publicado quando você avalia conjuntos de regras de qualidade de dados nos cadernos do AWS Glue ETL ou do 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
    }
}
```

Para execuções de avaliação de qualidade de dados no catálogo de dados e em trabalhos de ETL, a opção **Publicar métricas no Amazon CloudWatch**, selecionada por padrão, deve permanecer selecionada para que a publicação do EventBridge funcione.

**Configurar eventos e notificações**

![\[Propriedades de qualidade de dados no AWS CloudFormation\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-properties-cfn.png)


Para receber os eventos emitidos e definir destinos, você deve configurar as regras do Amazon EventBridge. Para criar regras:

1. Abra o console do Amazon EventBridge.

1. Escolha **Regras** na seção **Barramentos** da barra de navegação.

1. Selecione **Create Rule**.

1. Em **Definir detalhes da regra**:

   1. Em Nome, insira `myDQRule`.

   1. Insira uma descrição (opcional).

   1. Para barramento de eventos, selecione seu barramento de eventos. Se você não tiver um, deixe o padrão.

   1. Em **Tipo de regra**, escolha **Regra com um padrão de eventos**.

1. Em **Criar padrão de eventos**: 

   1. Como a origem dos eventos, selecione **Eventos da AWS ou eventos de parceiros do EventBridge**.

   1. Pule a seção de exemplo de evento.

   1. Como método de criação, selecione **Usar formulário de padrão**.

   1. Para padrão de eventos:

      1. Selecione **Serviços da AWS** para Fonte do evento.

      1. Selecione **Glue Data Quality** para serviço da AWS.

      1. Selecione **Resultados da avaliação de qualidade de dados disponíveis** para Tipo de evento.

      1. Selecione **FALHA** para Estados específicos. Em seguida, você verá um padrão de evento como este:

         ```
         {
           "source": ["aws.glue-dataquality"],
           "detail-type": ["Data Quality Evaluation Results Available"],
           "detail": {
             "state": ["FAILED"]
           }
         }
         ```

      1. Para obter mais opções de conexão, consulte [Opções de configuração adicionais para o padrão de eventos](#data-quality-alerts-eventbridge-config-options).

1. Em **Selecionar alvos**:

   1. Em **Tipos de destino**, selecione **Serviço da AWS**.

   1. **Use o menu suspenso **Selecionar um destino** para escolher o AWS serviço ao qual você deseja se conectar (SNS, Lambda, SQS etc.) e escolha Avançar.**

1. Em **Configurar tag(s)**, clique em **Adicionar novas tags** para adicionar tags opcionais e escolha **Avançar**.

1. Você verá uma página de resumo de todas as seleções. Escolha **Criar regra** na parte inferior.

### Opções de configuração adicionais para o padrão de eventos
<a name="data-quality-alerts-eventbridge-config-options"></a>

Além de filtrar o evento baseado em sucesso ou fracasso, talvez você queira filtrar ainda mais os eventos com base em outros parâmetros.

Para fazer isso, vá para a seção Padrão de eventos e selecione **Editar padrão** para especificar parâmetros adicionais. Observe que os campos no padrão de eventos diferenciam maiúsculas de minúsculas. Estes são exemplos de configuração do padrão de eventos.

Para capturar eventos de uma tabela específica avaliando conjuntos de regras específicos, use esse tipo de padrão:

```
{
  "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"]
  }
}
```

Para capturar eventos de trabalhos específicos na experiência de ETL, use esse tipo de padrão:

```
{
  "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"]
  }
}
```

Para capturar eventos com uma pontuação abaixo de um limite específico (por exemplo, 70%):

```
{
  "source": ["aws.glue-dataquality"],
  "detail-type": ["Data Quality Evaluation Results Available"],
  "detail": {
    "score": [{
      "numeric": ["<=", 0.7]
    }]
  }
}
```

### Formatar notificações como e-mails
<a name="data-quality-alerts-eventbridge-format-notifications"></a>

Às vezes, você precisa enviar uma notificação por e-mail bem formatada para as equipes da sua empresa. Você pode usar o Amazon EventBridge e o AWS Lambda para fazer isso.

![\[Notificação de qualidade de dados formatada como um e-mail\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data_quality_sample_email.png)


O exemplo de código a seguir pode ser usado para formatar as notificações de qualidade de dados para gerar 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')
    }
```

## Configurar alertas e notificações na integração com o CloudWatch
<a name="data-quality-alerts-cloudwatch"></a>

Nossa abordagem recomendada é configurar alertas de qualidade de dados usando o Amazon EventBridge, porque o Amazon EventBridge só precisa ser configurado uma única vez para alertar os clientes. Porém, alguns clientes preferem o Amazon CloudWatch por sua familiaridade. Para esses clientes, oferecemos a integração com o Amazon CloudWatch.

Cada avaliação do AWS Glue Data Quality emite um par de métricas denominadas `glue.data.quality.rules.passed` (indicando o número de regras aprovadas) e `glue.data.quality.rules.failed` (indicando o número de regras que falharam) por execução de qualidade de dados. Você pode usar essa métrica emitida para criar alarmes para avisar os usuários se uma determinada execução de qualidade de dados ficar abaixo de um limite. Para começar a configurar um alarme que enviaria um e-mail por meio de uma notificação do Amazon SNS, siga as etapas abaixo:

Para começar a configurar um alarme que enviaria um e-mail por meio de uma notificação do Amazon SNS, siga as etapas abaixo:

1. Abra o console do Amazon CloudWatch.

1. Escolha **Todas as métricas** em **Métricas**. Você verá um namespace adicional em Namespaces personalizados intitulado Glue Data Quality.
**nota**  
Ao iniciar uma execução do AWS Glue Data Quality, certifique-se de que a caixa de seleção **Publicar métricas no Amazon CloudWatch** esteja marcada. Caso contrário, as métricas dessa execução específica não serão publicadas no Amazon CloudWatch.

   No namespace `Glue Data Quality`, você pode ver as métricas que estão sendo emitidas por tabela, por conjunto de regras. Para a finalidade deste tópico, usaremos a regra `glue.data.quality.rules.failed` e o alarme se esse valor ultrapassar 1 (indicando que, se observarmos um número de avaliações de regras com falha maior do que 1, queremos ser notificados).

1. Para criar o alarme, escolha **Todos os alarmes** em **Alarmes**.

1. Selecione **Criar alarme**.

1. Escolha **Selecionar métrica**.

1. Selecione a métrica `glue.data.quality.rules.failed` correspondente à tabela que você criou e depois escolha **Selecionar métrica**.

1. Na guia **Especificar métricas e condições**, na seção **Métricas**:

   1. Em **Estatística**, selecione **Soma**.

   1. Em **Período**, escolha **1 minuto**.

1. Na seção **Condições**:

   1. Em **Tipo de limite**, escolha **Estático**.

   1. para **Sempre que glue.data.quality.rules.failed for...**, selecione **Maior/Igual**.

   1. Por **do que...** , insira **1** como o valor limite.

   Essas seleções implicam que, se a métrica `glue.data.quality.rules.failed` emitir um valor maior ou igual a 1, acionaremos um alarme. Porém, se não houver dados, nós a trataremos como aceitável.

1. Escolha **Próximo**.

1. Em **Configurar ações**:

   1. Em **Gatilho de estado do alarme**, escolha **Em alarme**.

   1. Em **Enviar uma notificação para o seguinte tópico do SNS**, escolha **Criar um novo tópico para enviar uma notificação por um novo tópico do SNS**.

   1. Em **Endpoints de e-mail que receberão a notificação**, insira o endereço de e-mail. Depois clique em **Criar tópico**.

   1. Escolha **Avançar**.

1. Em **Nome secreto**, insira `myFirstDQAlarm` e escolha **Avançar**.

1. Você verá uma página de resumo de todas as seleções. Escolha **Criar alarme** na parte inferior.

Agora você pode ver o alarme sendo criado no painel de alarmes do Amazon CloudWatch.

## Consultar resultados de qualidade de dados para criar painéis
<a name="data-quality-alerts-querying-results"></a>

Talvez você queira criar um painel para exibir seus resultados de qualidade de dados. Há duas maneiras de fazer isso:

**Configure o Amazon EventBridge com o seguinte códigopara gravar os dados no 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')
    }
```

Depois de gravar no Amazon S3, você pode usar os crawlers do AWS Glue para se registrar no Athena e consultar as tabelas.

**Configure um local no Amazon S3 durante uma avaliação de qualidade de dados:**

Ao executar tarefas de qualidade de dados no catálogo de dados do AWS Glue ou no AWS Glue ETL, você pode fornecer um local no Amazon S3 para gravar os resultados de qualidade de dados. Você pode usar a sintaxe abaixo para criar uma tabela referenciando o destino para o qual ler os resultados de qualidade dos dados.

Observe que você deve executar as consultas `CREATE EXTERNAL TABLE` e `MSCK REPAIR TABLE` separadamente.

```
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>;
```

Depois de criar a tabela acima, você poderá executar consultas analíticas usando o Amazon Athena.

## Implantar regras de qualidade de dados usando o AWS CloudFormation
<a name="data-quality-deploy-cfn"></a>

Você pode usar o AWS CloudFormation para criar regras de qualidade de dados. Para obter mais informações, consulte [AWS CloudFormation para o AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-with-cloudformation-templates.html). 

## Agendar regras de qualidade de dados
<a name="data-quality-scheduling-rules"></a>

Você pode agendar as regras de qualidade de dados usando os seguintes métodos:
+  Agende as regras de qualidade no dados do catálogo de dados: nenhum usuário de código pode usar essa opção para agendar facilmente suas verificações de qualidade de dados. O AWS O Glue Data Quality criará a agenda no Amazon EventBridge. Para agendar regras de qualidade de dados: 
  +  Navegue até o conjunto de regras e clique em **Executar**. 
  +  Na **Frequência de execução**, selecione a agenda desejada e forneça um **Nome de tarefa**. Esse nome de tarefa será o nome da sua agenda no EventBridge. 
+ Use o Amazon EventBridge e o AWS Step Functions para orquestrar avaliações e recomendações para regras de qualidade de dados.

# Criptografia de dados em repouso no AWS Glue Data Quality
<a name="data-quality-encryption"></a>

 O AWS Glue Data Quality fornece criptografia por padrão para proteger dados sensíveis do cliente em repouso usando chaves de criptografia de propriedade da AWS. 

## chaves de propriedade da AWS
<a name="w2aac49c74b9"></a>

 O AWS Glue Data Quality usa essas chaves para criptografar automaticamente os ativos do Data Quality dos clientes. Você não pode visualizar, gerenciar nem usar chaves de propriedade da AWS, tampouco auditar o uso delas. No entanto, você não precisa realizar nenhuma ação nem alterar nenhum programa para proteger as chaves que criptografam seus dados. Para obter mais informações, consulte [AWS owned keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk) no Guia do desenvolvedor do AWS KMS. 

 A criptografia de dados em repouso por padrão reduz a sobrecarga operacional e a complexidade envolvidas na proteção de dados confidenciais. Ao mesmo tempo, ela permite que você crie aplicações seguras que atendam aos rigorosos requisitos regulatórios e de conformidade de criptografia. 

 Embora você não possa desabilitar essa camada de criptografia nem selecionar um tipo alternativo de criptografia, é possível adicionar uma segunda camada de criptografia sobre as chaves de criptografia existentes pertencentes à AWS mediante a escolha de uma chave gerenciada pelo cliente ao criar seus recursos do Data Quality. 

## Chaves gerenciadas pelo cliente
<a name="data-quality-encryption-customer-managed-keys"></a>

 **Chaves gerenciadas pelo cliente**: o AWS Glue Data Quality é compatível com o uso de uma chave simétrica gerenciada pelo cliente que você cria, assume e gerencia. Isso adiciona uma segunda camada de criptografia sobre a criptografia existente pertencente à AWS. Como você tem controle total dessa camada de criptografia, é possível realizar tarefas como: 
+  Estabelecer e manter as políticas de chave 
+  Estabelecer e manter políticas do IAM 
+  Ativar e desativar políticas de chaves 
+  Alternar os materiais de criptografia de chave 
+  Adicionar etiquetas 
+  Criar réplicas de chaves 
+  Chaves de agendamento para exclusão 

 Para obter mais informações, consulte [Chaves gerenciadas pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) no Guia do desenvolvedor do AWS KMS. 

 A tabela a seguir resume como o AWS Glue Data Quality criptografa diferentes ativos do Data Quality. 


| Tipo de dados | Criptografia de chave de propriedade da AWS | Criptografia de chave gerenciada pelo cliente | 
| --- | --- | --- | 
|   **Conjunto de regras do Data Quality**   Cadeia de caracteres do conjunto de regras da DQDL que é indicada pelo conjunto persistente de regras do DQ. Por enquanto, esses conjuntos persistentes de regras são usados apenas na experiência do Catálogo de Dados do AWS Glue.   | Habilitado | Habilitado | 
|   **Resultados de regra/analisador do Data Quality**   Artefatos de resultado que contêm o status de aprovação/reprovação de cada regra em um conjunto de regras, bem como as métricas coletadas pelas regras e pelos analisadores.   | Habilitado | Habilitado | 
|   **Observações**   As observações são geradas quando há a detecção de uma anomalia nos dados. Elas contêm informações sobre os limites superior e inferior esperados, além de uma regra sugerida com base nesses limites. Se geradas, elas serão exibidas com os resultados do Data Quality.   | Habilitado | Habilitado | 
|   **Statistics**   Essa opção contém informações sobre métricas coletadas após avaliar os dados fornecidos por um conjunto de regras específico, como o valor da métrica (p. ex., RowCount, completude), nomes de colunas e outros metadados.   | Habilitado | Habilitado | 
|   **Modelos estatísticos de detecção de anomalias**   Os modelos estatísticos contêm a série temporal dos limites superior e inferior de uma determinada métrica gerada com base em avaliações anteriores dos dados do cliente.   | Habilitado | Habilitado | 

**nota**  
 O AWS Data Quality habilita automaticamente a criptografia em repouso usando chaves pertencentes à AWS para proteger dados de identificação pessoal sem nenhum custo. No entanto, AWS KMS há cobrança aplicável pelo uso de uma chave gerenciada pelo cliente. Para obter mais informações sobre precificação, consulte [Precificação do AWS KMS](https://aws.amazon.com/kms/pricing/).   
 Para obter mais informações sobre o AWS KMS, consulte [AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html). 

## Criar uma chave gerenciada pelo cliente
<a name="data-quality-encryption-customer-managed-key"></a>

 Você pode criar uma chave simétrica gerenciada pelo cliente usando o Console de gerenciamento da AWS ou as APIs do AWS KMS. 

**Para criar uma chave gerenciada pelo cliente:**
+  Siga as etapas em [Creating symmetric encryption AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk) no Guia do desenvolvedor do AWS Key Management Service. 

### Política de chave
<a name="data-quality-encryption-customer-managed-key-policy"></a>

 As políticas de chaves controlam o acesso à chave gerenciada pelo seu cliente. Cada chave gerenciada pelo cliente deve ter exatamente uma política de chaves, que contém declarações que determinam quem pode usar a chave e como pode usá-la. Ao criar a chave gerenciada pelo cliente, é possível especificar uma política de chave. Para obter mais informações, consulte [Key policies in AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) no Guia do desenvolvedor do AWS Key Management Service. 

 Para usar sua chave gerenciada pelo cliente com seus recursos do Data Quality, é necessário permitir as seguintes operações de API na política de chave: 
+  [https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html): descriptografa o texto cifrado que foi criptografado por uma chave do AWS KMS usando `GenerateDataKeyWithoutPlaintext`. 
+  [https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) – Fornecer os principais detalhes gerenciados pelo cliente para permitir que o Amazon Location valide a chave. 
+  [https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html): retorna uma chave de dados simétrica exclusiva para uso fora do AWS KMS. Essa operação retorna uma chave de dados criptografada com a chave do KMS de criptografia simétrica que você especifica. Os bytes na chave são aleatórios e não estão relacionados ao chamador ou à chave do KMS. Isso é usado para reduzir as chamadas do KMS que o cliente precisa fazer. 
+  [https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html): descriptografa o texto cifrado e, em seguida, o recriptografa inteiramente no AWS KMS. Você pode usar essa operação para alterar a chave do KMS sob a qual os dados são criptografados, como quando você [alterna manualmente](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#rotate-keys-manually) uma chave do KMS ou altera a chave do KMS que protege um texto cifrado. Você também pode usá-la para recriptografar o texto cifrado com a mesma chave do KMS, assim como para alterar o [contexto de criptografia](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) de um texto cifrado. 

 A seguir estão exemplos de declarações de política que você pode adicionar ao 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" : "*"
    }
]
```

### Observações sobre o uso de chaves do KMS no AWS Glue Data Quality
<a name="data-quality-encryption-kms-keys-notes"></a>

 O AWS Glue Data Quality não é compatível com transições de chave. Isso significa que se você criptografar seus ativos do Data Quality com a chave A e decidir mudar para a chave B, não vamos criptografar novamente os dados que foram criptografados com a chave A para usar a chave B. Você ainda poderá mudar para a chave B, mas precisará manter o acesso à chave A para acessar dados previamente criptografados com a chave A. 

 Para obter mais informações sobre como especificar permissões em uma política, consulte [Permissions for AWS services in key policies](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-services.html) no Guia do desenvolvedor do AWS Key Management Service. 

 Para obter mais informações sobre solução de problemas de acesso a chaves, consulte [Troubleshooting key access](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html) no Guia do desenvolvedor do AWS Key Management Service. 

## Criar uma configuração de segurança
<a name="data-quality-encryption-create-security-configuration"></a>

 No AWS Glue, o [recurso configurações de segurança](encryption-security-configuration.md) contém as propriedades que são necessárias quando você grava dados criptografados. 

**Para criptografar seus ativos de qualidade de dados:**

1.  Em **Configurações de criptografia**, em **Configurações avançadas**, escolha **Habilitar criptografia do Data Quality**. 

1.  Selecione sua chave do KMS ou escolha **Criar uma chave do AWS KMS**. 

![\[A captura de tela mostra a página Adicionar configuração de segurança. A opção Habilitar criptografia do Data Quality está selecionada.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data-quality-add-security-configuration.png)


## Contexto de criptografia do AWS Glue Data Quality
<a name="data-quality-encryption-context"></a>

 Um [contexto de criptografia](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) é um conjunto opcional de pares de chave/valor que pode conter informações contextuais adicionais sobre os dados. 

 O AWS KMS usa o contexto de criptografia como [dados autenticados adicionais](https://docs.aws.amazon.com/crypto/latest/userguide/cryptography-concepts.html#term-aad) para viabilizar a [criptografia autenticada](https://docs.aws.amazon.com/crypto/latest/userguide/cryptography-concepts.html#term-aad). Quando você inclui um contexto de criptografia em uma solicitação para criptografar dados, o AWS KMS vincula de forma criptográfica o contexto da criptografia aos dados criptografados. Para descriptografar os dados, você inclui o mesmo contexto de criptografia na solicitação. 

### Exemplo de contexto de criptografia do AWS 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"
}
```

### Uso do contexto de criptografia para monitoramento
<a name="data-quality-encryption-context-monitoring"></a>

 Ao usar uma chave simétrica gerenciada pelo cliente para criptografar seu rastreador ou sua coleção de geocercas, você também pode usar o contexto de criptografia nos registros e logs de auditoria para identificar como a chave gerenciada pelo cliente está sendo usada. O contexto de criptografia também aparece nos logs gerados pelo AWS CloudTrail ou Amazon CloudWatch Logs. 

## Monitoramento das suas chaves de criptografia para o AWS Glue Data Quality
<a name="data-quality-monitoring-encryption-keys"></a>

 Ao usar uma chave do AWS KMS gerenciada pelo cliente com seus recursos do AWS Glue Data Quality, você pode usar o AWS CloudTrail ou o Amazon CloudWatch Logs para rastrear as solicitações que o AWS Glue Data Quality envia para o AWS KMS. 

 Os exemplos a seguir são eventos do AWS CloudTrail para `GenerateDataKeyWithoutPlainText` e `Decrypt` para monitorar as operações do KMS chamadas pelo AWS Glue Data Quality para acessar dados criptografados por sua chave gerenciada pelo cliente. 

 **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"
}
```

## Saiba mais
<a name="data-quality-encryption-learn-more"></a>

 Os recursos a seguir fornecem mais informações sobre a criptografia de dados em repouso. 
+  Para obter mais informações sobre [AWS Key Management Service basic concepts](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html), consulte o Guia do desenvolvedor do AWS Key Management Service. 
+  Para obter mais informações sobre [Security best practices for AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/best-practices.html) consulte o Guia do desenvolvedor do AWS Key Management Service. 

# Solução de problemas de erros do AWS Glue Data Quality
<a name="data-quality-trouble"></a>

Se você encontrar erros no AWS Glue Data Quality, use as seguintes soluções para ajudar você a encontrar a fonte dos problemas e corrigi-los.

**Contents**
+ [Erro: módulo AWS Glue Data Quality ausente](#data-quality-trouble-error-1)
+ [Erro: permissões insuficientes do AWS Lake Formation](#data-quality-trouble-error-2)
+ [Erro: os conjuntos de regras não têm nomes exclusivos](#data-quality-trouble-error-3)
+ [Erro: tabelas com caracteres especiais](#data-quality-trouble-error-4)
+ [Erro: erro de estouro com um conjunto de regras grande](#data-quality-trouble-error-5)
+ [Erro: o status geral da regras é com falha](#data-quality-trouble-error-6)
+ [AnalysisException: não é possível verificar a existência de banco de dados padrão](#data-quality-trouble-error-7)
+ [Mensagem de erro: o mapa de chaves fornecido não é adequado para os quadros de dados fornecidos](#data-quality-trouble-error-8)
+ [Exceção na classe de usuário: java.lang.RuntimeException: falha ao buscar dados. Verificar os logs do CloudWatch para obter mais detalhes](#data-quality-trouble-error-9)
+ [ERRO DE INICIALIZAÇÃO: erro ao baixar o S3 para o bucket](#data-quality-trouble-error-10)
+ [InvalidInputException (status: 400): as regras DataQuality não podem ser analisadas](#data-quality-trouble-error-11)
+ [Erro: o Eventbridge não está acionando trabalhos do Glue DQ com base na agenda que eu configurei](#data-quality-trouble-error-12)
+ [Erros de CustomSQL](#data-quality-trouble-error-13)
+ [Regras dinâmicas](#data-quality-trouble-error-14)
+ [Exceção na classe de usuário: org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException](#data-quality-trouble-error-15)
+ [UNCLASSIFIED\$1ERROR; IllegalArgumentException: erro de análise: nenhuma regra ou analisador fornecido, nenhuma alternativa viável na entrada](#data-quality-trouble-error-16)

## Erro: módulo AWS Glue Data Quality ausente
<a name="data-quality-trouble-error-1"></a>

**Mensagem de erro**: nenhum módulo denominado 'awsgluedq'.

**Resolução**: esse erro ocorre quando você executa o AWS Glue Data Quality em uma versão não compatível. O AWS Glue Data Quality é compatível com o Glue versão 3.0 ou posterior.

## Erro: permissões insuficientes do AWS Lake Formation
<a name="data-quality-trouble-error-2"></a>

**Mensagem de erro**: exceção na classe de usuário `com.amazonaws.services.glue.model.AccessDeniedException`: Permissões insuficientes do Lake Formation em impact\$1sdg\$1involvement (Serviço: AWS Glue; Código de status: 400; Código de erro: AccessDeniedException; ID da solicitação: 465ae693-b7ba-4df0-a4e4-6b17xxxxxxxx; Proxy: nulo).

**Resolução**: você precisa fornecer permissões suficientes no AWS Lake Formation.

## Erro: os conjuntos de regras não têm nomes exclusivos
<a name="data-quality-trouble-error-3"></a>

**Mensagem de erro**: exceção na classe de usuário:... services.glue.model.AlreadyExistsException: já existe outro conjunto de regras com o mesmo nome.

**Resolução**: os conjuntos de regras precisam ser exclusivos.

## Erro: tabelas com caracteres especiais
<a name="data-quality-trouble-error-4"></a>

**Mensagem de erro**: exceção na classe de usuário: org.apache.spark.sql.AnalysisException: não é possível resolver colunas de entrada dadas de ''C'': [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]; Linha 1 posição 44;.

**Resolução**: existe uma limitação atual de que o AWS Glue Data Quality não pode ser executado em tabelas com caracteres especiais, como ".".

## Erro: erro de estouro com um conjunto de regras grande
<a name="data-quality-trouble-error-5"></a>

**Mensagem de erro**: exceção na classe de usuário: java.lang.StackOverflowError.

**Resolução**: se você tiver um conjunto de regras grande com mais de 2 mil regras, poderá encontrar esse problema. Divida as regras em vários conjuntos de regras.

## Erro: o status geral da regras é com falha
<a name="data-quality-trouble-error-6"></a>

**Condição de erro**: meu conjunto de regras teve sucesso, mas o status geral de regras é com falha.

**Resolução**: esse erro provavelmente ocorreu porque você escolheu a opção de publicar métricas no Amazon CloudWatch durante a publicação. Se o conjunto de dados estiver em uma VPC, ela talvez não permita que o AWS Glue publique métricas no Amazon CloudWatch. Nesse caso, você >precisa configurar um endpoint para a VPC acessar o Amazon CloudWatch.

## AnalysisException: não é possível verificar a existência de banco de dados padrão
<a name="data-quality-trouble-error-7"></a>

 **Condição de erro**: AnalysisException: não foi possível verificar a existência de um banco de dados padrão: com.amazonaws.services.glue.model.AccessDeniedException: permissões insuficientes do Lake Formation no padrão (Serviço: AWS Glue; Código de status: 400; Código de erro: AccessDeniedException; ID da solicitação: XXXXXXXX-XXXX-XXXXXXXXXXXX; Proxy: nulo) 

**Resolução**: na integração do catálogo do trabalho do AWS Glue, o AWS Glue sempre tenta verificar se o banco de dados padrão existe ou não está usando a `GetDatabase API` do AWS Glue. Quando a permissão do `DESCRIBE` Lake Formation não é concedida, ou a permissão `GetDatabase IAM` é concedida e depois o trabalho falha ao verificar a existência do banco de dados padrão. 

 Para resolver: 

1.  Adicione a permissão `DESCRIBE` no Lake Formation para o banco de dados padrão. 

1.  Configure o perfil do IAM anexado ao trabalho do AWS Glue como criador de banco de dados no Lake Formation. Isso criará automaticamente um banco de dados padrão e concederá ao perfil as permissões necessárias do Lake Formation. 

1.  Desabilite a opção `--enable-data-catalog`. (É mostrado como **Usar o Data Catalog como metastore do Hive** no AWS Glue Studio). 

   Se você não precisar da integração do Data Catalog com o Spark SQL no trabalho, poderá desabilitá-la.

## Mensagem de erro: o mapa de chaves fornecido não é adequado para os quadros de dados fornecidos
<a name="data-quality-trouble-error-8"></a>

 **Condição de erro**: o mapa de chaves fornecido não é adequado para os quadros de dados fornecidos. 

 **Resolução**: você está usando o tipo de regra **DatasetMatch** e o tipo de regra e as chaves de união têm duplicatas. Suas chaves de união devem ser exclusivas e não devem ser NULL. Nos casos em que você não puder ter chaves de união exclusivas, considere usar outros tipos de regras, como **AggregateMatch**, para fazer a correspondência com os dados resumidos. 

## Exceção na classe de usuário: java.lang.RuntimeException: falha ao buscar dados. Verificar os logs do CloudWatch para obter mais detalhes
<a name="data-quality-trouble-error-9"></a>

 **Condição de erro**: exceção na classe de usuário: java.lang.RuntimeException: falha ao buscar dados. Verifique os logs do CloudWatch para obter mais detalhes. 

 **Resolução**: isso acontece quando você cria regras de DQ em uma tabela baseada no Amazon S3 que é comparada com o Amazon RDS ou o Amazon Redshift. Nesses casos, o AWS Glue não consegue carregar a conexão. Em vez disso, tente configurar a regra do DQ no Amazon Redshift ou no conjunto de dados do Amazon RDS. Esse é um erro conhecido. 

## ERRO DE INICIALIZAÇÃO: erro ao baixar o S3 para o bucket
<a name="data-quality-trouble-error-10"></a>

 **Condição de erro**: ERRO DE INICIALIZAÇÃO: erro ao baixar o S3 para o bucket: `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) `. 

 **Resolução**: as permissões no perfil passadas para o AWS Glue Data Quality precisam permitir a leitura do local anterior do Amazon S3. Essa política do IAM deve ser anexada ao perfil: 

```
{
  "Sid": "allowS3",
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::aws-glue-ml-data-quality-assets-<region>/*"
}
```

 Consulte a [Autorização de qualidade de dados](https://docs.aws.amazon.com/glue/latest/dg/data-quality-authorization.html) para ver as permissões detalhadas. Essas bibliotecas são necessárias para avaliar a qualidade dos dados de seus conjuntos de dados. 

## InvalidInputException (status: 400): as regras DataQuality não podem ser analisadas
<a name="data-quality-trouble-error-11"></a>

 **Condição de erro**: InvalidInputException (status: 400): as regras DataQuality não podem ser analisadas. 

 **Resolução**: existem muitas possibilidades para esse erro. Uma possibilidade é que suas regras tenham aspas simples. Verifique se elas estão entre aspas duplas. Por exemplo: 

```
Rules = [
ColumnValues "tipo_vinculo" in ["CODO", "DOCO", "COCO", "DODO"] AND "categoria" = 'ES"
    AND "cod_bandera" = 'CEP'
```

 Altere isso para: 

```
Rules = [
(ColumnValues "tipovinculo" in [ "CODO", "DOCO", "COCO", "DODO"]) AND (ColumnValues "categoria" = "ES") 
    AND (ColumnValues "codbandera" = "CEP")
]
```

## Erro: o Eventbridge não está acionando trabalhos do Glue DQ com base na agenda que eu configurei
<a name="data-quality-trouble-error-12"></a>

 **Condição de erro**: o Eventbridge não está acionando trabalhos do AWS Glue Data Quality com base na agenda que eu configurei. 

 **Resolução**: o perfil que aciona o trabalho pode não ter as permissões certas. Verifique se o perfil que você está usando para iniciar os trabalhos tem as permissões mencionadas em [Configuração do IAM requerida para programar execuções de avaliação](https://docs.aws.amazon.com/glue/latest/dg/data-quality-authorization.html#data-quality-iam-setup-evaluation-runs). 

## Erros de CustomSQL
<a name="data-quality-trouble-error-13"></a>

**Condição de erro**:` 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`.

 **Resolução**: a consulta SQL é válida, mas verifique se as colunas selecionadas pertencem apenas à tabela primária. Selecionar funções agregadas como sum, count on the columns from the primary pode resultar nesse erro. 



**Condição de erro**: ` There was a problem when executing your SQL statement: cannot resolve "Col"`.

 **Resolução**: essa coluna não está presente na tabela primária. 



**Condição de erro**:` 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"`. 

 **Resolução**: em consultas SQL, ao unir a tabela primária com outras tabelas de referência, verifique se a instrução de selecionar tem apenas nomes de colunas da tabela primária para gerar resultados em nível de linha para a tabela primária. 

## Regras dinâmicas
<a name="data-quality-trouble-error-14"></a>

 **Condição de erro**`: Dynamic rules require job context, and cannot be evaluated in interactive session or data preview.`.

**Causa:** essa mensagem de erro pode aparecer nos resultados da visualização de dados ou em outras sessões interativas quando as regras dinâmicas do DQ estiverem presentes no conjunto de regras. As regras dinâmicas fazem referência a métricas históricas associadas a um determinado nome de trabalho e contexto de avaliação. Portanto, não podem ser avaliadas em sessões interativas. 

 **Resolução**: a execução de trabalho do AWS Glue produzirá métricas históricas, que podem ser referenciadas em execuções posteriores do mesmo trabalho. 

 **Condição de erro**: 
+  ` [RuleType] rule only supports simple atomic operands in thresholds.`. 
+  `Function last not yet implemented for [RuleType] rule.` 

 **Resolução**: as regras dinâmicas geralmente são compatíveis com todos os tipos de regras de DQDL em expressões numéricas (consulte [Referência de DQDL](dqdl.md)). No entanto, algumas regras que produzem várias métricas, ColumnValues e ColumnLength, ainda não são compatíveis. 

**Condição de erro**:` Binary expression operands must resolve to a single number.`. 

**Causa**: as regras dinâmicas são compatíveis com expressões binárias, como `RowCount > avg(last(5)) * 0.9`. Nesse caso, a expressão binária é `avg(last(5)) * 0.9`. Essa regra é válida porque os dois operandos `avg(last(5))` e `0.9` se resolvem para um único número. `RowCount > last(5) * 0.9` é um exemplo incorreto, pois `last(5)` produzirá uma lista que não poderá ser comparada de forma significativa com a contagem de linhas atual. 

 **Resolução**: use funções de agregação para reduzir um operando com valores de lista para um único número. 

**Condição de erro**:
+  `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.` 

**Causa**: as regras dinâmicas podem ser usadas para comparar alguns atributos do conjunto de dados com os valores históricos. A última função permite a recuperação de vários valores históricos, se um argumento inteiro positivo for fornecido. Por exemplo, `last(5)` recuperará os últimos cinco valores mais recentes observados nas execuções de trabalho da sua regra. 

 **Resolução**: uma função de agregação precisa ser usada para reduzir esses valores a um único número para fazer uma comparação significativa com o valor observado na execução do trabalho atual. 

Exemplos válidos:
+ `RowCount >= avg(last(5))`
+ `RowCount > last(1)`
+ `RowCount < last()`

Exemplo inválido: `RowCount > last(5)`.

**Condição de erro**:
+  `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.` 

 **Resolução**: ao criar regras dinâmicas, você poderá usar a função de agregação `index` para selecionar um valor histórico em uma lista. Por exemplo, `RowCount > index(last(5)`, 1) verificará se a contagem de linhas observada no trabalho atual é estritamente maior do que a segunda contagem de linhas mais recente observada no trabalho. `index` é indexado em zero. 

**Condição de erro**:` IllegalArgumentException: Parsing Error: Rule Type: DetectAnomalies is not valid`. 

 **Resolução**: a detecção de anomalias só está disponível na versão 4.0 do AWS Glue. 

**Condição de erro**:` IllegalArgumentException: Parsing Error: Unexpected condition for rule of type ... no viable alternative at input ...`. 

 Observação: `...` é dinâmico. Exemplo: `IllegalArgumentException: Parsing Error: Unexpected condition for rule of type RowCount with number return type, line 4:19 no viable alternative at input '>last'`. 

 **Resolução**: a detecção de anomalias só está disponível na versão 4.0 do AWS Glue. 

## Exceção na classe de usuário: org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException
<a name="data-quality-trouble-error-15"></a>

 **Condição de erro**`: 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)` 

 **Causa:** você está usando o Apache Iceberg no Catálogo de Dados do AWS Glue e o atributo Input Format no Catálogo de Dados do AWS Glue está vazio. 

 **Resolução**: esse problema ocorre quando o tipo de regra CustomSQL é usado em sua regra de DQ. Uma maneira de corrigir isso é usar "primary" ou adicionar o nome do catálogo `glue_catalog.` a `<database>.<table> in Custom ruletype`. 

## UNCLASSIFIED\$1ERROR; IllegalArgumentException: erro de análise: nenhuma regra ou analisador fornecido, nenhuma alternativa viável na entrada
<a name="data-quality-trouble-error-16"></a>

 **Condição de erro**`: UNCLASSIFIED_ERROR; IllegalArgumentException: Parsing Error: No rules or analyzers provided., no viable alternative at input` 

 **Resolução**: o DQDL não é analisável. Existem alguns casos em que isso pode ocorrer. Se você estiver usando regras compostas, verifique se elas têm parênteses corretos. 

```
(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
```