

# Descoberta e catalogação de dados no AWS Glue
<a name="catalog-and-crawler"></a>

O AWS Glue Data Catalog é um repositório centralizado que armazena metadados sobre os conjuntos de dados da sua organização. Ele funciona como um índice para métricas de localização, esquema e runtime das suas fontes de dados. Os metadados são armazenados em tabelas de metadados, onde cada tabela representa um único armazenamento de dados. 

O Catálogo de Dados pode ser preenchido com a ajuda de um crawler, que verifica automaticamente suas fontes de dados e extrai metadados. Um crawler pode se conectar a fontes de dados internas (baseadas na AWS) e externas à AWS. 

Para obter mais informações sobre as fontes de dados compatíveis, consulte [Fontes de dados compatíveis para crawling](crawler-data-stores.md).

Também é possível criar tabelas no Catálogo de Dados manualmente definindo a estrutura da tabela, o esquema e a estrutura de particionamento de acordo com seus requisitos específicos.

Para obter mais informações sobre como criar manualmente tabelas de bancos de dados, consulte [Definir metadados manualmente](populate-dg-manual.md).

Use as informações no Catálogo de Dados para criar e monitorar seus trabalhos de ETL. O Catálogo de Dados se integra a outros serviços de analytics da AWS, fornecendo uma visão unificada das fontes de dados e facilitando o gerenciamento e a análise de dados.
+ Amazon Athena: armazene e consulte metadados da tabela no Catálogo de Dados para os dados do Amazon S3 usando SQL.
+ AWS Lake Formation: defina e gerencie centralmente políticas refinadas de acesso a dados e audite o acesso aos dados.
+ Amazon EMR: acesse fontes de dados definidas no Catálogo de Dados para processamento de big data.
+ Amazon SageMaker AI: crie, treine e implemente modelos de machine learning com rapidez e confiança.Principais recursos do Catálogo de Dados

A seguir estão os principais aspectos do Catálogo de Dados. 

Repositório de metadados  
 O Catálogo de Dados atua como um repositório central de metadados, armazenando informações sobre a localização, o esquema e as propriedades das suas fontes de dados. Esses metadados são organizados em bancos de dados e tabelas de forma semelhante a um catálogo de banco de dados relacional tradicional. 

Descoberta automática de dados  
 Os Crawler do AWS Glues podem descobrir e catalogar automaticamente fontes de dados novas ou atualizadas, reduzindo a sobrecarga do gerenciamento manual de metadados e garantindo que seu Catálogo de Dados permaneça atualizado. Ao catalogar suas fontes de dados, o Catálogo de Dados facilita que usuários e aplicações descubram e entendam os ativos de dados disponíveis em sua organização, promovendo a reutilização e a colaboração de dados.  
O catálogo de dados oferece suporte a uma ampla variedade de fontes de dados, incluindo Amazon S3, Amazon RDS, Amazon Redshift, Apache Hive e muito mais. Ele pode inferir e armazenar automaticamente metadados dessas fontes usando Crawler do AWS Glues.   
Para obter mais informações, consulte [Usar crawlers para preencher o catálogo de dados](add-crawler.md).

Gerenciamento de esquemas  
O Catálogo de Dados captura e gerencia automaticamente o esquema de suas fontes de dados, incluindo inferência, evolução e controle de versão do esquema. É possível atualizar os esquemas e as partições no Catálogo de Dados usando trabalhos do AWS Glue ETL. 

Otimização de tabelas  
Para obter uma melhor performance de leitura por serviços de analytics da AWS, como o Amazon Athena e o Amazon EMR e trabalhos de ETL do AWS Glue, o Catálogo de Dados oferece compactação gerenciada (um processo que compacta pequenos objetos do Amazon S3 em objetos maiores) para tabelas do Iceberg no Catálogo de Dados. Você pode usar o console do AWS Glue, o console do AWS Lake Formation, a AWS CLI ou a API da AWS para habilitar ou desabilitar a compactação de tabelas individuais do Iceberg que estão no Catálogo de Dados.  
Para obter mais informações, consulte [Otimizar tabelas Iceberg](table-optimizers.md).

Estatísticas de colunas  
 Você pode calcular estatísticas em nível de coluna para tabelas do Catálogo de Dados em formatos de dados como Parquet, ORC, JSON, ION, CSV e XML sem precisar configurar pipelines de dados adicionais. As estatísticas de colunas ajudam você a entender os perfis de dados obtendo insights sobre os valores em uma coluna. O Catálogo de Dados possibilita a geração de estatísticas para valores de colunas, como valor mínimo, valor máximo, valores nulos totais, valores distintos totais, comprimento médio dos valores e ocorrências totais de valores reais.   
Para obter mais informações, consulte [Otimizar a performance da consulta usando estatísticas de coluna](column-statistics.md).

Linhagem de dados  
O Catálogo de Dados mantém um registro das transformações e operações realizadas em seus dados, fornecendo informações sobre a linhagem de dados. Essas informações de linhagem são valiosas para auditoria, conformidade e compreensão da proveniência dos dados.

Integração com outros serviços da AWS  
O catálogo de dados se integra perfeitamente a outros serviços da AWS, como AWS Lake Formation, Amazon Athena, Amazon Redshift Spectrum e Amazon EMR. Essa integração permite que você consulte e analise dados em vários armazenamentos de dados usando uma camada de metadados única e consistente.

Segurança e controle de acesso  
O AWS Glue se integra ao AWS Lake Formation para oferecer suporte ao controle de acesso refinado aos recursos do Catálogo de Dados, permitindo que você gerencie permissões e proteja o acesso aos seus ativos de dados com base nas políticas e requisitos da sua organização. O AWS Glue se integra ao AWS Key Management Service (AWS KMS) para criptografar metadados armazenados no Catálogo de Dados. 

Visões materializadas   
O Catálogo de Dados suporta visões materializadas do Apache Iceberg, que são tabelas gerenciadas que armazenam resultados pré-computados de consultas SQL e são atualizadas automaticamente conforme os dados de origem subjacentes são alterados. As visões materializadas simplificam os pipelines de transformação de dados e aceleram o desempenho das consultas ao eliminar a computação redundante.  
Você pode criar visões materializadas usando o Apache Spark SQL no AWS Glue versão 5.1 e posterior, no Amazon EMR versão 7.12.0 e posterior e no Amazon Athena. O Catálogo de Dados monitora automaticamente as tabelas de origem e atualiza as visões materializadas usando a infraestrutura de computação gerenciada. Os mecanismos do Spark no AWS Glue, no Amazon EMR e no Amazon Athena podem reescrever consultas automaticamente para usar visões materializadas quando elas oferecem melhor desempenho.  
As visões materializadas são armazenadas como tabelas do Apache Iceberg em buckets do Tabelas do Amazon S3 ou buckets de uso geral do Amazon S3 em sua conta, tornando-as acessíveis por meio de vários mecanismos de consulta. O Catálogo de Dados gerencia todos os aspectos do ciclo de vida da visão materializada, incluindo agendamento automático de atualização, atualizações incrementais e gerenciamento de metadados.  
Para obter mais informações, consulte Usar visões materializadas com o AWS Glue e Usar visões materializadas com o Amazon EMR.

**Topics**
+ [Preencher o AWS Glue Data Catalog](populate-catalog-methods.md)
+ [Preencher e gerenciar tabelas transacionais](populate-otf.md)
+ [Gerenciar o Catálogo de Dados](manage-catalog.md)
+ [Acessar o Catálogo de Dados](access_catalog.md)
+ [Práticas recomendadas do Catálogo de Dados do AWS Glue](best-practice-catalog.md)
+ [Monitorar métricas de uso do Catálogo de Dados do Amazon CloudWatch](data-catalog-cloudwatch-metrics.md)
+ [Registro de esquemas do AWS Glue](schema-registry.md)

# Preencher o AWS Glue Data Catalog
<a name="populate-catalog-methods"></a>

É possível preencher o AWS Glue Data Catalog usando os seguintes métodos:
+ Crawler do AWS Glue: um Crawler do AWS Glue pode descobrir e catalogar automaticamente fontes de dados, como bancos de dados, data lakes e dados de streaming. Os crawlers são o método mais comum e recomendado para preencher o Catálogo de Dados, pois eles podem descobrir e inferir automaticamente metadados de uma ampla variedade de fontes de dados.
+  Adicionar metadados manualmente: é possível definir manualmente bancos de dados, tabelas e detalhes de conexão e adicioná-los ao Catálogo de Dados usando o console do AWS Glue, o console do Lake Formation, a AWS CLI ou as APIs do AWS Glue. A entrada manual é útil quando você deseja catalogar fontes de dados que não podem ser obtidas por crawling. 
+ Integração com outros serviços da AWS: é possível preencher o catálogo de dados com metadados de serviços como o AWS Lake Formation e o Amazon Athena. Esses serviços podem descobrir e registrar fontes de dados no Catálogo de Dados. 
+  Preencher a partir de um repositório de metadados existente: se você tiver um repositório de metadados existente, como o Apache Hive Metastore, poderá usar o AWS Glue para importar esses metadados para o Catálogo de Dados. Para obter mais informações, consulte [Migração entre o Hive Metastore e o AWS Glue Data Catalog](https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/Hive_metastore_migration) no GitHub.

**Topics**
+ [Usar crawlers para preencher o catálogo de dados](add-crawler.md)
+ [Definir metadados manualmente](populate-dg-manual.md)
+ [Integrar com as Tabelas do Amazon S3](glue-federation-s3tables.md)
+ [Integração a outros serviços da AWS](populate-dc-other-services.md)
+ [Configurações do Catálogo de Dados](console-data-catalog-settings.md)

# Usar crawlers para preencher o catálogo de dados
<a name="add-crawler"></a>

Você pode usar um Crawler do AWS Glue para preencher o AWS Glue Data Catalog com bancos de dados e tabelas. Este é o principal método usado pela maioria dos usuários do AWS Glue. Um crawler pode rastrear vários armazenamentos de dados em uma única execução. Após a conclusão, o crawler cria ou atualiza uma ou mais tabelas no Data Catalog. As tarefas de extração, transformação e carregamento (ETL) que você define no AWS Glue usam essas tabelas do Data Catalog como fontes e destinos. O trabalho de ETL lê e grava os armazenamentos de dados que são especificados nas tabelas do Data Catalog de fonte e de destino.

## Fluxo de trabalho
<a name="crawler-workflow"></a>

O seguinte diagrama de fluxo de trabalho mostra como os crawlers do AWS Glue interagem com os armazenamentos de dados e outros elementos para preencher o Data Catalog.

![\[Fluxo de trabalho que mostra como o crawler do AWS Glue preenche o Data Catalog em cinco etapas básicas.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/PopulateCatalog-overview.png)


Veja a seguir o fluxo de trabalho geral sobre como um crawler preenche o AWS Glue Data Catalog:

1. Um crawler executa todos os *classificadores* personalizados que você escolhe para inferir o formato e o esquema dos seus dados. Você fornece o código para classificadores personalizados, e eles são executados na ordem especificada.

   O primeiro classificador personalizado a reconhecer com sucesso a estrutura de dados é usado para criar um esquema. Os classificadores personalizados em posições inferiores na lista são ignorados.

1. Se nenhum classificador personalizado corresponder ao esquema dos seus dados, os classificadores integrados tentarão reconhecê-lo. Um exemplo de um classificador integrado é um que reconhece JSON.

1. O crawler se conecta ao armazenamento de dados. Alguns armazenamentos de dados requerem propriedades de conexão para o acesso ao crawler.

1. O esquema inferido é criado para os seus dados.

1. O crawler grava os metadados no Data Catalog. Uma definição de tabela contém metadados sobre os dados no seu armazenamento de dados. A tabela é gravada em um banco de dados, que é um contêiner de tabelas no Data Catalog. Os atributos de uma tabela incluem a classificação, que é um rótulo criado pelo classificador que inferiu o esquema da tabela.

**Topics**
+ [Fluxo de trabalho](#crawler-workflow)
+ [Como funcionam os crawlers](#crawler-running)
+ [Como um crawler determina quando criar partições?](#crawler-s3-folder-table-partition)
+ [Fontes de dados compatíveis para crawling](crawler-data-stores.md)
+ [Pré-requisitos do crawler](crawler-prereqs.md)
+ [Definir e gerenciar classificadores](add-classifier.md)
+ [Configurar um crawler](define-crawler.md)
+ [Programar um crawler](schedule-crawler.md)
+ [Visualizar resultados e detalhes do crawler](console-crawlers-details.md)
+ [Personalizar o comportamento do Crawler](crawler-configuration.md)
+ [Tutorial: Adicionar um crawler do AWS Glue](tutorial-add-crawler.md)

## Como funcionam os crawlers
<a name="crawler-running"></a>

Quando um crawler é executado, ele obtém as ações a seguir para interrogar um armazenamento de dados:
+ **Classifica dados para determinar o formato, o esquema e as propriedades associadas de dados brutos** – Você pode configurar os resultados de classificação criando um classificador personalizado.
+ **Agrupa dados em tabelas ou partições ** – Os dados são agrupados com base na heurística do crawler.
+ **Grava metadados no Data Catalog**: você pode configurar como o crawler adiciona, atualiza e exclui tabelas e partições.

Ao definir um crawler, você escolhe um ou mais classificadores que avaliam o formato dos seus dados para inferir um esquema. Quando o crawler é executado, o primeiro classificador da sua lista a reconhecer com sucesso seu armazenamento de dados é usado para criar um esquema para a sua tabela. Você pode usar classificadores integrados ou definir o seu próprio. Você define os classificadores personalizados em uma operação separada, antes de definir os rastreamentos. O AWS Glue fornece classificadores integrados para inferir esquemas de arquivos comuns com formatos que incluem JSON, CSV e Apache Avro. Para ver a lista atual de classificadores integrados no AWS Glue, consulte [Classificadores integrados](add-classifier.md#classifier-built-in). 

As tabelas de metadados que um crawler cria ficam contidas em um banco de dados quando você define um crawler. Se o seu crawler não especificar um banco de dados, suas tabelas serão colocadas no banco de dados padrão. Além disso, cada tabela possui uma coluna de classificação preenchida pelo primeiro classificador que reconheceu com sucesso o armazenamento de dados.

Se o arquivo rastreado estiver compactado, o crawler precisará fazer download dele para processá-lo. Quando um crawler é executado, ele interroga os arquivos para determinar seu formato e tipo de compactação e grava essas propriedades no Data Catalog. Alguns formatos de arquivo (por exemplo, Apache Parquet) permitem que você compacte partes do arquivo à medida que ele é gravado. Para esses arquivos, os dados compactados são um componente interno do arquivo e o AWS Glue não preenche a propriedade `compressionType` quando grava tabelas no Data Catalog. Por outro lado, se um *arquivo inteiro* for compactado por um algoritmo de compactação (por exemplo, gzip), a propriedade `compressionType` será preenchida quando as tabelas forem gravadas no Data Catalog. 

O crawler gera os nomes das tabelas que ele cria. Os nomes das tabelas armazenadas no AWS Glue Data Catalog obedecem a estas regras:
+ São permitidos somente caracteres alfanuméricos e sublinhados (`_`).
+ Prefixos personalizados não podem conter mais do que 64 caracteres.
+ O comprimento máximo do nome não pode ser superior a 128 caracteres. O crawler trunca nomes gerados para ajustá-los de acordo com o limite.
+ Se forem encontrados nomes de tabelas duplicados, o crawler adicionará um sufixo de string hash a esse nome.

Se seu crawler for executado mais de uma vez (talvez em uma programação), ele procurará arquivos ou tabelas novos ou alterados no seu armazenamento de dados. A saída do crawler inclui novas tabelas e partições encontradas desde a execução anterior.

## Como um crawler determina quando criar partições?
<a name="crawler-s3-folder-table-partition"></a>

Quando um crawler do AWS Glue examina o armazenamento de dados do Amazon S3 e detecta várias pastas em um bucket, ele determina a raiz de uma tabela na estrutura de pastas e quais pastas são partições de uma tabela. O nome da tabela é baseado no prefixo do Amazon S3 ou no nome da pasta. Você fornece um **Include path** (caminho de inclusão) que indica o nível da pasta a ser rastreada. Quando a maioria dos esquemas em um nível de pasta é semelhante, o crawler cria partições de uma tabela em vez de duas tabelas separadas. Para influenciar o crawler a criar tabelas separadas, adicione a pasta raiz de cada tabela como um repositório de dados separado ao definir o crawler.

Por exemplo, considere a seguinte estrutura de pastas do Amazon S3.

![\[Retângulos em vários níveis representam uma hierarquia de pastas no Amazon S3. O retângulo superior é rotulado Vendas. Retângulo abaixo, que é rotulado ano=2019. Dois retângulos abaixo, que são rotulados mês=Jan e mês=Fev. Cada um desses retângulos tem dois retângulos abaixo deles, rotulados dia=1 e dia=2. Todos os quatro retângulos “dia” (inferiores) têm dois ou quatro arquivos sob eles. Todos os retângulos e arquivos estão conectados por linhas.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawlers-s3-folders.png)


Os caminhos para as quatro pastas de nível mais baixo são os seguintes:

```
S3://sales/year=2019/month=Jan/day=1
S3://sales/year=2019/month=Jan/day=2
S3://sales/year=2019/month=Feb/day=1
S3://sales/year=2019/month=Feb/day=2
```

Suponha que o destino do crawler esteja definido em `Sales` e que todos os arquivos no `day=n` têm o mesmo formato (por exemplo, JSON, não criptografado) e têm os mesmos esquemas, ou esquemas muito semelhantes. O crawler criará uma única tabela com quatro partições, com chaves de partição `year`, `month` e `day`.

No exemplo a seguir, considere a seguinte estrutura do Amazon S3:

```
s3://bucket01/folder1/table1/partition1/file.txt
s3://bucket01/folder1/table1/partition2/file.txt
s3://bucket01/folder1/table1/partition3/file.txt
s3://bucket01/folder1/table2/partition4/file.txt
s3://bucket01/folder1/table2/partition5/file.txt
```

Se os esquemas para arquivos em `table1` e `table2` forem semelhantes e um único armazenamento de dados estiver definido no crawler com **Include path** (Caminho de inclusão) `s3://bucket01/folder1/`, o crawler cria uma única tabela com duas colunas de chave de partição. A primeira coluna de chave de partição contém `table1` e `table2`, e a segunda coluna de chave de partição contém `partition1` a `partition3` para a partição da `table1` e `partition4` e `partition5` para a partição da `table2`. Para criar duas tabelas separadas, defina o crawler com dois armazenamentos de dados. Neste exemplo, defina o primeiro **Include path** (Caminho de inclusão) como `s3://bucket01/folder1/table1/`, e o segundo como `s3://bucket01/folder1/table2`.

**nota**  
No Amazon Athena, cada tabela corresponde a um prefixo do Amazon S3 com todos os objetos nele. Se os objetos têm diferentes esquemas, o Athena não reconhece os objetos diferentes no mesmo prefixo como tabelas separadas. Isso pode acontecer se um crawler criar várias tabelas a partir do mesmo prefixo do Amazon S3. Isso pode levar a consultas no Athena que retornam zero resultados. Para que o Athena reconheça e consulte corretamente as tabelas, crie o crawler com um **Include path** (Caminho de inclusão) separado para cada esquema de tabela diferente na estrutura de pastas do Amazon S3. Para obter mais informações, consulte [Práticas recomendadas ao usar o Athena com o AWS Glue](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html) e este [artigo da Central de Conhecimento da AWS](https://aws.amazon.com/premiumsupport/knowledge-center/athena-empty-results/).

# Fontes de dados compatíveis para crawling
<a name="crawler-data-stores"></a>

Os crawlers podem rastrear os seguintes armazenamentos de dados baseados em arquivos e baseados em tabelas.


| Tipo de acesso que o crawler usa | Armazenamentos de dados | 
| --- | --- | 
| Cliente nativo |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/crawler-data-stores.html)  | 
| JDBC |  Amazon Redshift Snowflake No Amazon Relational Database Service (Amazon RDS) ou externo ao Amazon RDS: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/crawler-data-stores.html)  | 
| Cliente MongoDB |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/crawler-data-stores.html)  | 

**nota**  
Atualmente, o AWS Glue não é compatível com crawlers para streams de dados.

Para armazenamentos de dados JDBC, MongoDB, MongoDB Atlas e Amazon DocumentDB (compatível com MongoDB), você deve especificar uma *conexão* do AWS Glue que o crawler possa usar para se conectar ao datastore. Para o Amazon S3, você pode especificar opcionalmente uma conexão do tipo Network (Rede). Uma conexão é um objeto do Data Catalog que armazena informações de conexão, como credenciais, URL, informações da Amazon Virtual Private Cloud e muito mais. Para obter mais informações, consulte [Conectar a dados](glue-connections.md).

As seguintes versões de drivers são compatíveis com o crawler:


| Produto | Driver compatível com crawler | 
| --- | --- | 
| PostgreSQL | 42.2.1 | 
| Amazon Aurora | O mesmo que os drivers de crawler nativos | 
| MariaDB | 8.0.13 | 
| Microsoft SQL Server | 6.1.0 | 
| MySQL | 8.0.13 | 
| Oracle | 11.2.2 | 
| Amazon Redshift | 4.1 | 
| Snowflake | 3.13.20 | 
| MongoDB | 4.7.2 | 
| MongoDB Atlas | 4.7.2 | 

Veja a seguir observações sobre os vários armazenamentos de dados.

**Amazon S3**  
Você pode escolher rastrear um caminho na sua conta ou em outra. Se todos os arquivos do Amazon S3 em uma pasta tiverem o mesmo esquema, o crawler criará uma tabela. Além disso, se o objeto do Amazon S3 for particionado, apenas uma tabela de metadados será criada e as informações da partição serão adicionadas ao Data Catalog para essa tabela.

**Amazon S3 e Amazon DynamoDB**  
Os crawlers usam uma função do AWS Identity and Access Management (IAM) para conceder permissão de acesso aos armazenamentos de dados. *A função que você transmite ao crawler precisa ter permissão para acessar os caminhos do Amazon S3 e as tabelas do Amazon DynamoDB que serão rastreados*.

**Amazon DynamoDB**  
Ao definir um crawler usando o console do AWS Glue, você especifica uma tabela do DynamoDB. Se você estiver usando a API do AWS Glue, pode especificar uma lista de tabelas. Você pode optar por rastrear apenas uma pequena amostra dos dados, para reduzir os tempos de execução do crawler.

**Delta Lake**  
Para cada datastore Delta Lake, é necessário especificar como criar tabelas do Delta:  
+ **Criar tabelas nativas**: permite a integração com mecanismos de consulta compatíveis com consultas diretas ao log de transações do Delta. Para obter mais informações, consulte [Consultar tabelas do Delta Lake](https://docs.aws.amazon.com/athena/latest/ug/delta-lake-tables.html).
+ **Criar tabelas de link simbólico**: crie uma pasta `_symlink_manifest` com arquivos de manifesto particionados pelas chaves de partição com base nos parâmetros de configuração especificados.

**Iceberg**  
Para cada datastore do Iceberg, você especifica um caminho do Amazon S3 que contém os metadados para as tabelas do Iceberg. Se o crawler descobrir metadados da tabela do Iceberg, ele os registrará no catálogo de dados. Você pode definir uma agenda para que o crawler mantenha as tabelas atualizadas.  
Você pode definir esses parâmetros para o datastore:  
+ **Exclusões**: permite que você pule determinadas pastas.
+ **Profundidade máxima de travessia**: define o limite de profundidade que o crawler pode percorrer no bucket do Amazon S3. A profundidade de travessia máxima padrão é 10 e a profundidade máxima que você pode definir é 20.

**Hudi**  
Para cada datastore do Hudi, você especifica um caminho do Amazon S3 que contém os metadados para as tabelas do Hudi. Se o crawler descobrir metadados da tabela do Hudi, ele os registrará no catálogo de dados. Você pode definir uma agenda para que o crawler mantenha as tabelas atualizadas.  
Você pode definir esses parâmetros para o datastore:  
+ **Exclusões**: permite que você pule determinadas pastas.
+ **Profundidade máxima de travessia**: define o limite de profundidade que o crawler pode percorrer no bucket do Amazon S3. A profundidade de travessia máxima padrão é 10 e a profundidade máxima que você pode definir é 20.
As colunas de timestamp tendo `millis` como tipos lógicos serão interpretadas como `bigint`, devido a uma incompatibilidade com o Hudi 0.13.1 e os tipos de timestamp. Uma resolução pode ser fornecida na próxima versão do Hudi.
As tabelas do Hudi são categorizadas da seguinte forma, com implicações específicas para cada uma delas:  
+ Copy on Write (CoW): os dados são armazenados em um formato colunar (Parquet) e cada atualização cria uma nova versão dos arquivos durante uma gravação.
+ Merge on Read (MoR): os dados são armazenados usando uma combinação de formatos colunares (Parquet) e baseados em linha (Avro). As atualizações são registradas em arquivos delta baseados em linha e são compactadas conforme necessário para criar novas versões dos arquivos colunares.
Com conjuntos de dados CoW, sempre que há uma atualização para um registro, o arquivo que contém o registro é regravado com os valores atualizados. Com um conjunto de dados MoR, sempre que há uma atualização, o Hudi grava apenas a linha do registro alterado. MoR é mais adequado para cargas de trabalho com maior volume de gravações ou alterações e menor volume de leituras. O tipo CoW é mais adequado para workloads com maior volume de leituras em dados que mudam com menos frequência.  
O Hudi oferece três tipos de consulta para acessar os dados:  
+ Consultas de snapshot: consultas que veem o snapshot mais recente da tabela a partir de uma determinada ação de confirmação ou compactação. Para tabelas MoR, as consultas de snapshot expõem o estado mais recente da tabela mesclando os arquivos base e delta da fatia de arquivo mais recente no momento da consulta.
+ Consultas incrementais: as consultas veem somente os novos dados gravados na tabela, a partir de uma determinada confirmação/compactação. Desse modo, os streams de alteração são fornecidos para habilitar pipelines de dados incrementais.
+ Ler consultas otimizadas: para tabelas de MoR, as consultas veem os dados mais recentes compactados. Para tabelas CoW, as consultas veem os dados mais recentes confirmados.
Para tabelas Copy-On-Write, os crawlers criam uma única tabela no catálogo de dados com o serde ReadOptimized `org.apache.hudi.hadoop.HoodieParquetInputFormat`.  
Para tabelas Merge-On-Read, o crawler cria duas tabelas no catálogo de dados para o mesmo local da tabela:  
+ Uma tabela com sufixo `_ro` que usa o serde ReadOptimized `org.apache.hudi.hadoop.HoodieParquetInputFormat`.
+ Uma tabela com sufixo `_rt` que usa o serde RealTime permitindo consultas instantâneas: `org.apache.hudi.hadoop.realtime.HoodieParquetRealtimeInputFormat`.

**MongoDB e Amazon DocumentDB (compatível com MongoDB)**  
O MongoDB versões 3.2 e posteriores são compatíveis. Você pode optar por rastrear apenas uma pequena amostra dos dados, para reduzir os tempos de execução do crawler.

**Banco de dados relacional**  
A autenticação é realizada com um nome de usuário e senha do banco de dados. Dependendo do tipo de mecanismo de banco de dados, você pode escolher quais objetos são rastreados, como bancos de dados, esquemas e tabelas.

**Snowflake**  
O crawler JDBC do Snowflake é compatível com crawling da tabela, da tabela externa, da visão e da visão materializada. A definição de visão materializada não será preenchida.  
Em tabelas externas do Snowflake, o crawler só fará o rastreamento se apontar para um local do Amazon S3. Além do esquema da tabela, o crawler também rastreará o local, o formato do arquivo e a saída do Amazon S3 como parâmetros da tabela do Data Catalog. Observe que as informações de partição da tabela externa particionada não são preenchidas.  
Atualmente, o ETL não é compatível com tabelas do Data Catalog criadas usando o crawler do Snowflake.

# Pré-requisitos do crawler
<a name="crawler-prereqs"></a>

O crawler assume as permissões da função do AWS Identity and Access Management (IAM) que você especificou ao defini-lo. Essa função do IAM precisa ter permissões para extrair dados do seu armazenamento de dados e gravar no Data Catalog. O console do AWS Glue lista somente as funções do IAM com uma política de confiança anexada para o serviço da entidade principal AWS Glue. No console, você também pode criar uma função do IAM com uma política do IAM para acessar o armazenamento de dados do Amazon S3 que é acessado pelo crawler. Para obter mais informações sobre como fornecer funções ao AWS Glue, consulte [Políticas baseadas em identidade para o AWS Glue](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies).

**nota**  
Para fazer o crawling de um armazenamento de dados do Delta Lake, é necessário ter permissões de leitura/gravação para o local do Amazon S3.

Para o crawler, você pode criar uma função e anexar as seguintes políticas:
+ A política `AWSGlueServiceRole` gerenciada pela AWS, que concede as permissões necessárias no Data Catalog
+ Uma política em linha que concede permissões na origem dos dados.
+ Uma política em linha que concede permissões `iam:PassRole` no perfil.

Uma abordagem mais rápida é permitir que o assistente do crawler do console do AWS Glue crie uma função para você. A função que ele cria é especificamente para o crawler e inclui a política `AWSGlueServiceRole` gerenciada pela AWS e mais a política em linha necessária para a origem dos dados especificada.

Se você especificar uma função existente para um crawler, certifique-se de que ela inclua a política `AWSGlueServiceRole` ou equivalente (ou uma versão dessa política com um escopo reduzido), além das políticas em linha necessárias. Por exemplo, para um armazenamento de dados do Amazon S3, a política em linha seria, no mínimo, a seguinte: 

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::bucket/object*"
      ]
    }
  ]
}
```

------

Para um armazenamento de dados do Amazon DynamoDB, a política seria, no mínimo, a seguinte: 

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DescribeTable",
        "dynamodb:Scan"
      ],
      "Resource": [
        "arn:aws:dynamodb:us-east-1:111122223333:table/table-name*"
      ]
    }
  ]
}
```

------

E ainda, se o crawler ler os dados do Amazon S3 criptografados pelo AWS Key Management Service (AWS KMS), a função do IAM AWS KMS deverá ter permissão de descriptografia na chave do . Para obter mais informações, consulte [Etapa 2: criar um perfil do IAM para o AWS Glue](create-an-iam-role.md).

# Definir e gerenciar classificadores
<a name="add-classifier"></a>

Um classificador lê os dados em uma armazenamento de dados. Se reconhecer o formato dos dados, ele gerará um esquema. O classificador também retornará um número de certeza para indicar o nível de certeza referente ao reconhecimento do formato. 

O AWS Glue fornece um conjunto de classificadores integrados, mas você também pode criar classificadores personalizados. O AWS Glue invoca classificadores personalizados primeiro, na ordem especificada na definição do crawler. Dependendo dos resultados retornados dos classificadores personalizados, o AWS Glue também poderá invocar classificadores integrados. Se um classificador retornar `certainty=1.0` durante o processamento, ele indicará que está 100% certo sobre a criação do esquema correto. Em seguida, o AWS Glue usa a saída desse classificador. 

Se nenhum classificador retornar `certainty=1.0`, o AWS Glue usará a saída do classificador que tiver a maior certeza. Se nenhum classificador retornar uma certeza maior que `0.0`, o AWS Glue retornará a string de classificação padrão `UNKNOWN`.

## Quando devo usar um classificador?
<a name="classifier-when-used"></a>

Você deve usar classificadores ao fazer crawling em um armazenamento de dados para definir tabelas de metadados no AWS Glue Data Catalog. Você pode configurar seu crawler com um conjunto de classificadores ordenados. Quando o crawler invoca um classificador, o classificador determina se os dados são reconhecidos. Se o classificador não puder reconhecer os dados ou não estiver 100% certo, o crawler chamará o próximo classificador na lista para tentar reconhecer os dados. 

 Para obter mais informações sobre como criar um classificador usando o console do AWS Glue, consulte [Criar classificadores usando o console do AWS Glue](console-classifiers.md). 

## Classificadores personalizados
<a name="classifier-defining"></a>

A saída de um classificador inclui uma string que indica a classificação ou o formato do arquivo (por exemplo, `json`) e o esquema dele. Para classificadores personalizados, você define a lógica de criação do esquema com base no tipo de classificador. Os tipos de classificadores incluem a definição de esquemas com base em padrões grok, tags XML e caminhos JSON.

Se você alterar uma definição de classificador, os dados que foram rastreados anteriormente usando o classificador não serão reclassificados. Um crawler monitora os dados rastreados anteriormente. Novos dados são classificados com o classificador atualizado, o que pode resultar em um esquema atualizado. Se o esquema de seus dados evoluiu, atualize o classificador para considerar quaisquer alterações de esquema quando o crawler for executado. Para reclassificar dados para corrigir um classificador incorreto, crie um novo crawler com o classificador atualizado. 

Para obter mais informações sobre como criar classificadores personalizados no AWS Glue, consulte [Escrever classificadores personalizados para diversos formatos de dados](custom-classifier.md).

**nota**  
Se seu formato de dados for reconhecido por um dos classificadores integrados, você não precisará criar um classificador personalizado.

## Classificadores integrados
<a name="classifier-built-in"></a>

 O AWS Glue fornece classificadores integrados para vários formatos, incluindo JSON, CSV, logs da web e diversos sistemas de banco de dados.

Se o AWS Glue não encontrar um classificador personalizado adequado para o formato de dados de entrada com 100% de certeza, ele invocará os classificadores integrados na ordem exibida na tabela a seguir. Os classificadores integrados retornam um resultado para indicar se o formato é correspondente (`certainty=1.0`) ou não (`certainty=0.0`). O primeiro classificador que tiver `certainty=1.0` fornecerá a string de classificação e o esquema para uma tabela de metadados no Data Catalog.


| Tipo de classificador | String de classificação | Observações | 
| --- | --- | --- | 
| Apache Avro | avro | Lê o esquema no início do arquivo para determinar o formato. | 
| Apache ORC | orc | Lê os metadados do arquivo para determinar o formato. | 
| Apache Parquet | parquet | Lê o esquema no final do arquivo para determinar o formato. | 
| JSON | json | Lê o início do arquivo para determinar o formato. | 
| JSON binário | bson | Lê o início do arquivo para determinar o formato. | 
| XML | xml | Lê o início do arquivo para determinar o formato. O AWS Glue determina o esquema de tabela com base em tags XML no documento.  Para obter informações sobre como criar um classificador XML personalizado para especificar linhas no documento, consulte [Gravar classificadores XML personalizados](custom-classifier.md#custom-classifier-xml).  | 
| Amazon Ion | ion | Lê o início do arquivo para determinar o formato. | 
| Log do Apache combinado | combined\$1apache | Determina os formatos de log por meio de um padrão grok. | 
| Log do Apache | apache | Determina os formatos de log por meio de um padrão grok. | 
| Log de kernel do Linux | linux\$1kernel | Determina os formatos de log por meio de um padrão grok. | 
| Log da Microsoft | microsoft\$1log | Determina os formatos de log por meio de um padrão grok. | 
| Log do Ruby | ruby\$1logger | Lê o início do arquivo para determinar o formato. | 
| Log do Squid 3.x | squid | Lê o início do arquivo para determinar o formato. | 
| Log de monitoramento do Redis | redismonlog | Lê o início do arquivo para determinar o formato. | 
| Log do Redis | redislog | Lê o início do arquivo para determinar o formato. | 
| CSV | csv | Verifica os seguintes delimitadores: vírgula (,), pipe (\$1), tabulação (\$1t), ponto e vírgula (;) e Ctrl\$1A (\$1u0001). Ctrl\$1A é o caractere de controle Unicode para Start Of Heading. | 
| Amazon Redshift | redshift | Usa conexão JDBC para importar metadados. | 
| MySQL | mysql | Usa conexão JDBC para importar metadados. | 
| PostgreSQL | postgresql | Usa conexão JDBC para importar metadados. | 
| Banco de dados Oracle | oracle | Usa conexão JDBC para importar metadados. | 
| Microsoft SQL Server | sqlserver | Usa conexão JDBC para importar metadados. | 
| Amazon DynamoDB | dynamodb | Lê dados da tabela do DynamoDB. | 

Os arquivos nos seguintes formatos compactados podem ser classificados:
+ (com suporte para arquivos ZIP contendo apenas um arquivo). Observe que o formato Zip não tem bom suporte em outros serviços (por causa do arquivamento).
+ BZIP
+ GZIP
+ LZ4
+ Snappy (compatível com os formatos Snappy Standard e Snappy de Hadoop nativo)

### Classificador CSV integrado
<a name="classifier-builtin-rules"></a>

O classificador CSV integrado analisa o conteúdo do arquivo CSV para determinar o esquema de uma tabela do AWS Glue. Esse classificador verifica os seguintes delimitadores:
+ Vírgula (,)
+ Barra vertical (\$1)
+ Tabulação (\$1t)
+ Ponto e vírgula (;)
+ Ctrl\$1A (\$1u0001)

  Ctrl\$1A é o caractere de controle Unicode para `Start Of Heading`.

Para ser classificado como CSV, o esquema da tabela deve ter pelo menos duas colunas e duas linhas de dados. O classificador CSV usa um número de heurística para determinar se um cabeçalho está presente em um determinado arquivo. Se o classificador não puder determinar um cabeçalho a partir da primeira linha de dados, os cabeçalhos das colunas serão exibidos como `col1`, `col2`, `col3` e assim por diante. O classificador CSV integrado determina se é necessário inferir um cabeçalho avaliando as seguintes características do arquivo:
+ Cada coluna em um possível cabeçalho é analisada como um tipo de dados STRING.
+ Exceto pela última coluna, todas as colunas em um possível cabeçalho têm conteúdo com menos de 150 caracteres. Para permitir um delimitador final, a última coluna pode ficar vazia em todo o arquivo.
+ Cada coluna em um possível cabeçalho deve atender aos requisitos do AWS Glue `regex` para um nome de coluna.
+ A linha de cabeçalho deve ser suficientemente diferente das linhas de dados. Para determinar isso, uma ou mais linhas devem ser analisadas como diferentes do tipo STRING. Se todas as colunas forem do tipo STRING, a primeira linha de dados não será suficientemente diferente das linhas subsequentes a serem usadas como cabeçalho.

**nota**  
Se o classificador CSV integrado não criar sua tabela do AWS Glue como você deseja, é possível usar uma das seguintes alternativas:  
Altere os nomes das colunas no Data Catalog, defina `SchemaChangePolicy` como LOG e a configuração de saída da partição como `InheritFromTable` para futuras execuções do crawler.
Crie um classificador grok personalizado para analisar os dados e atribuir as colunas desejadas.
O classificador CSV integrado cria tabelas fazendo referência ao `LazySimpleSerDe` como a biblioteca de serialização, que é uma boa opção para inferência de tipos. No entanto, se os dados CSV contiverem strings entre aspas, edite a definição da tabela e altere a biblioteca SerDe para `OpenCSVSerDe`. Ajuste os tipos inferidos para STRING, defina `SchemaChangePolicy` como LOG e defina a configuração de saída das partições como `InheritFromTable` para futuras execuções do crawler. Para mais informações sobre bibliotecas SerDe, consulte [Referência de SerDe](https://docs.aws.amazon.com/athena/latest/ug/serde-reference.html) no Manual do usuário do Amazon Athena.

# Escrever classificadores personalizados para diversos formatos de dados
<a name="custom-classifier"></a>

Você pode fornecer um classificador personalizado para classificar seus dados no AWS Glue. Você pode criar um classificador personalizado usando um padrão grok, uma tag XML, JavaScript Object Notation (JSON) ou valores separados por vírgula (CSV). Um crawler do AWS Glue chama um classificador personalizado. Se o classificador reconhecer os dados, ele retornará a classificação e o esquema dos dados ao crawler. Você precisará definir um classificador personalizado se seus dados não coincidirem com os classificadores integrados ou se você quiser personalizar as tabelas criadas pelo crawler.

 Para obter mais informações sobre como criar um classificador usando o console do AWS Glue, consulte [Criar classificadores usando o console do AWS Glue](console-classifiers.md). 

O AWS Glue executa os classificadores personalizados antes dos classificadores integrados, na ordem que você especificar. Quando um crawler encontra um classificador que corresponde aos dados, o esquema e a string de classificação são usados ​​na definição das tabelas gravadas no seu AWS Glue Data Catalog.

**Topics**
+ [Gravar classificadores grok personalizados](#custom-classifier-grok)
+ [Gravar classificadores XML personalizados](#custom-classifier-xml)
+ [Gravar classificadores JSON personalizados](#custom-classifier-json)
+ [Gravar classificadores CSV personalizados](#custom-classifier-csv)

## Gravar classificadores grok personalizados
<a name="custom-classifier-grok"></a>

Grok é uma ferramenta usada para analisar dados textuais em um determinado padrão de correspondência. Um padrão grok é um conjunto nomeado de expressões regulares (regex) que são usadas para corresponder dados uma linha por vez. O AWS Glue usa padrões grok usa para inferir o esquema dos seus dados. Quando um padrão grok corresponde aos seus dados, o AWS Glue usa esse padrão para determinar a estrutura dos seus dados e mapeá-los em campos.

O AWS Glue fornece vários padrões integrados. Se preferir, você pode definir o seu próprio padrão. Você pode criar um padrão grok usando padrões integrados e personalizados na definição do seu classificador personalizado. Você pode adaptar um padrão grok para classificar formatos de arquivos de texto personalizados.

**nota**  
Classificadores grok personalizados do AWS Glue usam a biblioteca de serialização `GrokSerDe` para tabelas criadas no AWS Glue Data Catalog. Se você estiver usando o AWS Glue Data Catalog com o Amazon Athena, Amazon EMR ou Redshift Spectrum, verifique a documentação sobre esses serviços para obter informações sobre o suporte do `GrokSerDe`. Atualmente, você pode encontrar problemas ao consultar tabelas criadas com o `GrokSerDe` no Amazon EMR e Redshift Spectrum.

Veja a seguir a sintaxe básica dos componentes de um padrão grok:

```
%{PATTERN:field-name}
```

Os dados que correspondem ao `PATTERN` nomeado são mapeados para a coluna `field-name` no esquema, com um tipo de dados padrão de `string`. Se preferir, o tipo de dados para o campo pode ser convertido em `byte`, `boolean`, `double`, `short`, `int`, `long` ou `float` no esquema resultante.

```
%{PATTERN:field-name:data-type}
```

Por exemplo, para converter um campo `num` para um tipo de dados `int`, você pode usar esse padrão: 

```
%{NUMBER:num:int}
```

Os padrões podem ser compostos por outros padrões. Por exemplo, você pode ter um padrão para um time stamp `SYSLOG` que é definido por padrões de mês, dia e horário, como `Feb 1 06:25:43`. Para esses dados, você pode definir o padrão a seguir:

```
SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
```

**nota**  
Os padrões grok podem processar somente uma linha por vez. Padrões de várias linhas não são compatíveis. Além disso, as quebras de linha dentro de um padrão não são compatíveis.

### Valores personalizados para o classificador grok
<a name="classifier-values"></a>

Ao definir um classificador grok, forneça os seguintes valores para criar o classificador personalizado.

**Name**  
Nome do classificador.

**Classificação**  
A string de texto que é escrita para explicar o formato dos dados que serão classificados, por exemplo, `special-logs`.

**Padrão grok**  
O conjunto dos padrões que são aplicados ao armazenamento de dados para determinar se há uma correspondência. Esses são AWS Gluepadrões integrados[ do ](#classifier-builtin-patterns) e todos os outros padrões personalizados que você definir.  
Veja a seguir um exemplo de padrão grok.  

```
%{TIMESTAMP_ISO8601:timestamp} \[%{MESSAGEPREFIX:message_prefix}\] %{CRAWLERLOGLEVEL:loglevel} : %{GREEDYDATA:message}
```
Quando os dados correspondem a `TIMESTAMP_ISO8601`, uma coluna de esquema `timestamp` é criada. O comportamento é semelhante para os outros padrões nomeados no exemplo.

**Padrões personalizados**  
Padrões personalizados opcionais que você define. Esses padrões são referenciados pelo padrão grok que classifica os seus dados. Você pode referenciar esses padrões personalizados no padrão grok aplicado aos seus dados. Cada padrão de componente personalizado deve estar em uma linha separada. A sintaxe de [expressões regulares (regex)](http://en.wikipedia.org/wiki/Regular_expression) é usada para definir o padrão.   
Veja a seguir um exemplo de uso dos padrões personalizados:  

```
CRAWLERLOGLEVEL (BENCHMARK|ERROR|WARN|INFO|TRACE)
MESSAGEPREFIX .*-.*-.*-.*-.*
```
O primeiro padrão nomeado personalizado, `CRAWLERLOGLEVEL`, é uma combinação quando os dados correspondem a uma das strings enumeradas. O segundo padrão personalizado, `MESSAGEPREFIX`, tenta corresponder a uma string de prefixo de mensagem.

O AWS Glue rastreia o horário de criação, o horário da última atualização e a versão do seu classificador.

### Padrões integrados
<a name="classifier-builtin-patterns"></a>

O AWS Glue fornece vários padrões comuns que você pode usar para criar um classificador personalizado. Você adiciona um padrão nomeado ao `grok pattern` em uma definição de classificador.

A lista a seguir contém uma linha para cada padrão. Em cada linha, o nome do padrão é seguido da sua respectiva definição. A sintaxe de [expressões regulares (regex)](http://en.wikipedia.org/wiki/Regular_expression) é usada na definição do padrão.

```
#<noloc>&GLU;</noloc> Built-in patterns
 USERNAME [a-zA-Z0-9._-]+
 USER %{USERNAME:UNWANTED}
 INT (?:[+-]?(?:[0-9]+))
 BASE10NUM (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
 NUMBER (?:%{BASE10NUM:UNWANTED})
 BASE16NUM (?<![0-9A-Fa-f])(?:[+-]?(?:0x)?(?:[0-9A-Fa-f]+))
 BASE16FLOAT \b(?<![0-9A-Fa-f.])(?:[+-]?(?:0x)?(?:(?:[0-9A-Fa-f]+(?:\.[0-9A-Fa-f]*)?)|(?:\.[0-9A-Fa-f]+)))\b
 BOOLEAN (?i)(true|false)
 
 POSINT \b(?:[1-9][0-9]*)\b
 NONNEGINT \b(?:[0-9]+)\b
 WORD \b\w+\b
 NOTSPACE \S+
 SPACE \s*
 DATA .*?
 GREEDYDATA .*
 #QUOTEDSTRING (?:(?<!\\)(?:"(?:\\.|[^\\"])*"|(?:'(?:\\.|[^\\'])*')|(?:`(?:\\.|[^\\`])*`)))
 QUOTEDSTRING (?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``))
 UUID [A-Fa-f0-9]{8}-(?:[A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}
 
 # Networking
 MAC (?:%{CISCOMAC:UNWANTED}|%{WINDOWSMAC:UNWANTED}|%{COMMONMAC:UNWANTED})
 CISCOMAC (?:(?:[A-Fa-f0-9]{4}\.){2}[A-Fa-f0-9]{4})
 WINDOWSMAC (?:(?:[A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2})
 COMMONMAC (?:(?:[A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2})
 IPV6 ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?
 IPV4 (?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9])
 IP (?:%{IPV6:UNWANTED}|%{IPV4:UNWANTED})
 HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-_]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-_]{0,62}))*(\.?|\b)
 HOST %{HOSTNAME:UNWANTED}
 IPORHOST (?:%{HOSTNAME:UNWANTED}|%{IP:UNWANTED})
 HOSTPORT (?:%{IPORHOST}:%{POSINT:PORT})
 
 # paths
 PATH (?:%{UNIXPATH}|%{WINPATH})
 UNIXPATH (?>/(?>[\w_%!$@:.,~-]+|\\.)*)+
 #UNIXPATH (?<![\w\/])(?:/[^\/\s?*]*)+
 TTY (?:/dev/(pts|tty([pq])?)(\w+)?/?(?:[0-9]+))
 WINPATH (?>[A-Za-z]+:|\\)(?:\\[^\\?*]*)+
 URIPROTO [A-Za-z]+(\+[A-Za-z+]+)?
 URIHOST %{IPORHOST}(?::%{POSINT:port})?
 # uripath comes loosely from RFC1738, but mostly from what Firefox
 # doesn't turn into %XX
 URIPATH (?:/[A-Za-z0-9$.+!*'(){},~:;=@#%_\-]*)+
 #URIPARAM \?(?:[A-Za-z0-9]+(?:=(?:[^&]*))?(?:&(?:[A-Za-z0-9]+(?:=(?:[^&]*))?)?)*)?
 URIPARAM \?[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*
 URIPATHPARAM %{URIPATH}(?:%{URIPARAM})?
 URI %{URIPROTO}://(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?
 
 # Months: January, Feb, 3, 03, 12, December
 MONTH \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b
 MONTHNUM (?:0?[1-9]|1[0-2])
 MONTHNUM2 (?:0[1-9]|1[0-2])
 MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])
 
 # Days: Monday, Tue, Thu, etc...
 DAY (?:Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)
 
 # Years?
 YEAR (?>\d\d){1,2}
 # Time: HH:MM:SS
 #TIME \d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?
 # TIME %{POSINT<24}:%{POSINT<60}(?::%{POSINT<60}(?:\.%{POSINT})?)?
 HOUR (?:2[0123]|[01]?[0-9])
 MINUTE (?:[0-5][0-9])
 # '60' is a leap second in most time standards and thus is valid.
 SECOND (?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?)
 TIME (?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9])
 # datestamp is YYYY/MM/DD-HH:MM:SS.UUUU (or something like it)
 DATE_US %{MONTHNUM}[/-]%{MONTHDAY}[/-]%{YEAR}
 DATE_EU %{MONTHDAY}[./-]%{MONTHNUM}[./-]%{YEAR}
 DATESTAMP_US %{DATE_US}[- ]%{TIME}
 DATESTAMP_EU %{DATE_EU}[- ]%{TIME}
 ISO8601_TIMEZONE (?:Z|[+-]%{HOUR}(?::?%{MINUTE}))
 ISO8601_SECOND (?:%{SECOND}|60)
 TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
 TZ (?:[PMCE][SD]T|UTC)
 DATESTAMP_RFC822 %{DAY} %{MONTH} %{MONTHDAY} %{YEAR} %{TIME} %{TZ}
 DATESTAMP_RFC2822 %{DAY}, %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{ISO8601_TIMEZONE}
 DATESTAMP_OTHER %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{TZ} %{YEAR}
 DATESTAMP_EVENTLOG %{YEAR}%{MONTHNUM2}%{MONTHDAY}%{HOUR}%{MINUTE}%{SECOND}
 CISCOTIMESTAMP %{MONTH} %{MONTHDAY} %{TIME}
 
 # Syslog Dates: Month Day HH:MM:SS
 SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
 PROG (?:[\w._/%-]+)
 SYSLOGPROG %{PROG:program}(?:\[%{POSINT:pid}\])?
 SYSLOGHOST %{IPORHOST}
 SYSLOGFACILITY <%{NONNEGINT:facility}.%{NONNEGINT:priority}>
 HTTPDATE %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT}
 
 # Shortcuts
 QS %{QUOTEDSTRING:UNWANTED}
 
 # Log formats
 SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:
 
 MESSAGESLOG %{SYSLOGBASE} %{DATA}
 
 COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{Bytes:bytes=%{NUMBER}|-})
 COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent}
 COMMONAPACHELOG_DATATYPED %{IPORHOST:clientip} %{USER:ident;boolean} %{USER:auth} \[%{HTTPDATE:timestamp;date;dd/MMM/yyyy:HH:mm:ss Z}\] "(?:%{WORD:verb;string} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion;float})?|%{DATA:rawrequest})" %{NUMBER:response;int} (?:%{NUMBER:bytes;long}|-)
 
 
 # Log Levels
 LOGLEVEL ([A|a]lert|ALERT|[T|t]race|TRACE|[D|d]ebug|DEBUG|[N|n]otice|NOTICE|[I|i]nfo|INFO|[W|w]arn?(?:ing)?|WARN?(?:ING)?|[E|e]rr?(?:or)?|ERR?(?:OR)?|[C|c]rit?(?:ical)?|CRIT?(?:ICAL)?|[F|f]atal|FATAL|[S|s]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)
```

## Gravar classificadores XML personalizados
<a name="custom-classifier-xml"></a>

XML define a estrutura de um documento com o uso de tags no arquivo. Com um classificador XML personalizado, você pode especificar o nome de tag usado para definir uma linha.

### Valores de classificador personalizados para um classificador XML
<a name="classifier-values-xml"></a>

Ao definir um classificador XML, você fornece os seguintes valores para que o AWS Glue crie o classificador. O campo de classificação deste classificador é definido como `xml`.

**Name**  
Nome do classificador.

**Etiqueta de linha**  
O nome da tag XML que define uma linha de tabela no documento XML, sem colchetes angulares `< >`. O nome precisa estar em conformidade com as regras XML para tags.  
O elemento que contém os dados da linha **não pode** ser um elemento vazio de fechamento automático. Por exemplo, esse elemento vazio **não** é analisado pelo AWS Glue:  

```
            <row att1=”xx” att2=”yy” />  
```
 Os elementos vazios podem ser escritos da seguinte forma:  

```
            <row att1=”xx” att2=”yy”> </row> 
```

O AWS Glue rastreia o horário de criação, o horário da última atualização e a versão do seu classificador.

Por exemplo, digamos que você tenha o arquivo XML a seguir. Para criar uma tabela do AWS Glue que contenha apenas colunas para autor e título, crie um classificador no console do AWS Glue com **Row tag (Tag de linha)** como `AnyCompany`. Em seguida, adicione e execute um crawler que use esse classificador personalizado.

```
<?xml version="1.0"?>
<catalog>
   <book id="bk101">
     <AnyCompany>
       <author>Rivera, Martha</author>
       <title>AnyCompany Developer Guide</title>
     </AnyCompany>
   </book>
   <book id="bk102">
     <AnyCompany>   
       <author>Stiles, John</author>
       <title>Style Guide for AnyCompany</title>
     </AnyCompany>
   </book>
</catalog>
```

## Gravar classificadores JSON personalizados
<a name="custom-classifier-json"></a>

JSON é um formato de intercâmbio de dados. Ele define estruturas de dados com pares de nome e valor ou uma lista de valores ordenada. Com um classificador JSON personalizado, você pode especificar o caminho JSON de uma estrutura de dados usada para definir o esquema da sua tabela.

### Valores do classificador personalizado no AWS Glue
<a name="classifier-values-json"></a>

Ao definir um classificador JSON, você fornece os seguintes valores para que o AWS Glue crie esse classificador. O campo de classificação deste classificador é definido como `json`.

**Name**  
Nome do classificador.

**Caminho JSON**  
Um caminho JSON que aponta para um objeto usado para definir um esquema de tabela. O caminho JSON pode ser escrito na notação de pontos ou de colchetes. Os operadores a seguir são aceitos:      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/custom-classifier.html)

O AWS Glue rastreia o horário de criação, o horário da última atualização e a versão do seu classificador.

**Example Usar um classificador JSON para extrair registros de uma matriz**  
Suponha que seus dados JSON sejam uma matriz de registros. Por exemplo, as primeiras linhas do seu arquivo podem ter a aparência a seguir:  

```
[
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ak",
    "name": "Alaska"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:1",
    "name": "Alabama's 1st congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:2",
    "name": "Alabama's 2nd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:3",
    "name": "Alabama's 3rd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:4",
    "name": "Alabama's 4th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:5",
    "name": "Alabama's 5th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:6",
    "name": "Alabama's 6th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:7",
    "name": "Alabama's 7th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:1",
    "name": "Arkansas's 1st congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:2",
    "name": "Arkansas's 2nd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:3",
    "name": "Arkansas's 3rd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:4",
    "name": "Arkansas's 4th congressional district"
  }
]
```
Ao executar um crawler utilizando o classificador JSON integrado, o arquivo inteiro é usado para definir o esquema. Como você não especifica um caminho JSON, o crawler trata os dados como um objeto, ou seja, apenas uma matriz. Por exemplo, o esquema pode ser parecido com a seguinte:  

```
root
|-- record: array
```
No entanto, para criar um esquema baseado em cada registro da matriz JSON, crie um classificador JSON personalizado e especifique o caminho JSON como `$[*]`. Quando você especifica esse caminho JSON, o classificador interroga todos os 12 registros na matriz para determinar o esquema. O esquema resultante contém campos separados para cada objeto, semelhante ao exemplo a seguir:  

```
root
|-- type: string
|-- id: string
|-- name: string
```

**Example Usar um classificador JSON para examinar somente partes de um arquivo**  
Suponha que seus dados JSON sigam o padrão do arquivo JSON de exemplo `s3://awsglue-datasets/examples/us-legislators/all/areas.json` obtido no site [http://everypolitician.org/](http://everypolitician.org/). Exemplos de objetos no arquivo JSON têm a seguinte aparência:  

```
{
  "type": "constituency",
  "id": "ocd-division\/country:us\/state:ak",
  "name": "Alaska"
}
{
  "type": "constituency",
  "identifiers": [
    {
      "scheme": "dmoz",
      "identifier": "Regional\/North_America\/United_States\/Alaska\/"
    },
    {
      "scheme": "freebase",
      "identifier": "\/m\/0hjy"
    },
    {
      "scheme": "fips",
      "identifier": "US02"
    },
    {
      "scheme": "quora",
      "identifier": "Alaska-state"
    },
    {
      "scheme": "britannica",
      "identifier": "place\/Alaska"
    },
    {
      "scheme": "wikidata",
      "identifier": "Q797"
    }
  ],
  "other_names": [
    {
      "lang": "en",
      "note": "multilingual",
      "name": "Alaska"
    },
    {
      "lang": "fr",
      "note": "multilingual",
      "name": "Alaska"
    },
    {
      "lang": "nov",
      "note": "multilingual",
      "name": "Alaska"
    }
  ],
  "id": "ocd-division\/country:us\/state:ak",
  "name": "Alaska"
}
```
Ao executar um crawler utilizando o classificador JSON integrado, o arquivo inteiro é usado para criar o esquema. Seu esquema poderá ser semelhante a este:  

```
root
|-- type: string
|-- id: string
|-- name: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
```
No entanto, para criar um esquema usando apenas o objeto "`id`", crie um classificador JSON personalizado e especifique o caminho JSON como `$.id`. Em seguida, o esquema será baseado somente no campo "`id`":  

```
root
|-- record: string
```
As primeiras linhas de dados extraídas com este esquema têm esta aparência:  

```
{"record": "ocd-division/country:us/state:ak"}
{"record": "ocd-division/country:us/state:al/cd:1"}
{"record": "ocd-division/country:us/state:al/cd:2"}
{"record": "ocd-division/country:us/state:al/cd:3"}
{"record": "ocd-division/country:us/state:al/cd:4"}
{"record": "ocd-division/country:us/state:al/cd:5"}
{"record": "ocd-division/country:us/state:al/cd:6"}
{"record": "ocd-division/country:us/state:al/cd:7"}
{"record": "ocd-division/country:us/state:ar/cd:1"}
{"record": "ocd-division/country:us/state:ar/cd:2"}
{"record": "ocd-division/country:us/state:ar/cd:3"}
{"record": "ocd-division/country:us/state:ar/cd:4"}
{"record": "ocd-division/country:us/state:as"}
{"record": "ocd-division/country:us/state:az/cd:1"}
{"record": "ocd-division/country:us/state:az/cd:2"}
{"record": "ocd-division/country:us/state:az/cd:3"}
{"record": "ocd-division/country:us/state:az/cd:4"}
{"record": "ocd-division/country:us/state:az/cd:5"}
{"record": "ocd-division/country:us/state:az/cd:6"}
{"record": "ocd-division/country:us/state:az/cd:7"}
```
Para criar um esquema baseado em um objeto altamente aninhado, como "`identifier`", no arquivo JSON, você pode criar um classificador JSON personalizado e especificar o caminho JSON como `$.identifiers[*].identifier`. Embora o esquema seja parecido com o exemplo anterior, ele é baseado em um objeto diferente no arquivo JSON.   
O esquema é semelhante ao seguinte:  

```
root
|-- record: string
```
Listar as primeiras linhas de dados da tabela mostra que o esquema é baseado nos dados no objeto "`identifier`":  

```
{"record": "Regional/North_America/United_States/Alaska/"}
{"record": "/m/0hjy"}
{"record": "US02"}
{"record": "5879092"}
{"record": "4001016-8"}
{"record": "destination/alaska"}
{"record": "1116270"}
{"record": "139487266"}
{"record": "n79018447"}
{"record": "01490999-8dec-4129-8254-eef6e80fadc3"}
{"record": "Alaska-state"}
{"record": "place/Alaska"}
{"record": "Q797"}
{"record": "Regional/North_America/United_States/Alabama/"}
{"record": "/m/0gyh"}
{"record": "US01"}
{"record": "4829764"}
{"record": "4084839-5"}
{"record": "161950"}
{"record": "131885589"}
```
Para criar uma tabela com base em outro objeto altamente aninhado, como o campo "`name`" na matriz "`other_names`" do arquivo JSON, você pode criar um classificador JSON personalizado e especificar o caminho JSON como `$.other_names[*].name`. Embora o esquema seja parecido com o exemplo anterior, ele é baseado em um objeto diferente no arquivo JSON. O esquema é semelhante ao seguinte:  

```
root
|-- record: string
```
Listar as primeiras linhas de dados na tabela mostra que isto esta baseado nos dados no objeto "`name`" na matriz "`other_names`":  

```
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Аляска"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "ألاسكا"}
{"record": "ܐܠܐܣܟܐ"}
{"record": "الاسكا"}
{"record": "Alaska"}
{"record": "Alyaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Штат Аляска"}
{"record": "Аляска"}
{"record": "Alaska"}
{"record": "আলাস্কা"}
```

## Gravar classificadores CSV personalizados
<a name="custom-classifier-csv"></a>

 Os classificadores CSV personalizados permitem que você especifique tipos de dados para cada coluna no campo de classificador CSV personalizado. É possível especificar o tipo de dados de cada coluna separando-o por uma vírgula. Ao especificar os tipos de dados, é possível substituir os tipos de dados inferidos dos crawlers e garantir que os dados sejam classificados adequadamente.

Você pode definir o SerDe para processamento de CSV no classificador, que será aplicado no catálogo de dados.

Ao criar um classificador personalizado, você também pode reutilizar o classificador para diferentes crawlers.
+  Para arquivos csv somente com cabeçalhos (sem dados), esses arquivos serão classificados como UNKNOWN (DESCONHECIDOS), pois não são fornecidas informações suficientes. Se você especificar que o CSV “tem cabeçalhos” na opção *Column headings* (Cabeçalhos das colunas) e fornecer os tipos de dados, poderemos classificar esses arquivos corretamente. 

Você pode usar um classificador CSV personalizado para inferir o esquema de vários tipos de dados CSV. Os atributos personalizados que podem ser fornecidos ao classificador incluem delimitadores, uma opção de SerDe CSV, opções sobre o cabeçalho e se determinadas validações dos dados devem ser executadas.

### Valores do classificador personalizado no AWS Glue
<a name="classifier-values-csv"></a>

Ao definir um classificador CSV, você fornece os seguintes valores para que o AWS Glue crie esse classificador. O campo de classificação deste classificador é definido como `csv`.

**Nome do classificador**  
Nome do classificador.

**SerDe CSV**  
Define o SerDe para processamento de CSV no classificador, que será aplicado no catálogo de dados. As opções são Open SerDe CSV, Lazy Simple SerDe e Nenhum. Você pode especificar o valor Nenhum quando quiser que o crawler faça a detecção.

**Delimitador de coluna**  
Um símbolo personalizado para indicar o que separa cada entrada de coluna na linha. Forneça um caractere Unicode. Se você não conseguir digitar seu delimitador, poderá copiá-lo e colá-lo. Isso funciona para caracteres imprimíveis, incluindo os que não são compatíveis com seu sistema (normalmente exibidos como □).

**Símbolo de cotação**  
Um símbolo personalizado para indicar o que combina o conteúdo em um único valor da coluna. Deve ser diferente do delimitador de coluna. Forneça um caractere Unicode. Se você não conseguir digitar seu delimitador, poderá copiá-lo e colá-lo. Isso funciona para caracteres imprimíveis, incluindo os que não são compatíveis com seu sistema (normalmente exibidos como □).

**Cabeçalhos de coluna**  
Indica o comportamento de como cabeçalhos de coluna devem ser detectados no arquivo CSV. Se o seu arquivo CSV personalizado tem cabeçalhos de coluna, insira uma lista de cabeçalhos de coluna delimitados por vírgula.

**Opções de processamento: permitir arquivos com uma única coluna**  
Habilita o processamento de arquivos que contêm apenas uma coluna.

**Opções de processamento: remover espaço em branco antes de identificar os valores de coluna**  
Especifica se os valores devem ser removidos antes de identificar o tipo dos valores de coluna.

**Tipos de dados personalizados: *opcional***  
 Insira o tipo de dados personalizado separado por uma vírgula. Especifica os tipos de dados personalizados no arquivo CSV. O tipo de dados personalizado deve ser um tipo de dados válido. Os tipos de dados válidos são: “BINARY”, “BOOLEAN”, “DATE”, “DECIMAL”, “DOUBLE”, “FLOAT”, “INT”, “LONG”, “SHORT”, “STRING”, “TIMESTAMP”. Tipos de dados inválidos exibirão um erro. 

# Criar classificadores usando o console do AWS Glue
<a name="console-classifiers"></a>

Um classificador determina o esquema dos seus dados. Você pode escrever um classificador personalizado e apontá-lo para o AWS Glue. 

## Criar classificadores
<a name="add-classifier-console"></a>

Para adicionar um classificador no console do AWS Glue, escolha **Add classifier**. Ao definir um classificador, você precisa fornecer valores para o seguinte:
+ **Classifier name** (Nome do classificador): forneça um nome exclusivo para o seu classificador.
+ **Classifier type** (Tipo do classificador): o tipo de classificação das tabelas inferidas pelo classificador.
+ **Last updated** (Última atualização): a hora em que o classificador foi atualizado pela última vez.

**Nome do classificador**  
Forneça um nome exclusivo para o seu classificador.

**Tipo de classificador**  
Escolha o tipo de classificador a ser criado.

Dependendo do tipo de classificador escolhido, configure as seguintes propriedades para o classificador:

------
#### [ Grok ]
+ **Classificação** 

  Descreva o formato ou tipo de dados que serão classificados ou forneça um rótulo personalizado. 
+ **Padrão grok** 

  Isso é usado na análise de dados em um esquema estruturado. O padrão grok é composto por padrões nomeados que descrevem o formato do seu armazenamento de dados. Você escreve esse padrão grok usando os padrões integrados nomeados fornecidos pelo AWS Glue e os padrões personalizados incluídos no campo **Custom patterns**. Embora os resultados do depurador grok possam não corresponder exatamente aos resultados do AWS Glue, sugerimos que você teste seu padrão usando alguns dados de amostra com um depurador grok. Você pode encontrar os depuradores grok na web. Os padrões integrados nomeados fornecidos pelo AWS Glue são geralmente compatíveis com os padrões grok disponíveis na web. 

  Crie o seu padrão grok adicionando padrões nomeados de forma interativa e verifique seus resultados em um depurador. Ao fazer isso, você garante que seus dados poderão ser analisados quando o crawler do AWS Glue executar seu padrão grok.
+ **Padrões personalizados** 

  Para os classificadores grok, estes são elementos fundamentais para o **Grok pattern** que você escreveu. Quando os padrões integrados não conseguirem analisar seus dados, você precisará escrever um padrão personalizado. Esses padrões personalizados são definidos neste campo e referenciados em **Grok pattern**. Cada padrão personalizado é definido em uma linha separada. Assim como os padrões integrados, ele consiste em uma definição de padrão nomeado que usa a sintaxe de [expressões regulares (regex)](http://en.wikipedia.org/wiki/Regular_expression). 

  Por exemplo, o nome `MESSAGEPREFIX` a seguir apresenta uma definição de expressão regular a ser aplicada aos seus dados para determinar se eles seguem o padrão. 

  ```
  MESSAGEPREFIX .*-.*-.*-.*-.*
  ```

------
#### [ XML ]
+ **Etiqueta de linha** 

  Para classificadores XML, este é o nome da tag XML que define uma linha de tabela no documento XML. Digite o nome sem colchetes angulares `< >`. O nome precisa estar em conformidade com as regras XML para tags.

  Para obter mais informações, consulte [Gravar classificadores XML personalizados](custom-classifier.md#custom-classifier-xml). 

------
#### [ JSON ]
+ **Caminho JSON** 

  Para os classificadores JSON, este é o caminho JSON para o objeto, a matriz ou o valor que definem uma linha da tabela que está sendo criada. Digite o nome na sintaxe JSON de ponto ou colchete usando os operadores do AWS Glue compatíveis. 

  Para obter mais informações, consulte a lista de operadores em [Gravar classificadores JSON personalizados](custom-classifier.md#custom-classifier-json). 

------
#### [ CSV ]
+ **Delimitador de coluna** 

  Um único caractere ou símbolo para indicar o que separa cada entrada de coluna na linha. Escolha o delimitador da lista, ou escolha `Other` para inserir um delimitador personalizado.
+ **Símbolo de cotação** 

  Um único caractere ou símbolo para indicar o que combina o conteúdo em um único valor de coluna. Deve ser diferente do delimitador de coluna. Escolha o símbolo de aspas na lista, ou escolha `Other` para inserir um caractere de aspas personalizado.
+ **Cabeçalhos de coluna** 

  Indica o comportamento de como cabeçalhos de coluna devem ser detectados no arquivo CSV. Você pode escolher `Has headings`, `No headings` ou `Detect headings`. Se o seu arquivo CSV personalizado tem cabeçalhos de coluna, insira uma lista de cabeçalhos de coluna delimitados por vírgula. 
+ **Permitir arquivos com uma única coluna** 

  Para serem classificados como CSV, os dados devem ter pelo menos duas colunas e duas linhas de dados. Use esta opção para permitir o processamento de arquivos que contenham apenas uma coluna.
+ **Remover espaço em branco antes de identificar os valores de coluna** 

  Esta opção especifica se os valores devem ser removidos antes de identificar o tipo dos valores de coluna.
+  **Tipo de dados personalizado** 

   (Opcional) Insira tipos de dados personalizados em uma lista delimitada por vírgulas. Os tipos de dados válidos são: “BINARY”, “BOOLEAN”, “DATE”, “DECIMAL”, “DOUBLE”, “FLOAT”, “INT”, “LONG”, “SHORT”, “STRING”, “TIMESTAMP”. 
+  **Serde CSV** 

   (Opcional): um SerDe para processamento de CSV no classificador, que será aplicado no catálogo de dados. Escolha entre `Open CSV SerDe`, `Lazy Simple SerDe`, ou `None`. Você pode especificar o valor `None` quando quiser que o crawler faça a detecção. 

------

Para obter mais informações, consulte [Escrever classificadores personalizados para diversos formatos de dados](custom-classifier.md).

## Visualizar classificadores
<a name="view-classifiers-console"></a>

Para ver uma lista com todos os classificadores que você criou, abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) e escolha a guia **Classifiers** (Classificadores).

A lista exibe as seguintes propriedades sobre cada classificador:
+ **Classifier** (Classificador): o nome do classificador. Ao criar um classificador, você precisa fornecer um nome para ele.
+ **Classification** (Classificação): o tipo de classificação das tabelas inferidas pelo classificador.
+ **Last updated** (Última atualização): a hora em que o classificador foi atualizado pela última vez.

## Gerenciar classificadores
<a name="manage-classifiers-console"></a>

Na lista **Classifiers** no console do AWS Glue, você pode adicionar, editar e excluir classificadores. Para ver mais detalhes sobre um classificador, escolha o nome dele na lista. Os detalhes incluem as informações que você definiu quando criou o classificador. 

# Configurar um crawler
<a name="define-crawler"></a>

Um crawler acessa seu armazenamento de dados, identifica metadados e cria definições de tabela do AWS Glue Data Catalog. O painel **Crawlers** no console do AWS Glue lista todos os crawlers que você cria. A lista exibe status e métricas da última execução do seu crawler.

 Este tópico contém o processo passo a passo de configuração de um crawler. Ele abrange aspectos essenciais, como configurar os parâmetros do crawler, definir as fontes de dados a receberem um crawl, configurar a segurança e gerenciar os dados submetidos a crawling. 

**Topics**
+ [Etapa 1: configurar propriedades do crawler](define-crawler-set-crawler-properties.md)
+ [Etapa 2: escolher as fontes de dados e os classificadores](define-crawler-choose-data-sources.md)
+ [Etapa 3: Defina as configurações de segurança](define-crawler-configure-security-settings.md)
+ [Etapa 4: configurar a saída e o agendamento](define-crawler-set-output-and-scheduling.md)
+ [Etapa 5: analisar e criar](define-crawler-review.md)

# Etapa 1: configurar propriedades do crawler
<a name="define-crawler-set-crawler-properties"></a>

**Para configurar um crawler**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\). Escolha **Crawlers** no painel de navegação.

1.  Escolha **Adicionar crawler** e siga as instruções no assistente **Adicionar crawler**. O assistente orientará você pelas etapas necessárias para criar um crawler. Se quiser adicionar classificadores personalizados para definir o esquema, consulte [Definir e gerenciar classificadores](add-classifier.md). 

1.  Insira um nome e uma descrição (opcional) para o crawler. Opcionalmente, você pode marcar o crawler com uma **Tag key (Chave de tag)** e um **Tag value (Valor de tag)** opcional. Depois de serem criadas, as chaves de tag são somente leitura. Use as tags em alguns recursos para ajudar a organizá-los e identificá-los. Para obter mais informações, consulte tags da AWS no AWS Glue.   
**Name**  
O nome pode conter letras (A a Z), números (0 a 9), hifens (-) ou sublinhados (\$1), e pode ter até 255 caracteres.  
**Descrição**  
A descrição pode ter até 2048 caracteres.  
**Tags**  
Use tags para organizar e identificar os recursos. Para obter mais informações, consulte:   
   + [Etiquetas da AWS no AWS Glue](monitor-tags.md)

# Etapa 2: escolher as fontes de dados e os classificadores
<a name="define-crawler-choose-data-sources"></a>

Em seguida, configure as fontes de dados e os classificadores do crawler.

Para obter mais informações sobre as fontes de dados compatíveis, consulte [Fontes de dados compatíveis para crawling](crawler-data-stores.md).

**Configuração da fonte de dados**  
Selecione a opção apropriada para **Os dados já estão mapeados em tabelas do AWS Glue?**. Escolha "Ainda não" ou "Sim". A opção "Ainda não" está selecionada por padrão.   
O crawler pode acessar armazenamentos de dados diretamente como a fonte do crawl ou pode usar tabelas existentes no Data Catalog como a fonte. Se o crawler usa tabelas de catálogos existentes, ele rastreia os armazenamentos de dados que são especificados por essas tabelas do catálogo.   
+ Se ainda não estiverem: selecione uma ou mais fontes de dados a serem rastreadas. Um crawler pode rastrear vários armazenamentos de dados de tipos diferentes (Amazon S3, JDBC e outros).

  Você só pode configurar um datastore por vez. Depois de fornecer as informações de conexão, incluir caminhos e excluir padrões, você terá a opção de adicionar outro datastore.
+ Sim: selecione tabelas existentes do AWS Glue Data Catalog. As tabelas do catálogo especificam os armazenamentos de dados a serem rastreados. O crawler pode rastrear somente tabelas do catálogo em uma única execução; ele não pode misturar outros tipos de origem.

  Um motivo comum para especificar uma tabela de catálogo como fonte é quando você cria a tabela manualmente (pois você já conhece a estrutura do datastore) e deseja que um crawler a mantenha atualizada, incluindo a adição de novas partições. Para ver uma discussão de outros motivos, consulte [Atualizar tabelas do Data Catalog criadas manualmente usando crawlers](tables-described.md#update-manual-tables).

  Quando você especifica tabelas existentes como o tipo de fonte do crawler, as seguintes condições se aplicam:
  + O nome do banco de dados é opcional.
  + Somente tabelas de catálogo que especificam armazenamentos de dados do Amazon S3, do Amazon DynamoDB ou do Delta Lake são permitidas.
  + Nenhuma tabela de catálogo nova é criada quando o crawler é executado. As tabelas existentes são atualizadas conforme necessário, incluindo a adição de novas partições.
  + Os objetos excluídos encontrados nos armazenamentos de dados são ignorados; nenhuma tabela de catálogo é excluída. Em vez disso, o crawler grava uma mensagem de log. (`SchemaChangePolicy.DeleteBehavior=LOG`)
  + A opção de configuração do crawler para criar um único esquema para cada caminho do Amazon S3 é habilitada por padrão e não pode ser desabilitada. (`TableGroupingPolicy`=`CombineCompatibleSchemas`) Para obter mais informações, consulte [Criar um esquema único para cada caminho de inclusão do Amazon S3](crawler-grouping-policy.md).
  + Você não pode misturar as tabelas de catálogo como uma fonte com nenhum outro tipo de fonte (por exemplo, Amazon S3 ou Amazon DynamoDB).
  
 Para usar tabelas Delta, primeiro crie uma tabela Delta usando o Athena DDL ou a API AWS Glue.   
 Usando o Athena, defina a localização da sua pasta do Amazon S3 e o tipo de tabela como "DELTA".   

```
CREATE EXTERNAL TABLE database_name.table_name
LOCATION 's3://bucket/folder/'
TBLPROPERTIES ('table_type' = 'DELTA')
```
 Usando a API AWS Glue, especifique o tipo de tabela no mapa de parâmetros da tabela. Os parâmetros da tabela precisam incluir o par chave/valor a seguir. Para obter mais informações sobre como criar uma tabela, consulte a [documentação do Boto3 para create\$1table](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue/client/create_table.html).   

```
{
    "table_type":"delta"
}
```

**Fontes de dados**  
Selecione ou adicione a lista de fontes de dados a serem varridas pelo crawler.  
 (Opcional) Se você escolher JDBC como fonte de dados, poderá usar seus próprios drivers JDBC ao especificar o acesso da conexão em que as informações do driver são armazenadas. 

**Incluir o caminho**  
 Ao avaliar o que incluir ou excluir em um crawling, o crawler começa pelo caminho de inclusão obrigatório. Para o Amazon S3, o MongoDB, o MongoDB Atlas, o Amazon DocumentDB (compatível com MongoDB) e armazenamentos de dados relacionais, você deve especificar um caminho de inclusão.     
Para um datastore do Amazon S3  
Escolha se deseja especificar um caminho na sua conta ou em uma conta diferente e depois procure e escolha um caminho do Amazon S3.  
Para armazenamentos de dados do Amazon S3, a sintaxe de inclusão de caminho é `bucket-name/folder-name/file-name.ext`. Para rastrear todos os objetos em um bucket, você especifica apenas o nome do bucket no caminho de inclusão. O padrão de exclusão é relativo ao caminho de inclusão  
Para um datastore do Delta Lake  
Especifique um ou mais caminhos do Amazon S3 para tabelas do Delta, como s3://*bucket*/*prefixo*/*objeto*.  
Para um datastore do Iceberg ou do Hudi  
Especifique um ou mais caminhos do Amazon S3 que contenham pastas com metadados da tabela do Iceberg ou do Hudi, como s3://*bucket*/*prefixo*.  
Para datastores do Iceberg e Hudi, a pasta Iceberg/Hudi pode estar localizada em uma pasta secundária da pasta raiz. O crawler examinará todas as pastas abaixo de um caminho para uma pasta do Hudi.  
Para um datastore no JDBC  
Insira *<banco de dados>*/*<esquema>*/*<tabela>* ou *<banco de dados>*/*<tabela>*, dependendo do produto do banco de dados. Oracle Database e MySQL não oferecem suporte a esquema no caminho. Você pode substituir o caractere percentual (%) por *<esquema>* ou *<tabela>*. Por exemplo, para um banco de dados Oracle com um identificador de sistema (SID) `orcl`, informe `orcl/%` para importar todas as tabelas às quais o usuário nomeado na conexão tem acesso.  
Este campo diferencia letras maiúsculas de minúsculas.
 Se você optar por trazer suas próprias versões do driver JDBC, os crawlers do AWS Glue consumirão recursos em trabalhos do AWS Glue e buckets do Amazon S3 para garantir que o driver fornecido seja executado em seu ambiente. O uso adicional de recursos será refletido em sua conta. Os drivers estão limitados às propriedades descritas em [Adicionar uma conexão do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/console-connections.html).   
Para um datastore MongoDB, MangoDB Atlas ou Amazon DocumentDB  
Para o MongoDB, o MongoDB Atlas e o Amazon DocumentDB (compatível com MongoDB), a sintaxe é `database/collection`.
Para armazenamentos de dados JDBC, a sintaxe é `database-name/schema-name/table-name` ou `database-name/table-name`. A sintaxe depende de o mecanismo de banco de dados ser compatível com esquemas dentro de um banco de dados. Por exemplo, para mecanismos de banco de dados, como MySQL ou Oracle, não especifique um `schema-name` em seu caminho de inclusão. Você pode substituir o sinal de porcentagem (`%`) por um esquema ou tabela no caminho de inclusão para representar todos os esquemas ou todas as tabelas em um banco de dados. Não é possível substituir o sinal de porcentagem (`%`) do banco de dados no caminho de inclusão. 

**Profundidade transversal máxima (somente para armazenamentos de dados do Iceberg ou do Hudi)**  
A profundidade máxima de caminhos do Amazon S3 que o crawler pode percorrer para descobrir a pasta de metadados do Iceberg ou do Hudi no caminho do Amazon S3. O objetivo desse parâmetro é limitar o run time do crawler. O valor padrão é 10 e o máximo é 20.

**Padrões de exclusão**  
Eles permitem que você exclua determinados arquivos ou tabelas do rastreamento. O caminho de exclusão é relativo ao caminho de inclusão. Por exemplo, para excluir uma tabela no seu datastore JDBC, digite o nome dela no caminho de exclusão.   
Um crawler se conecta a um datastore JDBC usando uma conexão do AWS Glue que contém uma string de conexão de URI do JDBC. O crawler só tem acesso a objetos no mecanismo de banco de dados usando o nome de usuário e a senha do JDBC na conexão do AWS Glue. *O crawler só pode criar tabelas que ele pode acessar por meio da conexão JDBC.* Depois que o crawler acessa o mecanismo de banco de dados com o URI do JDBC, o caminho de inclusão é usado para determinar quais tabelas no mecanismo de banco de dados são criadas no Data Catalog. Por exemplo, com o MySQL, se você especificar um caminho de inclusão de `MyDatabase/%`, todas as tabelas em `MyDatabase` serão criadas no Data Catalog. Ao acessar o Amazon Redshift, se você especificar um caminho de inclusão de `MyDatabase/%`, todas as tabelas dentro de todos os esquemas para o banco de dados `MyDatabase` serão criadas no Data Catalog. Se você especificar um caminho de inclusão de `MyDatabase/MySchema/%`, todas as tabelas no banco de dados `MyDatabase` e o esquema `MySchema` serão criados.   
Depois de especificar um caminho de inclusão, você pode excluir objetos do rastreamento que o seu caminho de inclusão incluiria especificando um ou mais padrões de exclusão `glob` no estilo Unix. Esses padrões são aplicados ao seu caminho de inclusão para determinar quais objetos serão excluídos. Esses padrões também são armazenados como uma propriedade de tabelas criadas pelo crawler. AWS Glue As extensões PySpark, como `create_dynamic_frame.from_catalog`, leem as propriedades da tabela e excluem os objetos definidos pelo padrão de exclusão.   
O AWS Glue oferece suporte aos seguintes padrões `glob` no padrão de exclusão.       
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/define-crawler-choose-data-sources.html)
O AWS Glue interpreta os padrões de exclusão `glob` da seguinte forma:  
+ O caractere de barra (`/`) é o delimitador que separa as chaves do Amazon S3 em uma hierarquia de pastas.
+ O caractere de asterisco (`*`) corresponde a zero ou mais caracteres de um componente de nome sem cruzar limites da pasta.
+ Um asterisco duplo (`**`) corresponde a zero ou mais caracteres cruzando limites de pasta ou esquema.
+ O caractere de ponto de interrogação (`?`) corresponde a exatamente um caractere de um componente de nome.
+ O caractere de barra invertida (`\`) é usado para realizar o escape de caracteres que não podem ser interpretados como caracteres especiais. A expressão `\\` corresponde a uma única barra invertida, e `\{` corresponde a uma chave esquerda.
+ Os colchetes `[ ]` criam uma expressão que corresponde a um único caractere de um componente de nome fora de um conjunto de caracteres. Por exemplo, `[abc]` corresponde a `a`, `b` ou `c`. O hífen (`-`) pode ser usado para especificar um intervalo, portanto, `[a-z]` especifica um intervalo correspondente de `a` a `z` (de inclusão). Esses formatos podem ser combinados, portanto, [`abce-g`] corresponde a `a`, `b`, `c`, `e`, `f` ou `g`. Se o caractere depois do colchete (`[`) for um ponto de exclamação (`!`), a expressão de colchetes será negada. Por exemplo, `[!a-c]` corresponde a qualquer caractere, exceto `a`, `b` ou `c`.

  Em uma expressão de colchetes, os caracteres `*`, `?` e `\` se correspondentes entre si. O caractere de hífen (`-`) corresponde a si mesmo se for o primeiro caractere dentro de colchetes ou o primeiro caractere após `!` quando você estiver fazendo uma negação.
+ As chaves (`{ }`) englobam um grupo de subpadrões, e o grupo será correspondente se houver correspondência com qualquer subpadrão no grupo. Um caractere de vírgula (`,`) é usado para separar os subpadrões. Grupos não podem ser aninhados.
+ Os caracteres de ponto inicial ou final em nomes de arquivos são tratados como caracteres normais nas operações de correspondência. Por exemplo, o padrão de exclusão `*` corresponde ao nome do arquivo `.hidden`.

**Example Padrões de exclusão do Amazon S3**  
Cada padrão de exclusão é avaliado em comparação com o caminho de inclusão. Por exemplo, digamos que você tenha a seguinte estrutura de diretórios do Amazon S3:  

```
/mybucket/myfolder/
   departments/
      finance.json
      market-us.json
      market-emea.json
      market-ap.json
   employees/
      hr.json
      john.csv
      jane.csv
      juan.txt
```
Dado o caminho de inclusão `s3://mybucket/myfolder/`, estes são alguns resultados de amostra para padrões de exclusão:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/define-crawler-choose-data-sources.html)

**Example Excluir um subconjunto de partições do Amazon S3**  
Suponha que seus dados sejam particionados por dia, de modo que cada dia em um ano esteja em uma partição diferente do Amazon S3. Para janeiro de 2015, há 31 partições. Agora, para rastrear dados apenas na primeira semana de janeiro, é necessário excluir todas as partições, exceto os dias 1 a 7:  

```
 2015/01/{[!0],0[8-9]}**, 2015/0[2-9]/**, 2015/1[0-2]/**    
```
Analise as partes deste padrão glob. A primeira parte, ` 2015/01/{[!0],0[8-9]}**`, exclui todos os dias que não começam com um "0", além dos dias 08 e 09 do mês 01 no ano 2015. Observe que "\$1\$1" é usado como o sufixo para o padrão de número do dia e ultrapassa os limites de pasta para as pastas de nível inferior. Se "\$1" for usado, os níveis mais baixos da pasta não serão excluídos.  
A segunda parte, ` 2015/0[2-9]/**`, exclui os dias do mês 02 ao mês 09, no ano 2015.  
A terceira parte, `2015/1[0-2]/**`, exclui os dias do mês 10, 11 e 12, no ano 2015.

**Example Padrões de exclusão do JDBC**  
Suponha que você esteja realizando crawling de um banco de dados JDBC com a seguinte estrutura de esquema:  

```
MyDatabase/MySchema/
   HR_us
   HR_fr
   Employees_Table
   Finance
   Market_US_Table
   Market_EMEA_Table
   Market_AP_Table
```
Dado o caminho de inclusão `MyDatabase/MySchema/%`, estes são alguns resultados de amostra para padrões de exclusão:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/define-crawler-choose-data-sources.html)

**Parâmetros adicionais de fonte do crawler**  
Cada tipo de fonte requer um conjunto diferente de parâmetros adicionais.

**Conexão**  
Selecione ou adicione uma conexão do AWS Glue. Para obter informações sobre conexões, consulte [Conectar a dados](glue-connections.md).

**Metadados adicionais - opcionais (para armazenamentos de dados JDBC)**  
Selecione propriedades de metadados adicionais para o crawler rastrear.  
+ Comentários: rastreie os comentários associados no nível da tabela e no nível da coluna.
+ Tipos brutos: mantenha os tipos de dados brutos das colunas da tabela em metadados adicionais. Como comportamento padrão, o crawler traduz os tipos de dados brutos em tipos compatíveis com o Hive.

**Nome da classe do driver JDBC: opcional (para armazenamentos de dados JDBC)**  
 Digite um nome de classe de driver JDBC personalizado para que o crawler se conecte à fonte de dados:   
+ Postgres: org.postgresql.Driver
+ MySQL: com.mysql.jdbc.Driver, com.mysql.cj.jdbc.Driver
+ Redshift: com.amazon.redshift.jdbc.Driver, com.amazon.redshift.jdbc42.Driver
+ Oracle: oracle.jdbc.driver.OracleDriver
+ SQL Server: com.microsoft.sqlserver.jdbc.SQLServerDriver

**Caminho do S3 para o driver JDBC: opcional (para armazenamentos de dados JDBC)**  
Escolha um caminho existente do Amazon S3 para um arquivo `.jar`. É nesse local que o arquivo `.jar` será armazenado quando um driver JDBC personalizado for usado para o crawler se conectar à fonte de dados.

**Habilitar a amostragem de dados (somente para o armazenamentos de dados Amazon DynamoDB, MongoDB e MongoDB Atlas e Amazon DocumentDB)**  
Selecione se deseja rastrear somente uma amostra de dados. Se essa opção não for selecionada, a tabela inteira será rastreada. A verificação de todos os registros pode levar muito tempo quando a tabela não é de throughput alto.

**Criar tabelas para consultas (somente para armazenamentos de dados do Delta Lake)**  
Selecione como você deseja criar as tabelas do Delta Lake:  
+ Create Native tables (Criar tabelas nativas): permite a integração com mecanismos de consulta compatíveis com consulta direta ao log de transações do Delta.
+ Create Symlink tables (Criar tabelas de link simbólico): Crie uma pasta manifesto de link simbólico com arquivos de manifesto particionados pelas chaves de partição, com base nos parâmetros de configuração especificados.

**Scanning rate (Taxa de varredura): opcional (somente para armazenamentos de dados do DynamoDB)**  
Especifique a porcentagem das unidades de capacidade de leitura da tabela do DynamoDB a serem usadas pelo crawler. Unidades de capacidade de leitura é um termo definido pelo DynamoDB e é um valor numérico que atua como limitador de taxa para o número de leituras que podem ser executadas nessa tabela por segundo. Insira um valor entre 0,1 e 1,5. Se não for especificado, o padrão será de 0,5 para tabelas provisionadas e 1/4 da capacidade máxima configurada para tabelas sob demanda. Observe que somente o modo de capacidade provisionada deve ser usado com crawlers do AWS Glue.  
Para armazenamentos de dados do DynamoDB, defina o modo de capacidade provisionada para processar leituras e gravações em suas tabelas. O crawler do AWS Glue não deve ser usado com o modo de capacidade sob demanda.

**Conexão de rede: opcional (para armazenamentos de dados de destino do Amazon S3, Delta, Iceberg, Hudi e Catálogo)**  
Opcionalmente, inclua uma conexão de rede para usar com esse destino do Amazon S3. Observe que cada crawler é limitado a uma conexão de rede, portanto, qualquer outro destino do Amazon S3 também usará a mesma conexão (ou nenhuma, se deixada em branco).  
Para obter informações sobre conexões, consulte [Conectar a dados](glue-connections.md).

**Amostra apenas um subconjunto de arquivos e tamanho da amostra (somente para armazenamentos de dados do Amazon S3)**  
Especifique o número de arquivos em cada pasta de folha a serem rastreados durante o crawling de arquivos de amostra em um conjunto de dados. Quando esse recurso é ativado, em vez de realizar o crawling em todos os arquivos neste conjunto de dados, o crawler seleciona aleatoriamente alguns arquivos em cada pasta de folha para rastrear.   
O crawler de amostragem é mais adequado para clientes que têm conhecimento prévio sobre seus formatos de dados e sabem que os esquemas em suas pastas não são alterados. Ativar esse recurso reduzirá significativamente o runtime do crawler.  
Um valor válido é um número inteiro entre 1 e 249. Se não for especificado, todos os arquivos serão rastreados.

**Execuções subsequentes do crawler**  
Esse campo é um campo global que afeta todas as fontes de dados do Amazon S3.  
+ Crawl all sub-folders (Rastrear todas as subpastas): rastrear todas as pastas novamente a cada rastreamento subsequente.
+ Crawl new sub-folders only (Rastrear somente novas subpastas): somente as pastas do Amazon S3 que foram adicionadas desde o último rastreamento serão rastreadas. Se os esquemas forem compatíveis, novas partições serão adicionadas às tabelas existentes. Para obter mais informações, consulte [Programar crawls incrementais para adicionar novas partições](incremental-crawls.md).
+ Crawl based on events (Rastreamento com base em eventos): depende dos eventos do Amazon S3 para controlar quais pastas rastrear. Para obter mais informações, consulte [Acelerar crawls usando notificações de eventos do Amazon S3](crawler-s3-event-notifications.md).

**Custom classifiers (Classificadores personalizados) - opcionais**  
Defina classificadores personalizados antes de definir crawlers. Um classificador verifica se determinado arquivo está em um formato que pode ser processado pelo crawler. Se estiver, o classificador cria um esquema na forma de um objeto `StructType` que corresponde a esse formato de dados.  
Para obter mais informações, consulte [Definir e gerenciar classificadores](add-classifier.md).

# Etapa 3: Defina as configurações de segurança
<a name="define-crawler-configure-security-settings"></a>

**perfil do IAM**  
O crawler assume essa função. Ele deve ter permissões para a política `AWSGlueServiceRole` gerenciada pela AWS. Para fontes do Amazon S3 e do DynamoDB, ele também deve ter permissões para acessar o datastore. Se o crawler ler os dados do Amazon S3 criptografados pelo AWS Key Management Service (AWS KMS), a função do IAM deverá ter permissão de descriptografia na chave do AWS KMS.   
Para um datastore do Amazon S3, permissões adicionais anexadas à função seriam semelhantes às seguintes:     
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::bucket/object*"
      ]
    }
  ]
}
```
Para um datastore do Amazon DynamoDB, permissões adicionais anexadas à função seriam semelhantes às seguintes:     
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DescribeTable",
        "dynamodb:Scan"
      ],
      "Resource": [
        "arn:aws:dynamodb:*:111122223333:table/table-name*"
      ]
    }
  ]
}
```
 Para adicionar seu próprio driver JDBC, permissões adicionais precisam ser adicionadas.   
+  Conceda permissões para as seguintes ações: `CreateJob`, `DeleteJob`, `GetJob`, `GetJobRun`, `StartJobRun`. 
+  Conceda permissões para as ações do Amazon S3: `s3:DeleteObjects`, `s3:GetObject`, `s3:ListBucket`, `s3:PutObject`. 
**nota**  
`s3:ListBucket` não é necessário se a política de buckets do Amazon S3 estiver desabilitada.
+  Conceda acesso de entidade principal de serviço a bucket/pasta na política do Amazon S3. 
 Exemplo de política do Amazon S3:     
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/driver-parent-folder/driver.jar",
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        }
    ]
}
```
 O AWS Glue cria as pastas a seguir (`_crawler` e `_glue_job_crawler`) no mesmo nível do driver JDBC no bucket do Amazon S3. Por exemplo, se o caminho do driver for `<s3-path/driver_folder/driver.jar>`, as seguintes pastas serão criadas se ainda não existirem:   
+  <s3-path/driver\$1folder/\$1crawler> 
+  <s3-path/driver\$1folder/\$1glue\$1job\$1crawler> 
 Opcionalmente, você pode adicionar uma configuração de segurança para um crawler para especificar opções de criptografia em repouso.  
Para obter mais informações, consulte [Etapa 2: criar um perfil do IAM para o AWS Glue](create-an-iam-role.md) e [Gerenciamento de identidade e acesso do AWS Glue](security-iam.md).

**Lake Formation configuration (Configuração do Lake Formation) - opcional**  
Permita que o crawler use credenciais do Lake Formation para fazer crawling na fonte de dados.  
Marcar **Use Lake Formation credentials for crawling S3 data source** (Usar credenciais do Lake Formation para rastrear a fonte de dados do S3) permitirá que o crawler use as credenciais do Lake Formation para rastrear a fonte de dados. Se a fonte de dados pertencer a outra conta, você deve fornecer a ID da conta registrada. Senão, o crawler rastreará somente as fontes de dados associadas à conta. Aplicável somente às fontes de dados do Amazon S3 e do Data Catalog.

**Configuração de segurança - opcional**  
As configurações incluem configurações de segurança. Para saber mais, consulte:   
+ [Criptografar dados gravados pelo AWS Glue](encryption-security-configuration.md)
Depois que uma configuração de segurança for definida em um crawler, você poderá alterá-la, mas não poderá removê-la. Para reduzir o nível de segurança em um crawler, defina explicitamente o recurso de segurança como `DISABLED` dentro da sua configuração ou crie um novo crawler.

# Etapa 4: configurar a saída e o agendamento
<a name="define-crawler-set-output-and-scheduling"></a>

**Configuração da saída**  
As opções incluem como o crawler deve lidar com alterações detectadas do esquema, com a exclusão de objetos no datastore e muito mais. Para obter mais informações, consulte [Personalizar o comportamento do Crawler](crawler-configuration.md).

**Programação do crawler**  
Você pode executar o crawler sob demanda ou definir uma agenda baseada em hora para os crawlers e os trabalhos no AWS Glue. A definição dessas programações usa a sintaxe cron semelhante à do Unix. Para obter mais informações, consulte [Programar um crawler](schedule-crawler.md).

# Etapa 5: analisar e criar
<a name="define-crawler-review"></a>

Revise as configurações do crawler que você definiu e crie o crawler.

# Programar um crawler
<a name="schedule-crawler"></a>

Você pode executar um crawler do AWS Glue sob demanda ou por meio de uma programação regular. Ao configurar um crawler com base em uma programação, é possível especificar certas restrições (por exemplo: a frequência de execução do crawler, em quais dias da semana ele será executado e a que horas). É possível criar esses agendamentos personalizados no formato *cron*. Para obter mais informações, consulte [cron](http://en.wikipedia.org/wiki/Cron) na Wikipédia.

Ao configurar a programação de um crawler, você precisa considerar os recursos e as limitações do cron. Por exemplo, se você optar por executar seu crawler no dia 31 de cada mês, lembre-se de que alguns meses não têm 31 dias.

**Topics**
+ [Criar uma programação de crawler](create-crawler-schedule.md)
+ [Criar uma programação para um crawler existente](Update-crawler-schedule.md)

# Criar uma programação de crawler
<a name="create-crawler-schedule"></a>

É possível criar uma programação para o crawler usando o console do AWS Glue ou a AWS CLI.

------
#### [ Console de gerenciamento da AWS ]

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\). 

1. Escolha **Crawlers** no painel de navegação.

1. Siga as etapas 1 a 3 na seção [Configurar um crawler](define-crawler.md).

1. Em [Etapa 4: configurar a saída e o agendamento](define-crawler-set-output-and-scheduling.md), escolha uma **Programação de crawler** para definir a frequência da execução. Você tem a opção de executar o crawler de hora em hora, diariamente, semanalmente, mensalmente ou pode definir uma programação personalizada usando expressões cron.

   Uma expressão cron é uma string que representa um padrão de agendamento, consistindo em seis campos separados por espaços: \$1 \$1 \$1 \$1 \$1 <minute> <hour> <day of month> <month> <day of week> <year> 

   Por exemplo, para executar uma tarefa todos os dias à meia-noite, a expressão cron é: 0 0 \$1 \$1 ? \$1

   Para obter mais informações, consulte [Expressões cron](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html#CronExpressions).

1. Revise as configurações do crawler que você configurou e crie o crawler para ser executado de acordo com uma programação.

------
#### [ AWS CLI ]

```
aws glue create-crawler 
 --name myCrawler \
 --role AWSGlueServiceRole-myCrawler  \
 --targets '{"S3Targets":[{Path="s3://amzn-s3-demo-bucket/"}]}' \
 --schedule cron(15 12 * * ? *)
```

------

Para obter mais informações sobre como usar o cron para programar trabalhos e crawlers, consulte [Programações baseadas em hora para trabalhos e crawlers](monitor-data-warehouse-schedule.md). 

# Criar uma programação para um crawler existente
<a name="Update-crawler-schedule"></a>

Siga estas etapas para configurar uma programação recorrente para um crawler existente.

------
#### [ Console de gerenciamento da AWS ]

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\). 

1. Escolha **Crawlers** no painel de navegação.

1. Escolha um crawler que você deseja programar na lista disponível.

1. Escolha **Editar** no **menu Ações**.

1. Role para baixo até a **Etapa 4: definir saída e agendamento** e escolha **Editar**. 

1.  Atualize a programação do seu crawler em **Programação de crawlers**. 

1. Selecione **Atualizar**.

------
#### [ AWS CLI ]

Use o seguinte comando da CLI para atualizar uma configuração de crawler:

```
aws glue update-crawler-schedule 
   --crawler-name myCrawler
   --schedule cron(15 12 * * ? *)
```

------

# Visualizar resultados e detalhes do crawler
<a name="console-crawlers-details"></a>

 Depois que o crawler é executado com êxito, ele cria definições de tabela no Data Catalog. Escolha **Tables** (Tabelas) no painel de navegação para ver as tabelas criadas pelo seu crawler no banco de dados que você especificou. 

 Você pode exibir informações relacionadas ao próprio crawler da seguinte forma:
+ A página **Crawlers** no console do AWS Glue exibe as seguintes propriedades para um crawler:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/console-crawlers-details.html)
+  Para exibir o histórico de um crawler, escolha **Crawlers** no painel de navegação para ver os crawlers que você criou. Escolha um crawler na lista de crawlers disponíveis. Você pode ver as propriedades do crawler e o histórico do crawler na guia **Crawler runs** (Execuções de crawler). 

   A guia Crawler runs (Execuções de crawler) exibe informações sobre cada vez que o crawler foi executado, incluindo ** Start time (UTC)** (Horário inicial [UTC]), **End time (UTC)** (Horário final [UTC]), **Duration** (Duração), **Status** (Status), **DPU hours** (Horas de DPU) e **Table changes** (Alterações de tabela). 

  A guia de execuções do crawler exibe apenas os crawls que ocorreram desde a data de lançamento do atributo de histórico do crawler e só retém os crawls por 12 meses. Crawls mais antigos não serão retornados.
+ Para ver informações adicionais, escolha uma guia na página de detalhes do crawler. Cada guia exibirá informações relacionadas ao crawler. 
  +  **Schedule** (Cronograma): todas as programações criadas para o crawler estarão visíveis aqui. 
  +  **Data sources** (Fontes de dados): todas as fontes de dados rastreadas pelo crawler estarão visíveis aqui. 
  +  **Classifiers** (Classificadores): todos os classificadores atribuídos ao crawler estarão visíveis aqui. 
  +  **Tags** (Tags): todas as tags criadas e atribuídas a um recurso do AWS estarão visíveis aqui. 

# Parâmetros definidos nas tabelas do Data Catalog pelo crawler
<a name="table-properties-crawler"></a>

 Essas propriedades da tabela são definidas pelos crawlers do AWS Glue. Esperamos que os usuários consumam as propriedades `classification` e `compressionType`. Outras propriedades, incluindo estimativas de tamanho de tabela, são usadas para cálculos internos e não garantimos sua precisão ou aplicabilidade aos casos de uso do cliente. Alterar esses parâmetros pode alterar o comportamento do crawler. Não oferecemos suporte a esse fluxo de trabalho. 


| Propriedade da chave | Valor da propriedade | 
| --- | --- | 
| UPDATED\$1BY\$1CRAWLER | Nome do crawler que está executando a atualização. | 
| connectionName | O nome da conexão no Data Catalog para o crawler usado para conexão com o armazenamento de dados. | 
| recordCount | Estime a contagem de registros na tabela com base nos tamanhos e cabeçalhos dos arquivos. | 
| skip.header.line.count | Linhas ignoradas para pular o cabeçalho. Definido em tabelas classificadas como CSV. | 
| CrawlerSchemaSerializerVersion | Para uso interno | 
| classification | Formato dos dados, inferido pelo crawler. Para obter mais informações sobre os formatos de dados aceitos pelos crawlers do AWS Glue, consulte [Classificadores integrados](add-classifier.md#classifier-built-in). | 
| CrawlerSchemaDeserializerVersion | Para uso interno | 
| sizeKey | Tamanho combinado dos arquivos na tabela com crawling. | 
| averageRecordSize | O tamanho médio da linha na tabela, em bytes. | 
| compressionType | Tipo de compressão usada nos dados da tabela. Para obter mais informações sobre os tipos de compressão aceitos pelos crawlers do AWS Glue, consulte [Classificadores integrados](add-classifier.md#classifier-built-in). | 
| typeOfData | `file`, `table` ou `view`. | 
| objectCount | Número de objetos no caminho do Amazon S3 para a tabela. | 

 Essas propriedades adicionais da tabela são definidas por crawlers do AWS Glue para armazenamentos de dados do Snowflake. 


| Propriedade da chave | Valor da propriedade | 
| --- | --- | 
| aws:RawTableLastAltered | Registra o timestamp da última alteração da tabela do Snowflake. | 
| ViewOriginalText | Visualizar a instrução SQL. | 
| ViewExpandedText | Visualizar a instrução SQL codificada no formato Base64. | 
| ExternalTable:S3Location | O local do Amazon S3 da tabela externa do Snowflake. | 
| ExternalTable:FileFormat | O formato do arquivo do Amazon S3 da tabela externa do Snowflake. | 

 Essas propriedades adicionais da tabela são definidas por crawlers do AWS Glue para armazenamentos de dados do tipo JDBC, como Amazon Redshift, Microsoft SQL Server, MySQL, PostgreSQL e Oracle. 


| Propriedade da chave | Valor da propriedade | 
| --- | --- | 
| aws:RawType | Quando um crawler armazena os dados no Dta Catalog, ele converte os tipos de dados em tipos compatíveis com o Hive, o que, muitas vezes, faz com que as informações sobre o tipo de dados nativo sejam perdidas. O crawler gera o parâmetro `aws:RawType` para fornecer o tipo de dados de nível nativo. | 
| aws:RawColumnComment | Se um comentário estiver associado a uma coluna no banco de dados, o crawler gera o comentário correspondente na tabela do catálogo. A string de comentários é truncada em 255 bytes. O Microsoft SQL Server não oferece suporte para comentários.  | 
| aws:RawTableComment | Se um comentário estiver associado a uma tabela no banco de dados, o crawler gera o comentário correspondente na tabela do catálogo. A string de comentários é truncada em 255 bytes. O Microsoft SQL Server não oferece suporte para comentários. | 

# Personalizar o comportamento do Crawler
<a name="crawler-configuration"></a>

Ao configurar um Crawler do AWS Glue, há várias opções para definir o comportamento do seu crawler.
+ **Crawls incrementais**: é possível configurar um crawler para executar crawls incrementais para adicionar somente novas partições ao esquema da tabela. 
+ **Índices de partição**: um crawler cria índices de partição para destinos do Amazon S3 e do Delta Lake por padrão para fornecer uma pesquisa eficiente para partições específicas.
+ **Acelerar o tempo do crawl usando eventos do Amazon S3**: é possível configurar um crawler para usar eventos do Amazon S3 a fim de identificar as alterações entre dois crawls listando todos os arquivos da subpasta que disparou o evento em vez de listar o destino completo do Amazon S3 ou do Catálogo de dados.
+ **Manipulação de alterações no esquema**: você pode impedir que um crawler faça qualquer alteração no esquema existente. Você pode usar o Console de gerenciamento da AWS ou a API do AWS Glue para configurar como o seu crawler processa determinados tipos de alterações. 
+ **Um único esquema para vários caminhos do Amazon S3**: você pode configurar um crawler para criar um único esquema para cada caminho do S3, se os dados forem compatíveis.
+ **Localização da tabela e níveis de particionamento**: a opção de crawler no nível da tabela fornece a flexibilidade de informar ao crawler onde as tabelas estão localizadas e como você deseja que as partições sejam criadas. 
+ **Limite da tabela**: é possível especificar o número máximo de tabelas que o crawler tem permissão para criar especificando um limite da tabela.
+ **Credenciais do AWS Lake Formation**: é possível configurar um crawler para usar credenciais do Lake Formation para acessar um datastore do Amazon S3 ou uma tabela do Catálogo de dados com uma localização subjacente do Amazon S3 dentro da mesma Conta da AWS ou de outra Conta da AWS. 

 Para obter mais informações sobre como usar o console do AWS Glue para adicionar um crawler, consulte [Configurar um crawler](define-crawler.md). 

**Topics**
+ [Programar crawls incrementais para adicionar novas partições](incremental-crawls.md)
+ [Gerar índices de partição](crawler-configure-partition-indexes.md)
+ [Como impedir que o crawler altere um esquema existente](crawler-schema-changes-prevent.md)
+ [Criar um esquema único para cada caminho de inclusão do Amazon S3](crawler-grouping-policy.md)
+ [Especificar o local da tabela e o nível de particionamento](crawler-table-level.md)
+ [Especificar o número máximo de tabelas que o crawler pode criar](crawler-maximum-number-of-tables.md)
+ [Configurar um crawler para usar credenciais do Lake Formation](crawler-lf-integ.md)
+ [Acelerar crawls usando notificações de eventos do Amazon S3](crawler-s3-event-notifications.md)

# Programar crawls incrementais para adicionar novas partições
<a name="incremental-crawls"></a>

É possível configurar crawls incrementais de uma execução do Crawler do AWS Glue para adicionar somente novas partições ao esquema da tabela. Quando o crawler é executado pela primeira vez, ele executa um crawl completo para processar toda a fonte de dados para registrar o esquema completo e todas as partições existentes no AWS Glue Data Catalog.

Os crawls subsequentes após o crawl completo inicial serão incrementais, em que o crawler identifica e adiciona somente as novas partições que foram introduzidas desde o crawl anterior. Essa abordagem resulta em tempos de crawl mais rápidos, pois o crawler não precisa mais processar toda a fonte de dados para cada execução, mas se concentra apenas nas novas partições. 

**nota**  
Os crawls incrementais não detectam modificações ou exclusões de partições existentes. Essa configuração é mais adequada para fontes de dados com um esquema estável. Se ocorrer uma única alteração importante no esquema, é recomendável configurar temporariamente o crawler para realizar um crawl completo a fim de capturar o novo esquema com precisão e, em seguida, voltar ao modo de crawling incremental. 

O diagrama a seguir mostra que, com a configuração de crawl incremental ativada, o crawler detectará e adicionará somente a pasta recém-adicionada, month=March, ao catálogo.

![\[O diagrama a seguir mostra que os arquivos do mês de março foram adicionados.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawlers-s3-folders-new.png)


Siga estas etapas para atualizar seu crawler para realizar crawls incrementais:

------
#### [ Console de gerenciamento da AWS ]

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha **Crawlers** no **Catálogo de dados**.

1. Escolha um crawler que você deseja configurar para fazer o crawl incrementalmente.

1. Escolha **Editar**.

1. Escolha a **Etapa 2. Escolha as fontes de dados e os classificadores**.

1. Escolha a fonte de dados em que você deseja fazer o crawl incrementalmente. 

1. Escolha **Editar**.

1. Escolha **Fazer crawl somente em novas subpastas** em **Execuções subsequentes do crawler**.

1. Selecione **Atualizar**.

Para criar uma programação para um crawler, consulte [Programar um crawler](schedule-crawler.md).

------
#### [ AWS CLI ]

```
aws glue update-crawler \
 --name myCrawler \
 --recrawl-policy RecrawlBehavior=CRAWL_NEW_FOLDERS_ONLY \
 --schema-change-policy UpdateBehavior=LOG,DeleteBehavior=LOG
```

------

**Notas e restrições**  
Quando essa opção está ativada, não é possível alterar os armazenamentos de dados de destino do Amazon S3 ao editar o crawler. Essa opção afeta determinadas definições de configuração do crawler. Quando ativada, ela força o comportamento de atualização e de exclusão do crawler para `LOG`. Isto significa que:
+ Se descobrir objetos nos quais os esquemas não são compatíveis, o crawler não adicionará os objetos no Catálogo de Dados e adicionará esse detalhe como um log no CloudWatch Logs.
+ Ele não atualizará objetos excluídos no Catálogo de dados.

# Gerar índices de partição
<a name="crawler-configure-partition-indexes"></a>

O Catálogo de dados é compatível com a criação de índices de partição para fornecer uma pesquisa eficiente de partições específicas. Para obter mais informações, consulte [Criar índices de partição](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html). O crawler do AWS Glue cria índices de partição para destinos do Amazon S3 e do Delta Lake por padrão.

------
#### [ Console de gerenciamento da AWS ]

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha **Crawlers** no **Catálogo de dados**.

1. Quando você define um crawler, a opção **Criar índices de partição automaticamente** é habilitada por padrão em **Opções avançadas** na página **Definir saída e programação**.

   Para desabilitar essa opção, você pode desmarcar a caixa de seleção **Criar índices de partição automaticamente** no console. 

1. Conclua a configuração do crawler e escolha **Criar crawler**.

------
#### [ AWS CLI ]

 Também é possível desabilitar essa opção usando a AWS CLI, defina o `CreatePartitionIndex ` no parâmetro `configuration`. O valor padrão é true.

```
aws glue update-crawler \
    --name myCrawler \
    --configuration '{"Version": 1.0, "CreatePartitionIndex": false }'
```

------

## Notas de uso para índices de partição
<a name="crawler-configure-partition-indexes-usage-notes"></a>
+ As tabelas criadas pelo crawler não têm a variável `partition_filtering.enabled` por padrão. Para obter mais informações, consulte [AWS Glue partition indexing and filtering](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#glue-best-practices-partition-index).
+ A criação de índices de partição para partições criptografadas não é compatível.

# Como impedir que o crawler altere um esquema existente
<a name="crawler-schema-changes-prevent"></a>

 Você pode impedir que os Crawler do AWS Glues façam qualquer alteração de esquema no Catálogo de Dados quando eles são executados. Por padrão, os crawlers atualizam o esquema no Catálogo de Dados para corresponder à fonte de dados que está recebendo um crawl. No entanto, em alguns casos, talvez você queira impedir que o Crawler modifique o esquema existente, especialmente se transformou ou limpou os dados e não quer que o esquema original substitua as alterações.

 Siga estas etapas para configurar seu crawler para não substituir o esquema existente em uma definição de tabela. 

------
#### [  Console de gerenciamento da AWS  ]

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha **Crawlers** no **Catálogo de dados**.

1. Escolha um crawler na lista e escolha **Editar**.

1. Escolha **Etapa 4: definir a saída e a programação**.

1. Em **Opções avançadas**, escolha **Adicionar somente novas colunas** ou **Ignorar a alteração e não atualizar a tabela no Catálogo de Dados**. 

1.  Também é possível definir uma opção de configuração para **Atualizar todas as partições novas e existentes com metadados da tabela**. Isso define os esquemas de partição que serão herdados da tabela. 

1. Selecione **Atualizar**.

------
#### [ AWS CLI ]

O exemplo a seguir mostra como configurar um crawler para não alterar o esquema existente, apenas adicionar novas colunas:

```
aws glue update-crawler \
  --name myCrawler \
  --configuration '{"Version": 1.0, "CrawlerOutput": {"Tables": {"AddOrUpdateBehavior": "MergeNewColumns"}}}'
```

O exemplo a seguir mostra como configurar um crawler para não alterar o esquema existente e não adicionar novas colunas:

```
aws glue update-crawler \
  --name myCrawler \
  --schema-change-policy UpdateBehavior=LOG \
  --configuration '{"Version": 1.0, "CrawlerOutput": {"Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }}}'
```

------
#### [ API ]

Se você não quiser que um esquema de tabela seja alterado quando um crawler for executado, defina a política de alteração de esquema como `LOG`. 

Quando você configura o crawler usando a API, defina os seguintes parâmetros:
+ Defina o campo `UpdateBehavior` na estrutura `SchemaChangePolicy` para `LOG`.
+  Defina o campo `Configuration` com uma representação de string do objeto JSON a seguir na API do crawler, por exemplo: 

  ```
  {
     "Version": 1.0,
     "CrawlerOutput": {
        "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }
     }
  }
  ```

------

# Criar um esquema único para cada caminho de inclusão do Amazon S3
<a name="crawler-grouping-policy"></a>

Por padrão, quando um crawler define tabelas para dados armazenados no Amazon S3, ele considera a compatibilidade dos dados e a similaridade do esquema. Os fatores de compatibilidade de dados que ele considera incluem: se os dados são do mesmo formato (por exemplo, JSON), do mesmo tipo de compactação (por exemplo, GZIP), a estrutura do caminho do Amazon S3 e outros atributos de dados. Similaridade de esquema é uma medida de até que ponto os esquemas de objetos do Amazon S3 separados são semelhantes.

Para ajudar a ilustrar essa opção, suponha que você defina um crawler com um caminho de inclusão `s3://amzn-s3-demo-bucket/table1/`. Quando o crawler é executado, ele localiza dois arquivos JSON com as seguintes características:
+ **Arquivo 1** – `S3://amzn-s3-demo-bucket/table1/year=2017/data1.json`
+ *Conteúdo do arquivo* – `{“A”: 1, “B”: 2}`
+ *Esquema* – `A:int, B:int`
+ **Arquivo 2** – `S3://amzn-s3-demo-bucket/table1/year=2018/data2.json`
+ *Conteúdo do arquivo* – `{“C”: 3, “D”: 4}`
+ *Esquema* – `C: int, D: int`

Por padrão, o crawler cria duas tabelas, chamadas `year_2017` e `year_2018`, porque os esquemas não são suficientemente semelhantes. No entanto, se a opção **Create a single schema for each S3 path (Criar um único esquema para cada caminho do S3)** for selecionada, e se os dados forem compatíveis, o crawler criará uma tabela. A tabela tem o esquema `A:int,B:int,C:int,D:int` e `partitionKey` `year:string`.

------
#### [ Console de gerenciamento da AWS ]

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha **Crawlers** no **Catálogo de dados**.

1. Ao configurar um novo crawler, em **Saída e programação**, selecione a opção **Criar um único esquema para cada caminho do S3** em Opções avançadas. 

------
#### [ AWS CLI ]

Você pode configurar um crawler para `CombineCompatibleSchemas` em uma definição de tabela comum quando possível. Com essa opção, o crawler ainda considera a compatibilidade dos dados, mas ignora a semelhança dos esquemas específicos ao avaliar objetos do Amazon S3 no caminho de inclusão especificado.

Quando você configurar o crawler usando a AWS CLI, defina a seguinte opção de configuração:

```
aws glue update-crawler \
   --name myCrawler \
   --configuration '{"Version": 1.0, "Grouping": {"TableGroupingPolicy": "CombineCompatibleSchemas" }}'
```

------
#### [ API ]

Quando você configurar o crawler usando a API, defina a seguinte opção de configuração:

 Defina o campo `Configuration` com uma representação de string do objeto JSON a seguir na API do crawler, por exemplo: 

```
{
   "Version": 1.0,
   "Grouping": {
      "TableGroupingPolicy": "CombineCompatibleSchemas" }
}
```

------

# Especificar o local da tabela e o nível de particionamento
<a name="crawler-table-level"></a>

Por padrão, quando um crawler define tabelas para dados armazenados no Amazon S3, ele tenta mesclar esquemas e criar tabelas de nível superior (`year=2019`). Em alguns casos, você pode esperar que o crawler crie uma tabela para a pasta `month=Jan`, mas em vez disso, o crawler cria uma partição desde o momento em que uma pasta irmã (`month=Mar`) tenha sido mesclada na mesma tabela.

A opção de crawler no nível da tabela fornece a flexibilidade de informar ao crawler onde as tabelas estão localizadas e como você deseja que as partições sejam criadas. Quando você especifica um **Table level** (Nível da tabela), ela é criada nesse nível absoluto a partir do bucket do Amazon S3.

![\[Agrupamento de crawler com nível de tabela especificado como nível dois.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-table-level1.jpg)


 Ao configurar o crawler no console, você pode especificar um valor para a opção **Table level** (Nível da tabela) do Crawler. O valor deve ser um inteiro positivo que indica o local da tabela (o nível absoluto no conjunto de dados). O nível para a pasta de nível superior é um. Por exemplo, para o caminho `mydataset/year/month/day/hour`, se o nível for definido como três, a tabela será criada no local `mydataset/year/month`. 

------
#### [ Console de gerenciamento da AWS ]

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha **Crawlers** no **Catálogo de dados**.

1. Ao configurar um crawler, em **Saída e programação**, escolha **Nível da tabela** em **Opções avançadas**.

![\[Especificar um nível de tabela na configuração do crawler.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-configuration-console.png)


------
#### [ AWS CLI ]

Ao configurar o crawler usando o AWS CLI, defina o parâmetro `configuration` conforme mostrado no código de exemplo: 

```
aws glue update-crawler \
  --name myCrawler \
  --configuration '{"Version": 1.0, "Grouping": { "TableLevelConfiguration": 2 }}'
```

------
#### [ API ]

Quando você configurar o crawler usando a API, defina o campo `Configuration` com uma representação de string do objeto JSON a seguir, por exemplo: 

```
configuration = jsonencode(
{
   "Version": 1.0,
   "Grouping": {
            TableLevelConfiguration = 2  
        }
})
```

------
#### [ CloudFormation ]

Neste exemplo, você define a opção **Table level** (Nível da tabela) disponível no console dentro do modelo do CloudFormation:

```
"Configuration": "{
    \"Version\":1.0,
    \"Grouping\":{\"TableLevelConfiguration\":2}
}"
```

------

# Especificar o número máximo de tabelas que o crawler pode criar
<a name="crawler-maximum-number-of-tables"></a>

Opcionalmente, você pode especificar o número máximo de tabelas que o crawler pode criar especificando um `TableThreshold` por meio do console do AWS Glue ou a AWS CLI. Se as tabelas detectadas pelo crawler durante o rastreamento forem maiores que esse valor de entrada, o rastreamento falhará e nenhum dado será gravado no Data Catalog.

Esse parâmetro é útil quando as tabelas que seriam detectadas e criadas pelo crawler são muito maiores do que o esperado. Pode haver vários motivos para isso, por exemplo:
+ Ao usar um trabalho do AWS Glue para preencher seus locais do Amazon S3, você pode acabar com arquivos vazios no mesmo nível de uma pasta. Nesses casos, quando você executa um crawler nesse local do Amazon S3, o crawler cria várias tabelas devido a arquivos e pastas presentes no mesmo nível.
+ Se você não configurar `"TableGroupingPolicy": "CombineCompatibleSchemas"`, pode acabar com mais tabelas do que o esperado. 

Você especifica o `TableThreshold` como um valor inteiro maior que 0. Esse valor é configurado para cada crawler. Ou seja, esse valor é considerado para cada rastreamento. Por exemplo: um crawler tem o valor `TableThreshold` definido como 5. Em cada rastreamento, o AWS Glue vai comparar o número de tabelas detectadas com esse valor limite da tabela (5). Se o número de tabelas detectadas for menor que 5, o AWS Glue vai gravar as tabelas no Data Catalog. Caso contrário, o rastreamento falhará sem gravar no Data Catalog.

------
#### [ Console de gerenciamento da AWS ]

**Para definir `TableThreshold` usando o Console de gerenciamento da AWS:**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Ao configurar um crawler, em **Saída e programação**, defina o **Limite máximo da tabela** para o número de tabelas que o crawler pode gerar.  
![\[A seção Output and scheduling (Saída e agendamento) do console da AWS mostrando o parâmetro Maximum table threshold (Limite máximo da tabela).\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-max-tables.png)

------
#### [ AWS CLI ]

Para definir `TableThreshold` usando a AWS CLI:

```
aws glue update-crawler \
    --name myCrawler \
    --configuration '{"Version": 1.0, "CrawlerOutput": {"Tables": { "TableThreshold": 5 }}}'
```

------
#### [ API ]

Para definir `TableThreshold` usando a API:

```
"{"Version":1.0,
"CrawlerOutput":
{"Tables":{"AddOrUpdateBehavior":"MergeNewColumns",
"TableThreshold":5}}}";
```

------

As mensagens de erro são registradas para ajudar você a identificar os caminhos da tabela e a limpar seus dados. Exemplo: faça login em sua conta se o crawler falhar porque a contagem da tabela foi maior do que o valor limite da tabela fornecido:

```
Table Threshold value = 28, Tables detected - 29
```

No CloudWatch, registramos em log todas as localizações de tabelas detectadas como uma mensagem INFO. Um erro é registrado como o motivo da falha.

```
ERROR com.amazonaws.services.glue.customerLogs.CustomerLogService - CustomerLogService received CustomerFacingException with message 
The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. Failing crawler without writing to Data Catalog.
com.amazonaws.services.glue.exceptions.CustomerFacingInternalException: The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. 
Failing crawler without writing to Data Catalog.
```

# Configurar um crawler para usar credenciais do Lake Formation
<a name="crawler-lf-integ"></a>

Você pode configurar um crawler para usar credenciais do AWS Lake Formation para acessar um datastore do Amazon S3 ou uma tabela do Data Catalog com uma localização subjacente do Amazon S3 dentro da mesma Conta da AWS ou de outra Conta da AWS. Você pode configurar uma tabela existente do Data Catalog como o destino do crawler, se o crawler e a tabela do Data Catalog residirem na mesma conta. No momento, é permitido ter somente um destino de catálogo com apenas uma tabela de catálogo ao usar uma tabela do Catálogo de dados como destino do crawler.

**nota**  
Ao definir uma tabela do Data Catalog como um destino de crawler, certifique-se de que a localização subjacente da tabela do Data Catalog seja um local do Amazon S3. Os crawlers que usam credenciais do Lake Formation são compatíveis somente com destinos do Data Catalog com localizações subjacentes do Amazon S3.

## Configuração exigida quando o crawler e a localização registrada do Amazon S3 ou a tabela do Data Catalog residem na mesma conta (crawling na conta)
<a name="in-account-crawling"></a>

Para permitir que o crawler acesse um datastore ou uma tabela do Data Catalog usando as credenciais do Lake Formation, você precisa registrar a localização dos dados com o Lake Formation. Além disso, o perfil do IAM do crawler deve ter permissões para ler os dados do destino no qual o bucket do Amazon S3 está registrado.

Você pode concluir as seguintes etapas de configuração usando o Console de gerenciamento da AWS ou a AWS Command Line Interface (AWS CLI).

------
#### [ Console de gerenciamento da AWS ]

1. Antes de configurar um crawler para acessar a fonte do crawler, registre a localização dos dados do datastore ou do Data Catalog com o Lake Formation. No console do Lake Formation ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)), registre uma localização do Amazon S3 como a localização raiz do seu data lake na Conta da AWS na qual o crawler está definido. Para obter mais informações, consulte [Registering an Amazon S3 location](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) (Registrar um local do Amazon S3).

1. Conceda permissões de **Data location** (Localização de dados) ao perfil do IAM que é usado para a execução do crawler, de modo que o rastreador possa ler os dados do destino no Lake Formation. Para obter mais informações, consulte [Granting data location permissions (same account)](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html) (Conceder permissões de localização de dados [mesma conta]).

1. Conceda permissões de acesso ao perfil do crawler (`Create`) para o banco de dados, que é especificado como o banco de dados de saída. Para obter mais informações, consulte [Granting database permissions using the Lake Formation console and the named resource method](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-database-permissions.html) (Conceder permissões de banco de dados usando o console do Lake Formation e o método de recurso nomeado).

1. No console do IAM ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)), crie um perfil do IAM para o crawler. Adicione a política `lakeformation:GetDataAccess` ao perfil.

1. No console do AWS Glue ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)), ao configurar o crawler, selecione a opção **Use Lake Formation credentials for crawling Amazon S3 data source** (Usar credenciais do Lake Formation para crawling da fonte de dados do Amazon S3).
**nota**  
O campo accountId é opcional para crawling na conta.

------
#### [ AWS CLI ]

```
aws glue --profile demo create-crawler --debug --cli-input-json '{
    "Name": "prod-test-crawler",
    "Role": "arn:aws:iam::111122223333:role/service-role/AWSGlueServiceRole-prod-test-run-role",
    "DatabaseName": "prod-run-db",
    "Description": "",
    "Targets": {
    "S3Targets":[
                {
                 "Path": "s3://amzn-s3-demo-bucket"
                }
                ]
                },
   "SchemaChangePolicy": {
      "UpdateBehavior": "LOG",
      "DeleteBehavior": "LOG"
  },
  "RecrawlPolicy": {
    "RecrawlBehavior": "CRAWL_EVERYTHING"
  },
  "LineageConfiguration": {
    "CrawlerLineageSettings": "DISABLE"
  },
  "LakeFormationConfiguration": {
    "UseLakeFormationCredentials": true,
    "AccountId": "111122223333"
  },
  "Configuration": {
           "Version": 1.0,
           "CrawlerOutput": {
             "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" },
             "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" }
           },
           "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" }
         },
  "CrawlerSecurityConfiguration": "",
  "Tags": {
    "KeyName": ""
  }
}'
```

------

# Configuração exigida quando o crawler e a localização registrada do Amazon S3 residem em contas diferentes (crawling entre contas)
<a name="cross-account-crawling"></a>

Para permitir que o crawler acesse um datastore em uma conta diferente usando as credenciais do Lake Formation, primeiro você deve registrar a localização de dados do Amazon S3 com o Lake Formation. Em seguida, você concede permissões de localização de dados à conta do crawler conforme as etapas a seguir.

Você pode concluir as seguintes etapas usando o Console de gerenciamento da AWS ou a AWS CLI.

------
#### [ Console de gerenciamento da AWS ]

1. Na conta em que a localização do Amazon S3 está registrada (conta B):

   1. Registre um caminho do Amazon S3 no Lake Formation. Para obter mais informações, consulte [Registering an Amazon S3 location](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) (Registrando um local do Amazon S3).

   1.  Conceda permissões de **Data location** (Localização de dados) para a conta (conta A) na qual o crawler será executado. Para obter mais informações, consulte [Granting data location permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html) (Conceder permissões de localização de dados). 

   1. Crie um banco de dados vazio no Lake Formation com a localização subjacente como o local de destino do Amazon S3. Para obter mais informações, consulte [Creating a database](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-database.html) (Criar um banco de dados).

   1. Conceda à conta A (a conta na qual o crawler será executado) acesso ao banco de dados que você criou na etapa anterior. Para obter mais informações, consulte [Granting database permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-database-permissions.html) (Conceder permissões de banco de dados). 

1. Na conta em que o crawler é criado e será executado (conta A):

   1.  Ao usar o console da AWS RAM, aceite o banco de dados que foi compartilhado da conta externa (conta B). Para obter mais informações, consulte [Aceitar um convite de compartilhamento de recursos do AWS Resource Access Manager](https://docs.aws.amazon.com/lake-formation/latest/dg/accepting-ram-invite.html). 

   1.  Crie um perfil do IAM para o crawler. Adicione a política `lakeformation:GetDataAccess` ao perfil.

   1.  No console do Lake Formation ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)), conceda permissões de **Data location** (Localização dos dados) na localização de destino do Amazon S3 para o perfil do IAM usado para a execução do crawler, de modo que o crawler possa ler os dados do destino no Lake Formation. Para obter mais informações, consulte [Granting data location permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html) (Conceder permissões de localização de dados). 

   1.  Crie um link de recurso no banco de dados compartilhado. Para obter mais informações, consulte [Create a resource link](https://docs.aws.amazon.com/lake-formation/latest/dg/create-resource-link-database.html) (Criar um link de recurso). 

   1.  Conceda permissões de acesso ao perfil do crawler (`Create`) no banco de dados compartilhado e (`Describe`) no link do recurso. O link do recurso é especificado na saída do crawler. 

   1.  No console do AWS Glue ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)), ao configurar o crawler, selecione a opção **Use Lake Formation credentials for crawling Amazon S3 data source** (Usar credenciais do Lake Formation para crawling da fonte de dados do Amazon S3).

      Para crawling entre contas, especifique o ID da Conta da AWS na qual a localização de destino do Amazon S3 está registrada no Lake Formation. O campo accountId é opcional para crawling na conta.   
![\[IAM role selection and Lake Formation configuration options for Crawler do AWS Glue security settings.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/cross-account-crawler.png)

------
#### [ AWS CLI ]

```
aws glue --profile demo create-crawler --debug --cli-input-json '{
    "Name": "prod-test-crawler",
    "Role": "arn:aws:iam::111122223333:role/service-role/AWSGlueServiceRole-prod-test-run-role",
    "DatabaseName": "prod-run-db",
    "Description": "",
    "Targets": {
    "S3Targets":[
                {
                 "Path": "s3://amzn-s3-demo-bucket"
                }
                ]
                },
   "SchemaChangePolicy": {
      "UpdateBehavior": "LOG",
      "DeleteBehavior": "LOG"
  },
  "RecrawlPolicy": {
    "RecrawlBehavior": "CRAWL_EVERYTHING"
  },
  "LineageConfiguration": {
    "CrawlerLineageSettings": "DISABLE"
  },
  "LakeFormationConfiguration": {
    "UseLakeFormationCredentials": true,
    "AccountId": "111111111111"
  },
  "Configuration": {
           "Version": 1.0,
           "CrawlerOutput": {
             "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" },
             "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" }
           },
           "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" }
         },
  "CrawlerSecurityConfiguration": "",
  "Tags": {
    "KeyName": ""
  }
}'
```

------

**nota**  
Um crawler que use credenciais do Lake Formation é compatível somente com destinos do Amazon S3 e do Data Catalog.
Para destinos que utilizam o fornecimento de credenciais do Lake Formation, as localizações subjacentes do Amazon S3 devem pertencer ao mesmo bucket. Por exemplo, os clientes podem usar vários destinos (s3://amzn-s3-demo-bucket1/folder1, s3://amzn-s3-demo-bucket1/folder2), desde que todos os locais de destino estejam no mesmo bucket (amzn-s3-demo-bucket1). Não é permitido especificar buckets diferentes (s3://amzn-s3-demo-bucket1/folder1, s3://amzn-s3-demo-bucket2/folder2).
No momento, só é permitido ter um destino de catálogo com uma só tabela de catálogo para crawlers de destino do Data Catalog.

# Acelerar crawls usando notificações de eventos do Amazon S3
<a name="crawler-s3-event-notifications"></a>

Em vez de listar os objetos de um destino do Amazon S3 ou do Data Catalog, você pode configurar o crawler para usar eventos do Amazon S3 para localizar quaisquer alterações. Esse recurso melhora o tempo de recrawl usando eventos do Amazon S3 para identificar as alterações entre dois crawls listando todos os arquivos da subpasta que disparou o evento em vez de listar o destino completo do Amazon S3 ou do Data Catalog.

O primeiro crawl lista todos os objetos do Amazon S3 do destino. Após o primeiro crawling bem-sucedido, você pode optar pelo recrawling manualmente ou em um cronograma definido. O crawler listará apenas os objetos desses eventos em vez de listar todos os objetos.

Quando o destino é uma tabela do Catálogo de dados, o crawler atualiza as tabelas existentes no Catálogo de dados com as alterações (por exemplo, partições extras em uma tabela).

As vantagens de migrar para um crawler baseado em eventos do Amazon S3 são:
+ Uma recuperação mais rápida, pois a listagem de todos os objetos do destino não é necessária, em vez disso, a listagem de pastas específicas é feita onde os objetos são adicionados ou excluídos.
+ Uma redução no custo geral de crawl à medida que a listagem de pastas específicas é feita onde os objetos são adicionados ou excluídos.

O crawl de eventos do Amazon S3 é executado consumindo eventos do Amazon S3 da fila SQS com base na programação do crawler. Não haverá custo se não houver eventos na fila. Os eventos do Amazon S3 podem ser configurados para ir diretamente para a fila SQS ou nos casos em que vários consumidores precisam do mesmo evento, uma combinação de SNS e SQS. Para obter mais informações, consulte [Configurar sua conta para notificações de eventos do Amazon S3](#crawler-s3-event-notifications-setup).

Depois de criar e configurar o crawler no modo de evento, o primeiro crawl é executado no modo de listagem fazendo uma listagem completa do destino do Amazon S3 ou do Data Catalog. O log a seguir confirma a operação do crawl consumindo eventos do Amazon S3 após o primeiro crawl bem-sucedido: "The crawl is running by consuming Amazon S3 events." (O crawl está sendo executado consumindo eventos do Amazon S3).

Depois de criar o crawl de eventos do Amazon S3 e atualizar as propriedades do crawler que podem afetar o crawl, o crawl opera no modo de lista e o seguinte log é adicionado: "Crawl is not running in S3 event mode" (O crawl não está sendo executado no modo de evento S3).

**nota**  
O número máximo de mensagens a serem consumidas é 100 mil mensagens por operação de crawl.

## Considerações e limitações
<a name="s3event-crawler-limitations"></a>

As considerações e limitações apresentadas a seguir se aplicam ao configurar um crawler para usar notificações de eventos do Amazon S3 na descoberta de alterações. 
+  **Aspectos relevantes do comportamento ao lidar com partições excluídas** 

  Ao usar crawlers de eventos do Amazon S3 com as tabelas do Catálogo de Dados:
  +  Se você excluir uma partição usando a chamada de API `DeletePartition`, também deverá excluir todos os objetos do S3 contidos nessa partição e selecionar a opção **Todos os eventos de remoção de objetos** ao configurar as notificações de eventos do S3. Se os eventos de exclusão não estiverem configurados, o crawler recriará a partição excluída na próxima execução. 
+ O crawler só é compatível com um único destino, tanto para destinos do Amazon S3 quanto do Data Catalog.
+ Não há suporte para SQS na VPC privada.
+ Não há suporte para amostragem do Amazon S3.
+ O destino do crawler deve ser uma pasta para um destino do Amazon S3 ou uma ou mais tabelas do AWS Glue Data Catalog para um destino do Data Catalog.
+ Não há suporte para o curinga de caminho ‘everything’ (tudo): s3: //%
+ Para um destino do Data Catalog, todas as tabelas de catálogo devem apontar para o mesmo bucket do Amazon S3 para o modo de evento do Amazon S3.
+ Para um destino do Data Catalog, uma tabela de catálogo não deve apontar para uma localização no Amazon S3 no formato Delta Lake (contendo pastas \$1symlink ou conferindo o `InputFormat` da tabela do catálogo).

**Topics**
+ [Considerações e limitações](#s3event-crawler-limitations)
+ [Configurar sua conta para notificações de eventos do Amazon S3](#crawler-s3-event-notifications-setup)
+ [Configurar um crawler de notificações de eventos do Amazon S3 para um destino do Amazon S3](crawler-s3-event-notifications-setup-console-s3-target.md)
+ [Configurar um crawler para notificações de eventos do Amazon S3 para uma tabela do Catálogo de dados](crawler-s3-event-notifications-setup-console-catalog-target.md)

## Configurar sua conta para notificações de eventos do Amazon S3
<a name="crawler-s3-event-notifications-setup"></a>

Complete as tarefas de configuração a seguir. Observe que os valores entre parênteses fazem referência às definições configuráveis do script.

1. É necessário configurar notificações de eventos para seu bucket do Amazon S3.

   Para obter mais informações, consulte [Notificações de eventos do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html).

1. Para usar o crawler baseado em eventos do Amazon S3, você deve habilitar a notificação de eventos no bucket do Amazon S3 com eventos filtrados do prefixo que é o mesmo que o destino do S3 e armazenado no SQS. Você pode configurar o SQS e a notificação de eventos por meio do console seguindo as etapas em [Passo a passo: configuração de um bucket para notificações](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ways-to-add-notification-config-to-bucket.html).

1. Adicione a política de SQS a seguir à função usada pelo crawler. 

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": [
           "sqs:DeleteMessage",
           "sqs:GetQueueUrl",
           "sqs:ListDeadLetterSourceQueues",
           "sqs:ReceiveMessage",
           "sqs:GetQueueAttributes",
           "sqs:ListQueueTags",
           "sqs:SetQueueAttributes",
           "sqs:PurgeQueue"
         ],
         "Resource": "arn:aws:sqs:us-east-1:111122223333:cfn-sqs-queue"
       }
     ]
   }
   ```

------

# Configurar um crawler de notificações de eventos do Amazon S3 para um destino do Amazon S3
<a name="crawler-s3-event-notifications-setup-console-s3-target"></a>

Siga estas etapas para configurar um crawler para notificações de eventos do Amazon S3 para um destino do Amazon S3 usando o Console de gerenciamento da AWS ou a AWS CLI.

------
#### [ Console de gerenciamento da AWS ]

1. Faça login no Console de gerenciamento da AWS e abra o console do GuardDuty em [https://console.aws.amazon.com/guardduty/](https://console.aws.amazon.com/guardduty/).

1.  Defina as propriedades do crawler. Para obter mais informações, consulte [Definir opções de configuração do crawler no console do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-configure-changes-console). 

1.  Na seção **Configuração da fonte de dados**, é perguntado a você se *Os dados já estão mapeados para tabelas do AWS Glue? * 

    A opção **Not yet** (Ainda não) já estará selecionada por padrão. Isso ocorre porque você está usando uma fonte de dados do Amazon S3 e os dados ainda não estão mapeados para as tabelas do AWS Glue. 

1.  Na seção **Data sources** (Fontes de dados), escolha **Add a data source** (Adicionar uma fonte de dados).   
![\[Data source configuration interface with options to select or add data sources for crawling.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-s3-event-console1.png)

1.  No modal **Add data source** (Adicionar origem dos dados), configure a fonte de dados do Amazon S3: 
   +  **Data source** (Fonte de dados): o Amazon S3 é selecionado por padrão. 
   +  **Network connection** (Conexão de rede) (opcional): escolha **Add new connection** (Adicionar nova conexão). 
   +  **Location of Amazon S3 data** (Local de dados do Amazon S3): a opção **In this account** (Nesta conta) será selecionado por padrão. 
   +  **Amazon S3 path** (Caminho do Amazon S3): especifique o caminho do Amazon S3 no qual pastas e arquivos são rastreados. 
   +  **Subsequent crawler runs** (Execuções subsequentes do crawler): escolha **Crawl based on events** (Rastreamento baseado em eventos) para usar notificações de eventos do Amazon S3 para seu crawler. 
   +  **Include SQS ARN** (Incluir ARN de SQS): especifique os parâmetros do armazenamento de dados, incluindo um ARN válido do SQS. (Por exemplo, `arn:aws:sqs:region:account:sqs`). 
   +  **Include dead-letter SQS ARN** (Incluir ARN de mensagens não entregues do SQS) (opcional): especifique um ARN válido de mensagens não entregues do SQS na Amazon. (Por exemplo, `arn:aws:sqs:region:account:deadLetterQueue`). 
   +  Escolha **Add an Amazon S3 data source** (Adicionar uma fonte de dados do Amazon S3).   
![\[Add data source dialog for S3, showing options for network connection and crawl settings.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-s3-event-console2.png)

------
#### [ AWS CLI ]

 O exemplo a seguir é uma chamada da AWS CLI do Amazon S3 para configurar um crawler para usar notificações de eventos para fazer crawl em um bucket de destino do Amazon S3. 

```
Create Crawler:
aws glue update-crawler \
    --name myCrawler \
    --recrawl-policy RecrawlBehavior=CRAWL_EVENT_MODE \
    --schema-change-policy UpdateBehavior=UPDATE_IN_DATABASE,DeleteBehavior=LOG
    --targets '{"S3Targets":[{"Path":"s3://amzn-s3-demo-bucket/", "EventQueueArn": "arn:aws:sqs:us-east-1:012345678910:MyQueue"}]}'
```

------

# Configurar um crawler para notificações de eventos do Amazon S3 para uma tabela do Catálogo de dados
<a name="crawler-s3-event-notifications-setup-console-catalog-target"></a>

Quando você tiver uma tabela do Catálogo de dados, configure um crawler para fornecer notificações de eventos do Amazon S3 usando o console do AWS Glue:

1.  Defina as propriedades do crawler. Para obter mais informações, consulte [Definir opções de configuração do crawler no console do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-configure-changes-console). 

1.  Na seção **Configuração da fonte de dados**, é perguntado a você se *Os dados já estão mapeados para tabelas do AWS Glue? * 

    Selecione **Yes** (Sim) para selecionar as tabelas existentes do Data Catalog como fonte de dados. 

1.  Na seção **Glue tables** (Tabelas do Glue), escolha **Add tables** (Adicionar tabelas).   
![\[Data source configuration interface with options to select existing Glue tables or add new ones.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-s3-event-console1-cat.png)

1.  No modal **Add table** (Adicionar tabela), configure o banco de dados e as tabelas: 
   +  **Network connection** (Conexão de rede) (opcional): escolha **Add new connection** (Adicionar nova conexão). 
   +  **Database** (Banco de dados): selecione um banco de dados no Data Catalog. 
   +  **Tables** (Tabelas): selecione uma ou mais tabelas desse banco de dados no Data Catalog. 
   +  **Subsequent crawler runs** (Execuções subsequentes do crawler): escolha **Crawl based on events** (Rastreamento baseado em eventos) para usar notificações de eventos do Amazon S3 para seu crawler. 
   +  **Include SQS ARN** (Incluir ARN de SQS): especifique os parâmetros do armazenamento de dados, incluindo um ARN válido do SQS. (Por exemplo, `arn:aws:sqs:region:account:sqs`). 
   +  **Include dead-letter SQS ARN** (Incluir ARN de mensagens não entregues do SQS) (opcional): especifique um ARN válido de mensagens não entregues do SQS na Amazon. (Por exemplo, `arn:aws:sqs:region:account:deadLetterQueue`). 
   +  Escolha **Confirmar**.   
![\[Add Glue tables dialog with network, database, tables, and crawler options.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawler-s3-event-console2-cat.png)

# Tutorial: Adicionar um crawler do AWS Glue
<a name="tutorial-add-crawler"></a>

Para este cenário do AWS Glue, será solicitado que você analise os dados de chegada das principais transportadoras aéreas para calcular a popularidade dos aeroportos de partida mês a mês. Você tem dados de voos do ano de 2016 no formato CSV armazenados no Amazon S3. Antes de transformar e analisar seus dados, você cataloga seus metadados no AWS Glue Data Catalog.

Neste tutorial, vamos adicionar um crawler que infere metadados desses logs de voos no Amazon S3 e cria uma tabela no Data Catalog.

**Topics**
+ [Pré-requisitos](#tutorial-add-crawler-prerequisites)
+ [Etapa 1: Adicionar um crawler](#tutorial-add-crawler-step1)
+ [Etapa 2: Executar o crawler](#tutorial-add-crawler-step2)
+ [Etapa 3: Exibir objetos do AWS Glue Data Catalog](#tutorial-add-crawler-step3)

## Pré-requisitos
<a name="tutorial-add-crawler-prerequisites"></a>

Este tutorial pressupõe que você tem uma conta da AWS e acesso ao AWS Glue.

## Etapa 1: Adicionar um crawler
<a name="tutorial-add-crawler-step1"></a>

Use estas etapas para configurar e executar um crawler que extrai os metadados de um arquivo CSV armazenado no Amazon S3.

**Para criar um crawler que lê arquivos armazenados no Amazon S3**

1. No console de serviço do AWS Glue, no menu do lado esquerdo, selecione **Crawlers**.

1. Na página Crawlers, escolha **Create crawler** (Criar crawler). Isso inicia uma série de páginas que solicitam os detalhes do crawler.  
![\[A captura de tela mostra a página do crawler. A partir daqui, você pode criar um crawler ou editar, duplicar, excluir e visualizar um crawler existente.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/crawlers-create_crawler.png)

1. No campo de nome do crawler, insira **Flights Data Crawler** e, em seguida, escolha **Next** (Próximo).

   Crawlers invocam classificadores para inferir o esquema dos seus dados. Este tutorial usa o classificador integrado para CSV por padrão. 

1. Para o tipo de origem do crawler, escolha **Data stores** (Armazenamentos de dados) e, em seguida, **Next** (Próximo).

1. Agora, vamos apontar o crawler para os seus dados. Na página **Add a data store** (Adicionar um armazenamento de dados), escolha o armazenamento de dados do Amazon S3. Este tutorial não usa uma conexão, então deixe o campo **Connection** (Conexão) em branco, se estiver visível. 

   Na opção **Crawl data in** (Rastrear dados em), escolha **Specified path in another account** (Caminho especificado em outra conta). Em **Include path** (Incluir o caminho), insira o caminho em que o crawler pode encontrar os dados de voos, que é **s3://crawler-public-us-east-1/flight/2016/csv**. Depois de inserir o caminho, o título desse campo muda para **Include path** (Incluir o caminho). Escolha **Próximo**.

1. É possível rastrear vários armazenamentos de dados com um único crawler. No entanto, neste tutorial, estamos usando apenas um único armazenamento de dados, então escolha **No** (Não) e, depois, escolha **Next** (Próximo).

1. O crawler precisa de permissões para acessar o armazenamento de dados e criar objetos no AWS Glue Data Catalog. Para configurar essas permissões, escolha **Create an IAM role** (Criar uma função do IAM). O nome da função do IAM começa com `AWSGlueServiceRole-` e, no campo, insira a última parte do nome da função. Insira **CrawlerTutorial** e escolha **Next** (Próximo). 
**nota**  
Para criar uma função do IAM, seu usuário da AWS deve ter as permissões `CreateRole`, `CreatePolicy` e `AttachRolePolicy`.

   O assistente cria uma função do IAM denominada `AWSGlueServiceRole-CrawlerTutorial`, anexa a política gerenciada pela AWS `AWSGlueServiceRole` a essa função e adiciona uma política embutida que permite acesso de leitura ao local do Amazon S3 `s3://crawler-public-us-east-1/flight/2016/csv`.

1. Crie uma programação para o crawler. Em **Frequency** (Frequência), escolha **Run on demand** (Executar sob demanda) e, depois, escolha **Next** (Próximo). 

1. Os crawlers criam tabelas no Data Catalog. As tabelas são contidas em um banco de dados no Data Catalog. Primeiro, escolha **Add database** (Adicionar banco de dados) para criar um banco de dados. Na janela pop-up, insira **test-flights-db** no nome do banco de dados e escolha **Create** (Criar).

   Em seguida, insira **flights** em **Prefix added to tables** (Prefixo adicionado às tabelas). Use os valores padrão para o restante das opções e escolha **Next** (Próximo).

1. Verifique as opções que você escolheu no assistente **Add crawler** (Adicionar crawler). Se você vir algum erro, pode escolher **Back** (Voltar) para retornar às páginas anteriores e fazer alterações.

   Depois de revisar as informações, escolha **Finish** (Finalizar) para criar o crawler.

## Etapa 2: Executar o crawler
<a name="tutorial-add-crawler-step2"></a>

Depois de criar um crawler, o assistente o envia para a página de exibição de crawlers. Como você cria o crawler com uma programação sob demanda, você tem a opção de executá-lo.

**Para executar o crawler**

1. O banner próximo à parte superior dessa página permite que você saiba que o crawler foi criado e pergunta se você deseja executá-lo agora. Escolha **Run it now?** (Executá-lo agora?) para executar o crawler.

   O banner muda para mostrar as mensagens “Attempting to run” (Tentativa de execução) e “Running” (Em execução) para o crawler. Depois que o crawler começa a ser executado, o banner desaparece e a exibição do crawler é atualizada para mostrar o status “Starting” (Iniciando) para o crawler. Após um minuto, você pode clicar no ícone Refresh (Atualizar) para atualizar o status do crawler exibido na tabela.

1. Quando o crawler for concluído, será exibido um novo banner que descreve as alterações feitas por ele. Você pode escolher o link **test-flights-db** para exibir os objetos do Data Catalog.

## Etapa 3: Exibir objetos do AWS Glue Data Catalog
<a name="tutorial-add-crawler-step3"></a>

O crawler lê dados no local de origem e cria tabelas no Data Catalog. A tabela é uma definição de metadados que representa seus dados, incluindo o esquema. As tabelas no Data Catalog não contêm dados. Em vez disso, você usa essas tabelas como uma origem ou destino em uma definição de trabalho.

**Para exibir os objetos do Data Catalog criados pelo crawler**

1. No painel de navegação do lado esquerdo, em **Data Catalog**, escolha **Databases** (Bancos de dados). Aqui você pode ver o banco de dados `flights-db` criado pelo crawler.

1. No painel de navegação do lado esquerdo, em **Data Catalog** e abaixo de **Databases** (Bancos de dados), escolha **Tables** (Tabelas). Aqui, você pode ver a tabela `flightscsv` criada pelo crawler. Se você escolher o nome da tabela, poderá exibir as configurações, os parâmetros e as propriedades dela. Ao rolar para baixo nessa exibição, você pode ver o esquema, que são informações sobre as colunas e os tipos de dados da tabela.

1. Se escolher **View partitions** (Exibir partições) na página de exibição da tabela, poderá ver as partições criadas para os dados. A primeira coluna é a chave de partição.

# Definir metadados manualmente
<a name="populate-dg-manual"></a>

 O Catálogo de Dados do AWS Glue é um repositório central que armazena metadados sobre suas fontes de dados e conjuntos de dados. Embora um crawler possa obter e preencher automaticamente os metadados das fontes de dados compatíveis, há alguns cenários em que talvez seja necessário definir os metadados manualmente no Catálogo de Dados: 
+ Formatos de dados incompatíveis: se você tiver fontes de dados que não são compatíveis com o crawler, será necessário definir manualmente os metadados dessas fontes de dados no Catálogo de Dados.
+ Requisitos de metadados personalizados: o Crawler do AWS Glue infere metadados com base em regras e convenções predefinidas. Se você tiver requisitos específicos de metadados que não são cobertos pelos metadados Crawler do AWS Glue inferidos, você poderá definir manualmente os metadados para atender às suas necessidades 
+ Governança e padronização de dados: em alguns casos, talvez você queira ter mais controle sobre as definições de metadados por motivos de governança, conformidade ou segurança de dados. A definição manual de metadados permite garantir que os metadados estejam de acordo com os padrões e políticas da sua organização. 
+ Espaço reservado para futura ingestão de dados: se houver fontes de dados que não estão imediatamente disponíveis ou acessíveis, você poderá criar tabelas de esquema vazias como espaços reservados. Quando as fontes de dados se tornarem disponíveis, você poderá preencher as tabelas com os dados reais, mantendo a estrutura predefinida. 

 Para definir metadados manualmente, você pode usar o console do AWS Glue, o console do Lake Formation, a API do AWS Glue ou o a AWS Command Line Interface (AWS CLI). É possível criar bancos de dados, tabelas e partições e especificar propriedades de metadados, como nomes de colunas, tipos de dados, descrições e outros atributos. 

# Criar bancos de dados
<a name="define-database"></a>

Os bancos de dados são usados para organizar tabelas de metadados no AWS Glue. Ao definir uma tabela no AWS Glue Data Catalog, você a adiciona a um banco de dados. Uma tabela pode estar somente em um banco de dados por vez.

Seu banco de dados pode conter tabelas que definem dados de diferentes armazenamentos de dados. Esses dados podem incluir objetos no Amazon Simple Storage Service (Amazon S3) e tabelas relacionais no Amazon Relational Database Service.

**nota**  
Quando você exclui um banco de dados do AWS Glue Data Catalog, todas as tabelas contidas nele também são excluídas.

 Para visualizar a lista de bancos de dados, faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/). Escolha **Databases** e, em seguida, selecione o nome do banco de dados na lista para ver os detalhes dele. 

 Na guia **Databases** no console do AWS Glue, você pode adicionar, editar e excluir bancos de dados:
+ Para criar um novo banco de dados, escolha **Add database** e forneça um nome e uma descrição. Para compatibilidade com outros armazenamentos de metadados, como o Apache Hive, as letras do nome são transformadas em minúsculas. 
**nota**  
Se você planeja acessar o banco de dados a partir do Amazon Athena, forneça um nome somente com caracteres alfanuméricos e sublinhados. Para obter mais informações, consulte [Nomes de tabelas, bancos de dados e colunas](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#ate-table-database-and-column-names-allow-only-underscore-special-characters). 
+  Para editar a descrição de um banco de dados, marque a caixa de seleção ao lado do nome do banco de dados e escolha **Edit** (Editar). 
+  Para excluir um banco de dados, marque a caixa de seleção ao lado do nome do banco de dados e escolha **Remove**. 
+  Para exibir a lista de tabelas contidas no banco de dados, escolha o nome do banco de dados e as propriedades do banco de dados exibirão todas as tabelas no banco de dados. 

Para alterar o banco de dados em que o crawler escreve, você precisa alterar a definição desse crawler. Para obter mais informações, consulte [Usar crawlers para preencher o catálogo de dados](add-crawler.md).

## Links de recursos de bancos de dados
<a name="databases-resource-links"></a>


|  | 
| --- |
| O console do AWS Glue passou por uma atualização recente. A versão atual do console não é compatível com links de recursos de banco de dados. | 

O Data Catalog também pode conter *links do recurso* para bancos de dados. Um link de recurso de banco de dados é um link para um banco de dados local ou compartilhado. No momento, você pode criar links de recursos somente no AWS Lake Formation. Depois de criar um link de recurso para um banco de dados, você pode usar o nome do link de recurso onde quer que você use o nome do banco de dados. Junto com bancos de dados que você possui ou que são compartilhados com você, links de recursos de banco de dados são retornados por `glue:GetDatabases()` e aparecem como entradas na página **Databases** (Bancos de dados) do console do AWS Glue.

O Data Catalog também pode conter links do recurso para tabelas.

Para obter mais informações sobre links de recursos, consulte [Criar links de recursos](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-resource-links.html) no *Guia do desenvolvedor do AWS Lake Formation*.

# Criar tabelas
<a name="tables-described"></a>

Embora a execução de um crawler seja o método recomendado para fazer o inventário dos dados em seus armazenamentos de dados, você pode adicionar tabelas de metadados ao AWS Glue Data Catalog manualmente. Essa abordagem permite que você tenha mais controle sobre as definições de metadados e as personalize de acordo com seus requisitos específicos.

Você também pode adicionar definições de tabela manualmente ao Catálogo de Dados das seguintes formas:
+ Use o console do AWS Glue para criar manualmente uma tabela no AWS Glue Data Catalog. Para obter mais informações, consulte [Criar tabelas usando o console](#console-tables).
+ Use a operação `CreateTable` em [API AWS Glue](aws-glue-api.md) para criar uma tabela no AWS Glue Data Catalog. Para obter mais informações, consulte [Ação CreateTable (Python: create\$1table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-CreateTable).
+ Use modelos do CloudFormation. Para obter mais informações, consulte [AWS CloudFormation para AWS Glue](populate-with-cloudformation-templates.md).

Ao definir uma tabela manualmente usando o console ou uma API, você especifica o esquema da tabela e o valor de um campo de classificação que indica o tipo e o formato dos dados na fonte de dados. Se um crawler criar a tabela, o esquema e o formato dos dados serão determinados por um classificador integrado ou um classificador personalizado. Para obter mais informações sobre como criar uma tabela usando o console do AWS Glue, consulte [Criar tabelas usando o console](#console-tables).

**Topics**
+ [Partições de tabela](#tables-partition)
+ [Links de recursos de tabela](#tables-resource-links)
+ [Criar tabelas usando o console](#console-tables)
+ [Criar índices de partição](partition-indexes.md)
+ [Atualizar tabelas do Data Catalog criadas manualmente usando crawlers](#update-manual-tables)
+ [Propriedades da tabela do Data Catalog](#table-properties)

## Partições de tabela
<a name="tables-partition"></a>

Uma definição de tabela do AWS Glue de uma pasta do Amazon Simple Storage Service (Amazon S3) pode descrever uma tabela particionada. Por exemplo, para melhorar a performance da consulta, uma tabela particionada pode separar dados mensais em diferentes arquivos usando o nome do mês como uma chave. No AWS Glue, as definições de tabela incluem a chave de particionamento de uma tabela. Quando o AWS Glue avalia os dados nas pastas do Amazon S3 para catalogar uma tabela, ele determina se foi adicionada uma tabela individual ou particionada. 

Você pode criar índices de partição em uma tabela para buscar um subconjunto das partições em vez de carregar todas as partições na tabela. Para obter mais informações sobre como trabalhar com índices de partição, consulte [Criar índices de partição](partition-indexes.md).

Todas as condições a seguir precisam ser verdadeiras para que o AWS Glue crie uma tabela particionada para uma pasta do Amazon S3:
+ Os esquemas dos arquivos são semelhantes, conforme determinado pelo AWS Glue.
+ O formato de dados dos arquivos é o mesmo.
+ A compressão de dados dos arquivos é a mesma.

Por exemplo, você pode possuir um bucket do Amazon S3 chamado `my-app-bucket`, onde armazena dados de vendas de aplicações iOS e Android. Os dados são particionados por ano, mês e dia. Os arquivos de dados para vendas de aplicativos iOS e Android têm o mesmo esquema, formato de dados e formato de compactação. No AWS Glue Data Catalog, o crawler do AWS Glue cria uma definição de tabela com chaves de particionamento por ano, mês e dia. 

A seguinte listagem do Amazon S3 de `my-app-bucket` mostra algumas das partições. O símbolo `=` é usado para atribuir valores de chave de partição. 

```
   my-app-bucket/Sales/year=2010/month=feb/day=1/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=1/Android.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/Android.csv
   ...
   my-app-bucket/Sales/year=2017/month=feb/day=4/iOS.csv
   my-app-bucket/Sales/year=2017/month=feb/day=4/Android.csv
```

## Links de recursos de tabela
<a name="tables-resource-links"></a>


|  | 
| --- |
| O console do AWS Glue passou por uma atualização recente. A versão atual do console não é compatível com links de recursos de tabela. | 

O Data Catalog também pode conter *links de recursos* para tabelas. Um link de recurso de tabela é um link para uma tabela local ou compartilhada. No momento, você pode criar links de recursos somente no AWS Lake Formation. Depois de criar um link de recurso para uma tabela, você pode usar o nome do link de recurso onde quer que você use o nome da tabela. Junto com tabelas que você possui ou que são compartilhadas com você, links de recursos de tabelas são retornados por `glue:GetTables()` e aparecem como entradas na página **Tables** (Tabelas) do console do AWS Glue.

O Data Catalog também pode conter links de recursos de banco de dados.

Para obter mais informações sobre links de recursos, consulte [Criar links de recursos ](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-resource-links.html) no *Guia do desenvolvedor do AWS Lake Formation*.

## Criar tabelas usando o console
<a name="console-tables"></a>

Uma tabela no AWS Glue Data Catalog é a definição de metadados que representa os dados em um datastore. Você cria tabelas quando executa um crawler ou manualmente no console do AWS Glue. A lista **Tables (Tabelas)** no console do AWS Glue exibe valores dos metadados da sua tabela. Você usa definições de tabela para especificar fontes e destino ao criar trabalhos de ETL (extração, transformação e carregamento). 

**nota**  
Com as mudanças recentes no console de gerenciamento da AWS, pode ser necessário modificar os perfis do IAM existentes para que tenham a permissão de [https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables). Para a criação de um novo perfil, a permissão da API `SearchTables` já foi adicionada como padrão.

Para começar, faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/). Escolha a guia **Tables** e use o botão **Add tables** para criar tabelas com um crawler ou digitando atributos manualmente. 

### Adicionar tabelas ao console
<a name="console-tables-add"></a>

Para usar um crawler para adicionar tabelas, escolha **Add tables**, **Add tables using a crawler**. Em seguida, siga as instruções no assistente **Add crawler**. Quando o crawler for executado, as tabelas serão adicionadas ao AWS Glue Data Catalog. Para obter mais informações, consulte [Usar crawlers para preencher o catálogo de dados](add-crawler.md).

Se você conhecer os atributos necessários para criar uma definição de tabela do Amazon Simple Storage Service (Amazon S3) no Data Catalog, você poderá criá-la com o assistente de tabela. Escolha **Add tables**, **Add table manually** a siga as instruções no assistente **Add table**.

Ao adicionar uma tabela manualmente usando o console, considere o seguinte:
+ Se você planeja acessar a tabela a partir do Amazon Athena, forneça um nome somente com caracteres alfanuméricos e sublinhados. Para obter mais informações, consulte [Nomes do Athena](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#ate-table-database-and-column-names-allow-only-underscore-special-characters).
+ O local dos seus dados de origem deve ser um caminho do Amazon S3.
+ O formato dos dados deve corresponder a um dos formatos listados no assistente. A classificação correspondente, SerDe, e outras propriedades da tabela serão preenchidas automaticamente com base no formato escolhido. Você pode definir tabelas com os seguintes formatos:   
**Avro**  
Formato binário JSON do Apache Avro.  
**CSV**  
Valores separados por vírgula (CSV). Você também especifica o delimitador como vírgula, barra vertical, ponto e vírgula, tabulação ou Ctrl\$1A.  
**JSON**  
JavaScript Object Notation.  
**XML**  
Formato Extensible Markup Language. Especifique a tag XML que define uma linha nos dados. As colunas são definidas nas tags de linha.  
**Parquet**  
Armazenamento em colunas no Apache Parquet.  
**ORC**  
Formato Optimized Row Columnar (ORC). Um formato criado para armazenar dados do Hive com eficiência.
+ Você pode definir uma chave de partição para a tabela.
+ No momento, as tabelas particionadas que você cria com o console não podem ser usadas em trabalhos de ETL.

### Atributos da tabela
<a name="console-tables-attributes"></a>

Veja a seguir alguns atributos importantes da sua tabela:

**Nome**  
O nome é determinado quando a tabela é criada, e você não pode alterá-la. Você faz referência a um nome de tabela em muitas operações do AWS Glue.

**Banco de dados**  
O objeto do contêiner onde a sua tabela reside. Este objeto contém uma organização das suas tabelas que existe dentro do AWS Glue Data Catalog e pode diferir de uma organização no seu datastore. Quando você exclui um banco de dados, todas as tabelas contidas nele também são excluídas do Data Catalog. 

**Descrição**  
A descrição da tabela. Você pode escrever uma descrição para ajudá-lo a entender o conteúdo da tabela.

**Formato da tabela**  
Especifique a criação de uma tabela padrão do AWS Glue ou de uma tabela no formato do Apache Iceberg.  
O Data Catalog fornece as seguintes opções de otimização de tabelas para gerenciar o armazenamento de tabelas e melhorar o desempenho de consultas para tabelas Iceberg.  
+ **Compactação**: os arquivos de dados são mesclados e regravados para remover dados obsoletos e consolidar dados fragmentados em arquivos maiores e mais eficientes.
+ **Retenção de snapshots**: os snapshots são versões com carimbo de data e hora de uma tabela do Iceberg. As configurações de retenção de snapshots permitem que os clientes determinem por quanto tempo reter e quantos snapshots devem ser retidos. A configuração de um otimizador de retenção de snapshots pode ajudar a gerenciar a sobrecarga de armazenamento removendo snapshots antigos e desnecessários e seus arquivos subjacentes.
+ **Exclusão de arquivos órfãos**: arquivos órfãos são arquivos que não são mais referidos pelos metadados da tabela do Iceberg. Esses arquivos podem se acumular ao longo do tempo, especialmente após operações como exclusões de tabelas ou trabalhos de ETL com falha. Habilitar a exclusão de arquivos órfãos permite que o AWS Glue identifique e remova periodicamente esses arquivos desnecessários, liberando espaço de armazenamento.
Para obter mais informações, consulte [Otimizar tabelas Iceberg](table-optimizers.md).

**Configuração de otimização**  
É possível usar as configurações padrão ou personalizar as configurações para ativar os otimizadores de tabela.

**perfil do IAM**  
 Para executar a compactação, o serviço assume um perfil do IAM em seu nome. Você pode escolher um perfil do IAM usando o menu suspenso. Certifique-se de que o perfil tenha as permissões necessárias para habilitar a compactação.  
Para saber mais sobre as permissões necessárias para o perfil do IAM, consulte [Pré-requisitos de otimização de tabelas](optimization-prerequisites.md).

**Local**  
O ponteiro para o local dos dados em um datastore que esta definição de tabela representa.

**Classificação**  
Um valor de categorização fornecido quando a tabela foi criada. Normalmente, ele é escrito quando um crawler é executado e especifica o formato dos dados da fonte.

**Data da última atualização**  
A hora e a data (UTC) em que esta tabela foi atualizada no Data Catalog.

**Data adicionada**  
A hora e a data (UTC) em que esta tabela foi adicionada ao Data Catalog.

**Suspenso**  
Se o AWS Glue descobrir que uma tabela do Data Catalog não existe mais no seu datastore original, ele marcará essa tabela como defasada no catálogo de dados. Se você executar um trabalho que faz referência a uma tabela obsoleta, ele falhará. Edite trabalhos que fazem referência a tabelas obsoletas para removê-las como fontes e destinos. Recomendamos que você elimine tabelas obsoletas quando elas não forem mais necessárias. 

**Conexão**  
Se o AWS Glue exigir conexão com seu datastore, o nome da conexão será associado à tabela.

### Exibir e gerenciar detalhes da tabela
<a name="console-tables-details"></a>

Para ver os detalhes de uma tabela existente, escolha o nome dela na lista e, em seguida, **Action, View details**.

Esses detalhes incluem propriedades da sua tabela e do seu esquema. Essa exibição mostra o esquema da tabela, incluindo os nomes de colunas na ordem definida para a tabela, os tipos de dados e as colunas de chaves para partições. Se uma coluna for de um tipo complexo, você poderá escolher **View properties** para exibir detalhes da estrutura desse campo, como mostrado no exemplo a seguir:

```
{
"StorageDescriptor": 
    {
      "cols": {
         "FieldSchema": [
           {
             "name": "primary-1",
             "type": "CHAR",
             "comment": ""
           },
           {
             "name": "second ",
             "type": "STRING",
             "comment": ""
           }
         ]
      },
      "location": "s3://aws-logs-111122223333-us-east-1",
      "inputFormat": "",
      "outputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
      "compressed": "false", 
      "numBuckets": "0",
      "SerDeInfo": {
           "name": "",
           "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
           "parameters": {
               "separatorChar": "|"
            }
      },
      "bucketCols": [],
      "sortCols": [],
      "parameters": {},
      "SkewedInfo": {},
      "storedAsSubDirectories": "false"
    },
    "parameters": {
       "classification": "csv"
    }
}
```

Para obter mais informações sobre as propriedades de uma tabela, como `StorageDescriptor`, consulte [Estrutura StorageDescriptor](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-StorageDescriptor).

Para alterar o esquema de uma tabela, escolha **Edit schema** para adicionar e remover colunas, alterar nomes de colunas e alterar tipos de dados.

 Para comparar diferentes versões de uma tabela, incluindo seu esquema, escolha **Compare versions** para ver uma comparação lado-a-lado de duas versões do esquema para uma tabela. Para obter mais informações, consulte [Comparar versões de esquema de tabelas](#console-tables-schema-comparison). 

Para exibir os arquivos que compõem uma partição do Amazon S3, escolha **View partition** (Visualizar partição). Para tabelas do Amazon S3, a coluna **Key** (Chave) exibe as teclas de partição usadas para particionar a tabela no datastore de origem. Particionar é uma maneira de separar uma tabela em partes relacionadas com base nos valores de uma coluna de chave, como data, local ou departamento. Para obter mais informações sobre partições, pesquise na Internet informações sobre "particionamento do Hive".

**nota**  
Para obter orientação detalhada para visualizar os detalhes de uma tabela, consulte o tutorial **Explore table** no console.

### Comparar versões de esquema de tabelas
<a name="console-tables-schema-comparison"></a>

 Ao comparar duas versões de esquema de tabela, você pode comparar alterações de linhas aninhadas expandindo-as e contraindo-as, comparar esquemas de duas versões lado a lado e visualizar as propriedades da tabela lado a lado. 

 Para comparar versões 

1.  No console do AWS Glue, escolha **Tabelas**, depois **Ações** e **Comparar versões**.   
![\[A captura de tela mostra o botão mostra Ações quando selecionado. O menu suspenso exibe a opção Comparar versões.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/catalog-table-compare-versions.png)

1.  Escolha uma versão para comparar no menu suspenso de versões. Ao comparar esquemas, a guia Esquema fica realçada em laranja. 

1.  Quando você compara tabelas entre duas versões, os esquemas de tabela são apresentados a você no lado esquerdo e no lado direito da tela. Isso permite que você determine visualmente as alterações comparando os campos de nome da coluna, tipo de dados, chave e comentários lado a lado. Quando há uma alteração, um ícone colorido exibe o tipo de alteração que foi feita. 
   +  Excluído: exibido por um ícone vermelho indica onde a coluna foi removida de uma versão anterior do esquema da tabela. 
   +  Editado ou movido: exibido por um ícone azul indica onde a coluna foi modificada ou movida em uma versão mais recente do esquema da tabela. 
   +  Adicionado: exibido por um ícone verde indica onde a coluna foi adicionada a uma versão mais recente do esquema da tabela. 
   +  Alterações aninhadas: exibido por um ícone amarelo indica onde a coluna aninhada contém as alterações. Escolha a coluna a ser expandida e visualize as colunas que foram excluídas, editadas, movidas ou adicionadas.   
![\[A captura de tela mostra a comparação do esquema da tabela entre duas versões. Do lado esquerdo, fica a versão mais antiga. Do lado direito, fica a versão mais recente. O ícone de exclusão fica ao lado de uma coluna que foi removida da versão anterior e não existe mais na versão mais recente.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/catalog-table-version-comparison.png)

1.  Use a barra de pesquisa de campos de filtro para exibir campos com base nos caracteres que você inserir aqui. Se você inserir um nome de coluna em qualquer uma das versões da tabela, os campos filtrados serão exibidos nas duas versões da tabela para mostrar onde as alterações ocorreram. 

1.  Para comparar propriedades, escolha a **guia Propriedades**. 

1.  Para parar de comparar versões, escolha **Interromper comparação** para retornar à lista de tabelas. 

# Criar índices de partição
<a name="partition-indexes"></a>

Ao longo do tempo, centenas de milhares de partições são adicionadas a uma tabela. A [API GetPartitions](https://docs.aws.amazon.com/glue/latest/webapi/API_GetPartitions.html) é usada para buscar as partições na tabela. A API retorna partições que correspondem à expressão fornecida na solicitação.

Vamos usar como exemplo uma tabela *dados\$1vendas* que é particionada pelas chaves *País*, *Categoria*, *Ano*, *Mês* e *creationDate*. Para obter os dados de vendas para todos os itens vendidos da categoria *Livros* no ano de 2020 após *15/8/2020*, será necessário fazer uma solicitação `GetPartitions` com a expressão "Categoria = 'Livros' e creationDate > '2020-08-15'" ao Catálogo de Dados.

Se nenhum índice de partição estiver presente na tabela, o AWS Glue carrega todas as partições da tabela e, em seguida, filtra as partições carregadas usando a expressão de consulta fornecida pelo usuário na solicitação `GetPartitions`. A consulta leva mais tempo para ser executada à medida que o número de partições aumenta em uma tabela sem índices. Com um índice, a consulta `GetPartitions` tentará buscar um subconjunto das partições em vez de carregar todas as partições na tabela.

**Topics**
+ [Sobre índices de partição](#partition-index-1)
+ [Criar uma tabela com índices de partição](#partition-index-creating-table)
+ [Adicionar um índice de partição a uma tabela existente](#partition-index-existing-table)
+ [Descrever índices de partição em uma tabela](#partition-index-describing)
+ [Limitações no uso de índices de partição](#partition-index-limitations)
+ [Usar índices para uma chamada GetPartitions otimizada](#partition-index-getpartitions)
+ [Integração com mecanismos](#partition-index-integration-engines)

## Sobre índices de partição
<a name="partition-index-1"></a>

Ao criar um índice de partição, você especifica uma lista de chaves de partição que já existem em uma tabela específica. O índice de partição é uma sublista de chaves de partição definidas na tabela. Um índice de partição pode ser criado em qualquer permutação de chaves de partição definidas na tabela. Para a tabela *dados\$1vendas* acima os índices possíveis são (país, categoria, creationDate), (país, categoria, ano), (país, categoria), (país), (categoria, país, ano, mês), e assim por diante.

O Data Catalog concatenará os valores de partição na ordem fornecida no momento da criação do índice. O índice é criado consistentemente à medida que as partições são adicionadas à tabela. É possível criar índices para tipos de colunas string (string, char e varchar), numérico (int, bigint, long, tinyint e smallint) e data (aaaa-MM-dd). 

**Tipos de dados compatíveis**
+ Data: uma data no formato ISO, como `YYYY-MM-DD`. Por exemplo, data `2020-08-15`. O formato usa hífens (‐) para separar o ano, o mês e o dia. O intervalo permitido para datas de indexação se estende de `0000-01-01` até `9999-12-31`.
+ String: um literal de string entre aspas simples ou duplas. 
+ Char: dados de caractere de comprimento fixo, com um comprimento especificado entre 1 e 255, por exemplo, char(10).
+ Varchar: dados de caracteres de comprimento variável com um tamanho especificado entre 1 e 65535, como varchar(10).
+ Numérico: int, bigint, long, tinyint e smallint

Índices em dados dos tipos Numérico, String e Data são compatíveis com os operadores =, >, >=, <, <= e “between” (entre). Atualmente, a solução de indexação oferece suporte somente ao operador lógico `AND`. Subexpressões com os operadores “LIKE”, “IN”, “OR” e “NOT” são ignoradas na expressão para filtragem usando um índice. A filtragem da subexpressão ignorada é feita nas partições obtidas após a aplicação da filtragem de índice.

Para cada partição adicionada a uma tabela, há um item de índice correspondente criado. Para uma tabela com “n” partições , um índice de partição resultará em “n” itens de índice de partição. O índice de partição “m” na mesma tabela resultará em “m\$1n” itens de índice de partição. Cada item de índice de partição será cobrado de acordo com a política de preços AWS Glue para armazenamento no catálogo de dados. Para obter detalhes sobre o preço do objeto de armazenamento, consulte [Preço do AWS Glue](https://aws.amazon.com/glue/pricing/).

## Criar uma tabela com índices de partição
<a name="partition-index-creating-table"></a>

Você pode criar um índice de partição durante a criação da tabela. O `CreateTable` solicita uma lista de [objetos `PartitionIndex`](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-PartitionIndex) como uma entrada. Um máximo de três índices de partição pode ser criado em uma determinada tabela. Cada índice de partição requer um nome e uma lista de `partitionKeys` definidos para a tabela. Os índices criados em uma tabela podem ser obtidos usando a [API `GetPartitionIndexes`](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-GetPartitionIndexes)

## Adicionar um índice de partição a uma tabela existente
<a name="partition-index-existing-table"></a>

Para adicionar um índice de partição a uma tabela existente, use a operação `CreatePartitionIndex`. Você só pode criar um `PartitionIndex` por operação `CreatePartitionIndex`. Adicionar um índice não afeta a disponibilidade de uma tabela, pois a tabela continua disponível enquanto os índices estão sendo criados.

O status do índice de uma partição adicionada é definido como CREATING (Criando) e a criação dos dados do índice é iniciada. Se o processo para criar os índices for bem-sucedido, indexStatus (status do índice) é atualizado para ACTIVE (Ativo) e, para um processo malsucedido, o status do índice é atualizado para FAILED (Falhou). A criação do índice pode falhar por vários motivos, e você pode usar a operação `GetPartitionIndexes` para recuperar os detalhes da falha. As possíveis falhas são:
+ ENCRYPTED\$1PARTITION\$1ERROR (Erro de partição criptografada): a criação de índice em uma tabela com partições criptografadas não é suportada.
+ INVALID\$1PARTITION\$1TYPE\$1DATA\$1ERROR (Erro de dados de tipo de partição inválidos): exibido quando o valor da `partitionKey` não é válido para o valor do tipo de dados da `partitionKey` correspondente. Por exemplo, uma `partitionKey` com o tipo de dados “int” tem um valor “foo”.
+ MISSING\$1PARTITION\$1VALUE\$1ERROR (Erro de valor de partição ausente): exibido quando o `partitionValue` para uma `indexedKey` não está presente. Isso pode acontecer quando uma tabela não é particionada de forma consistente.
+ UNSUPPORTED\$1PARTITION\$1CHARACTER\$1ERROR (Erro de caractere de partição não suportado): exibido quando o valor de uma chave de partição indexada contém os caracteres \$1u0000, \$1u0001 ou \$1u0002
+ INTERNAL\$1ERROR (Erro interno): ocorreu um erro interno enquanto os índices eram criados. 

## Descrever índices de partição em uma tabela
<a name="partition-index-describing"></a>

Para buscar os índices de partição criados em uma tabela, use a operação `GetPartitionIndexes`. A resposta retorna todos os índices na tabela, juntamente com o status atual de cada índice (o `IndexStatus`).

O `IndexStatus` para um índice de partição será um dos seguintes:
+ `CREATING`: o índice está sendo criado e ainda não está disponível para uso.
+ `ACTIVE`: o índice está pronto para uso. As solicitações podem usar o índice para executar uma consulta otimizada.
+ `DELETING`: o índice está sendo excluído e não pode mais ser usado. Um índice no estado ativo pode ser excluído usando a solicitação `DeletePartitionIndex`, que move o status de ACTIVE (Ativo) para DELETING (Excluindo).
+ `FAILED`: falha na criação do índice em uma tabela existente. Cada tabela armazena os últimos dez índices com falha.

As possíveis transições de estado para índices criados em uma tabela existente são:
+ CREATING → ACTIVE → DELETING
+ CREATING → FAILED

## Limitações no uso de índices de partição
<a name="partition-index-limitations"></a>

Depois de criar um índice de partição, observe estas alterações na funcionalidade da tabela e da partição:

**Criação de uma nova partição (após a adição do índice)**  
Depois que um índice de partição é criado em uma tabela, todas as novas partições adicionadas à tabela serão validadas para as verificações de tipo de dados para chaves indexadas. O valor da partição das chaves indexadas será validado para o formato do tipo de dados. Se a verificação do tipo de dados falhar, a operação de criação de partição falhará. Para a tabela *dados\$1de\$1venda*, se um índice for criado para chaves (categoria, ano) em que a categoria é do tipo `string` e ano do tipo `int`, a criação da nova partição com um valor de ANO como “foo” falhará.

Depois que os índices estiverem habilitados, a adição de partições com valores de chave indexados com os caracteres U\$10000, U\$100001 e U\$10002 passará a falhar.

**Atualizações de tabelas**  
Depois que um índice de partição é criado em uma tabela, você não pode modificar os nomes de chave de partição para chaves de partição existentes e não pode alterar o tipo, ou ordem, das chaves registradas com o índice.

## Usar índices para uma chamada GetPartitions otimizada
<a name="partition-index-getpartitions"></a>

Quando você chama `GetPartitions` em uma tabela com um índice, pode incluir uma expressão e, se aplicável, o Data Catalog usará um índice, se possível. A primeira chave do índice deve ser inserida na expressão para os índices a serem usados na filtragem. A otimização de índice na filtragem é aplicada como um melhor esforço. O Data Catalog tenta usar a otimização de índice tanto quanto possível, mas no caso de um índice ausente, ou operador não suportado, ele volta para a implantação existente de carregamento de todas as partições. 

Para a tabela *dados\$1de\$1venda* anterior, vamos adicionar o índice [País, Categoria, Ano]. Se “País” não for inserido na expressão, o índice registrado não poderá filtrar partições usando índices. Você pode adicionar até três índices para suportar vários padrões de consulta.

Vamos pegar algumas expressões de exemplo e ver como os índices funcionam nelas:


| Expressões | Como o índice será usado | 
| --- | --- | 
|  País = 'EUA'  |  O índice será usado para filtrar partições.  | 
|  País = 'EUA' and Categoria = 'Sapatos'  |  O índice será usado para filtrar partições.  | 
|  Categoria = 'Sapatos'  |  Os índices não serão usados, pois “país” não foi fornecido na expressão. Todas as partições serão carregadas para retornar uma resposta.  | 
|  País = 'EUA' and Categoria = 'Sapatos' and Ano > '2018'  |  O índice será usado para filtrar partições.  | 
|  País = 'EUA' and Categoria = 'Sapatos' and Ano > '2018' and mês = 2  |  O índice será usado para buscar todas as partições com país = “EUA” e categoria = “sapatos” e ano > 2018. Em seguida, a filtragem com a expressão mês será realizada.  | 
|  País = 'EUA' AND Categoria = 'Sapatos' OR Ano > '2018'  |  Os índices não serão usados, pois há um operador `OR` na expressão.  | 
|  País = 'EUA' AND Categoria = 'Sapatos' AND (Ano = '2017' OR Ano = '2018')  |  O índice será usado para buscar todas as partições com país = “US” e categoria = “sapatos” e, em seguida, a filtragem com a expressão ano será realizada.  | 
|  País in ('EUA', 'Reino Unido') AND Categoria = 'Sapatos'  |  Os índices não serão usados para filtrar, pois o operador `IN` não é suportado no momento.  | 
|  País = 'EUA' AND Categoria in ('Sapatos', 'Livros')  |  O índice será usado para buscar todas as partições com país = “EUA”. A filtragem com a expressão Categoria será realizada em seguida.  | 
|  País = 'EUA' AND Categoria in ('Sapatos', 'Livros') AND (creationDate > '2023-9-01')  |  O índice será usado para buscar todas as partições com país = "EUA" e creationDate > "2023-9-01". A filtragem com a expressão Categoria será realizada em seguida.  | 

## Integração com mecanismos
<a name="partition-index-integration-engines"></a>

Redshift Spectrum, Amazon EMR e AWS Glue ETL Spark DataFrames são capazes de utilizar índices para buscar partições depois que os índices estiverem em um estado ACTIVE (Ativo) no AWS Glue. [Athena](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#glue-best-practices-partition-index) e [AWS Glue ETL Dynamic frames](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-cat-predicates) exigem que você siga etapas adicionais a fim de utilizar índices para melhorar consultas.

### Habilitar filtragem de partições
<a name="enable-partition-filtering-athena"></a>

Para ativar a filtragem de partições no Athena, é necessário atualizar as propriedades da tabela da seguinte forma:

1. No console do AWS Glue, escolha **Tabelas** em **Catálogo de Dados**.

1. Escolha uma tabela.

1. Em **Ações**, escolha **Editar tabela**.

1. Em **Propriedades da tabela**, adicione o seguinte:
   + Chave: `partition_filtering.enabled`
   + Valor: `true`

1. Escolha **Aplicar**.

Como alternativa, é possível definir esse parâmetro executando uma consulta [ALTER TABLE SET PROPERTIES](https://docs.aws.amazon.com/athena/latest/ug/alter-table-set-tblproperties.html) no Athena.

```
ALTER TABLE partition_index.table_with_index
SET TBLPROPERTIES ('partition_filtering.enabled' = 'true')
```

## Atualizar tabelas do Data Catalog criadas manualmente usando crawlers
<a name="update-manual-tables"></a>

Você pode querer criar tabelas do AWS Glue Data Catalog manualmente e mantê-las atualizadas com crawlers do AWS Glue. Os crawlers em execução em uma programação podem adicionar novas partições e atualizar as tabelas com qualquer alteração de esquema. Isso também se aplica a tabelas migradas de um metastore do Apache Hive.

Para fazer isso, ao definir um crawler, em vez de especificar um ou mais armazenamentos de dados como a fonte de um crawl, você especifica uma ou mais tabelas do Data Catalog existentes. Em seguida, o crawler rastreia os armazenamentos de dados especificados pelas tabelas de catálogo. Nesse caso, nenhuma tabela nova é criada; em vez disso, suas tabelas criadas manualmente são atualizadas.

Veja a seguir os outros motivos pelos quais você pode querer criar manualmente tabelas de catálogo e especificar tabelas de catálogo como a origem do crawler:
+ Você deseja escolher o nome da tabela de catálogo e não depender do algoritmo de nomenclatura da tabela de catálogo.
+ Você deseja impedir que novas tabelas sejam criadas caso arquivos com um formato que possa interromper a detecção de partição sejam salvos por engano no caminho da fonte de dados.

Para obter mais informações, consulte [Etapa 2: escolher as fontes de dados e os classificadores](define-crawler-choose-data-sources.md).

## Propriedades da tabela do Data Catalog
<a name="table-properties"></a>

 As propriedades ou parâmetros da tabela, como são conhecidos na AWS CLI, são strings de chave e valor não validadas. Você pode definir suas próprias propriedades na tabela para permitir o uso do Data Catalog fora do AWS Glue. Outros serviços que usam o Data Catalog também podem fazer isso. AWS Glue define algumas propriedades da tabela ao executar trabalhos ou rastreadores. Salvo indicação em contrário, essas propriedades são para uso interno. Não podemos garantir que elas continuarão existindo em sua forma atual nem que o produto se comportará conforme esperado se essas propriedades forem alteradas manualmente. 

 Para obter mais informações sobre as propriedades da tabela definidas pelos crawlers do AWS Glue, consulte [Parâmetros definidos nas tabelas do Data Catalog pelo crawler](table-properties-crawler.md). 

# Integrar com as Tabelas do Amazon S3
<a name="glue-federation-s3tables"></a>

A integração do Catálogo de Dados do AWS Glue com as Tabelas do Amazon S3 permite descobrir, consultar e juntar tabelas do S3 com dados nos data lakes do Amazon S3 usando um único catálogo. Quando você integra as Tabelas do S3 ao Catálogo de Dados, o serviço cria uma estrutura de catálogo federado que mapeia os recursos das Tabelas do S3 em objetos do catálogo do AWS Glue:
+ Um bucket de tabela do S3 se torna um catálogo no Catálogo de Dados
+ Um namespace do S3 se torna um banco de dados do AWS Glue
+ Uma tabela do S3 se torna uma tabela do AWS Glue

## Controles de acesso
<a name="s3-tables-access-controls"></a>

O Catálogo de Dados oferece suporte a dois modos de controle de acesso para integração com as Tabelas do S3:
+ **Controle de acesso do IAM**: usa políticas do IAM para controlar o acesso às Tabelas do S3 e ao Catálogo de Dados. Nessa abordagem, você precisa de permissões do IAM nos recursos das Tabelas do S3 e nos objetos do Catálogo de Dados para acessar os recursos.
+ **Controle de acesso do AWS Lake Formation**: usa concessões do AWS Lake Formation, além de permissões do IAM do AWS Glue, para controlar o acesso às Tabelas do S3 por meio do Catálogo de Dados. Nesse modo, as entidades principais exigem permissões do IAM para interagir com o Catálogo de Dados, e as concessões do AWS Lake Formation determinam quais recursos do catálogo (bancos de dados, tabelas, colunas, linhas) a entidade principal pode acessar. Esse modo oferece suporte a controle de acesso de baixa granularidade (concessões em nível de banco de dados e em nível de tabela) e controle de acesso refinado (segurança em nível de coluna e nível de linha). Quando um perfil registrado é configurado e a venda de credenciais está habilitada, as permissões do IAM das Tabelas do S3 não são necessárias para a entidade principal, pois o AWS Lake Formation vende credenciais em nome da entidade principal usando o perfil registrado. O controle de acesso do AWS Lake Formation também oferece suporte à venda de credenciais para mecanismos de análise de terceiros. Para obter mais informações, consulte [Criar um catálogo de Tabelas do S3](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html) no *Guia do desenvolvedor do AWS Lake Formation*.

É possível migrar entre os modos de controle de acesso à medida que seus requisitos evoluem.

## Hierarquia de catálogos para montagem automática
<a name="s3-tables-catalog-hierarchy"></a>

Quando você integra as Tabelas do S3 com o Catálogo de Dados usando o console de gerenciamento do Amazon S3, o console cria um catálogo federado chamado `s3tablescatalog` no Catálogo de Dados da sua conta nessa região da AWS. Esse catálogo federado atua como catálogo principal para todos os buckets de tabelas do S3 existentes e futuros nessa conta e região. A integração mapeia recursos de bucket da tabela do Amazon S3 na seguinte hierarquia:
+ **Catálogo federado**: `s3tablescatalog` (criado automaticamente)
+ **Catálogos secundários**: cada bucket de tabela do S3 se torna um catálogo secundário em `s3tablescatalog`
+ **Bancos de dados**: cada namespace do S3 em um bucket de tabela se torna um banco de dados
+ **Tabelas**: cada tabela do S3 em um namespace se torna uma tabela

Por exemplo, se você tiver um bucket de tabela do S3 chamado "analytics-bucket" com um namespace "sales" contendo uma tabela "transactions", o caminho completo no catálogo de dados seria: `s3tablescatalog/analytics-bucket/sales/transactions`

Essa hierarquia de quatro partes se aplica aos cenários da mesma conta em que as Tabelas do S3 e o catálogo de dados estão na mesma conta da AWS. Para cenários com várias contas, você monta manualmente buckets de tabelas do S3 individuais no Catálogo de Dados, o que cria uma hierarquia de três partes.

## Regiões com suporte
<a name="s3-tables-supported-regions"></a>

A integração das Tabelas do S3 com o Catálogo de Dados está disponível nas seguintes regiões da AWS:


| Código da região | Nome da região | 
| --- | --- | 
| us-east-1 | Leste dos EUA (Norte da Virgínia) | 
| us-east-2 | Leste dos EUA (Ohio) | 
| us-west-1 | Oeste dos EUA (N. da Califórnia) | 
| us-west-2 | Oeste dos EUA (Oregon) | 
| af-south-1 | África (Cidade do Cabo) | 
| ap-east-1 | Ásia-Pacífico (Hong Kong) | 
| ap-east-2 | Ásia-Pacífico (Taipei) | 
| ap-northeast-1 | Ásia-Pacífico (Tóquio) | 
| ap-northeast-2 | Ásia-Pacífico (Seul) | 
| ap-northeast-3 | Ásia-Pacífico (Osaka) | 
| ap-south-1 | Ásia-Pacífico (Mumbai) | 
| ap-south-2 | Ásia-Pacífico (Hyderabad) | 
| ap-southeast-1 | Ásia-Pacífico (Singapura) | 
| ap-southeast-2 | Ásia-Pacífico (Sydney) | 
| ap-southeast-3 | Ásia-Pacífico (Jacarta) | 
| ap-southeast-4 | Ásia-Pacífico (Melbourne) | 
| ap-southeast-5 | Ásia-Pacífico (Malásia) | 
| ap-southeast-6 | Ásia-Pacífico (Nova Zelândia) | 
| ap-southeast-7 | Ásia-Pacífico (Tailândia) | 
| ca-central-1 | Canadá (Central) | 
| ca-west-1 | Oeste do Canadá (Calgary) | 
| eu-central-1 | Europa (Frankfurt) | 
| eu-central-2 | Europa (Zurique) | 
| eu-north-1 | Europa (Estocolmo) | 
| eu-south-1 | Europa (Milão) | 
| eu-south-2 | Europa (Espanha) | 
| eu-west-1 | Europa (Irlanda) | 
| eu-west-2 | Europa (Londres) | 
| eu-west-3 | Europa (Paris) | 
| il-central-1 | Israel (Tel Aviv) | 
| mx-central-1 | México (Centro) | 
| sa-east-1 | América do Sul (São Paulo) | 

**Topics**
+ [Controles de acesso](#s3-tables-access-controls)
+ [Hierarquia de catálogos para montagem automática](#s3-tables-catalog-hierarchy)
+ [Regiões com suporte](#s3-tables-supported-regions)
+ [Pré-requisitos](s3tables-catalog-prerequisites.md)
+ [Habilitar a integração das Tabelas do S3 com o catálogo de dados](enable-s3-tables-catalog-integration.md)
+ [Adicionar bancos de dados e tabelas ao catálogo das Tabelas do S3](create-databases-tables-s3-catalog.md)
+ [Compartilhar objetos do catálogo das Tabelas do S3](share-s3-tables-catalog.md)
+ [Gerenciar a integração das Tabelas do S3](manage-s3-tables-catalog-integration.md)

# Pré-requisitos
<a name="s3tables-catalog-prerequisites"></a>

Antes de criar um catálogo federado para Tabelas do S3 no Catálogo de Dados do AWS Glue, certifique-se de que sua entidade principal do IAM (usuário ou função) tenha as permissões necessárias.

## Permissões obrigatórias do IAM
<a name="s3tables-required-iam-permissions"></a>

A entidade principal do IAM precisa das seguintes permissões para habilitar a integração das tabelas do S3:

**Permissões do AWS Glue**:
+ `glue:CreateCatalog`: necessário para criar o catálogo federado `s3tablescatalog`
+ `glue:GetCatalog`: necessário para visualizar detalhes do catálogo
+ `glue:GetDatabase`: necessário para visualizar namespaces do S3 como bancos de dados
+ `glue:GetTable`: necessário para visualizar tabelas do S3
+ `glue:passConnection`: concede à entidade principal responsável pela chamada o direito de delegar a conexão `aws:s3tables` ao serviço AWS Glue

**Permissões de tabelas do S3** (para controle de acesso do IAM):
+ `s3tables:CreateTableBucket`
+ `s3tables:GetTableBucket`
+ `s3tables:CreateNamespace`
+ `s3tables:GetNamespace`
+ `s3tables:ListNamespaces`
+ `s3tables:CreateTable`
+ `s3tables:GetTable`
+ `s3tables:ListTables`
+ `s3tables:UpdateTableMetadataLocation`
+ `s3tables:GetTableMetadataLocation`
+ `s3tables:GetTableData`
+ `s3tables:PutTableData`

## Exemplo de política do IAM
<a name="s3tables-iam-policy-example"></a>

A política do IAM a seguir fornece as permissões mínimas necessárias para permitir a integração das Tabelas do S3 com o catálogo de dados no modo IAM:

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GlueDataCatalogPermissions",
      "Effect": "Allow",
      "Action": [
        "glue:CreateCatalog",
        "glue:GetCatalog",
        "glue:GetDatabase",
        "glue:GetTable"
      ],
      "Resource": [
        "arn:aws:glue:region:account-id:catalog/s3tablescatalog",
        "arn:aws:glue:region:account-id:database/s3tablescatalog/*/*",
        "arn:aws:glue:region:account-id:table/s3tablescatalog/*/*/*"
      ]
    },
    {
      "Sid": "S3TablesDataAccessPermissions",
      "Effect": "Allow",
      "Action": [
        "s3tables:GetTableBucket",
        "s3tables:GetNamespace",
        "s3tables:GetTable",
        "s3tables:GetTableMetadataLocation",
        "s3tables:GetTableData"
      ],
      "Resource": [
        "arn:aws:s3tables:region:account-id:bucket/*",
        "arn:aws:s3tables:region:account-id:bucket/*/table/*"
      ]
    }
  ]
}
```

# Habilitar a integração das Tabelas do S3 com o catálogo de dados
<a name="enable-s3-tables-catalog-integration"></a>

É possível habilitar a integração das Tabelas do Amazon S3 com o Catálogo de Dados do AWS Glue usando o console de gerenciamento ou a AWS CLI do Amazon S3. Quando você habilita a integração usando o console, a AWS cria um catálogo federado chamado `s3tablescatalog` que descobre e monta automaticamente todos os buckets de tabela do S3 em sua conta e região da AWS.

## Habilitar a integração das Tabelas do Amazon S3 com o console de gerenciamento do Amazon S3
<a name="enable-s3-tables-console"></a>

1. Abra o console do Amazon S3, em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. No painel de navegação à esquerda, escolha **Buckets de tabela**.

1. Escolha **Criar bucket de tabela**.

1. Insira um **Nome do bucket de tabela** e marque a caixa de seleção **Habilitar integração**.

1. Escolha **Criar bucket de tabela**.

O Amazon S3 integrará automaticamente os buckets de tabela nessa região. Na primeira vez que você integra buckets de tabela em qualquer região, o Amazon S3 cria `s3tablescatalog` no catálogo de dados na região.

Depois que o catálogo é criado, todos os buckets de tabela do S3 em sua conta e região são montados automaticamente como catálogos secundários. É possível visualizar os bancos de dados (namespaces) e as tabelas navegando até o catálogo no Catálogo de Dados.

## Habilitar a integração das Tabelas do S3 com a AWS CLI
<a name="enable-s3-tables-cli"></a>

Use o comando `glue create-catalog` para criar o catálogo `s3tablescatalog`.

```
aws glue create-catalog \
  --name "s3tablescatalog" \
  --catalog-input '{
    "Description": "Federated catalog for S3 Tables",
    "FederatedCatalog": {
      "Identifier": "arn:aws:s3tables:region:account-id:bucket/*",
      "ConnectionName": "aws:s3tables"
    },
    "CreateDatabaseDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }],
    "CreateTableDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }]
  }'
```

Substitua *region* por sua região da AWS e *account-id* pelo ID da sua conta da AWS.

## Verificar a integração
<a name="verify-s3-tables-integration"></a>

Depois de criar o catálogo, você pode verificar se os buckets de tabela do S3 estão montados listando os catálogos secundários:

```
aws glue get-catalogs \
  --parent-catalog-id s3tablescatalog
```

# Adicionar bancos de dados e tabelas ao catálogo das Tabelas do S3
<a name="create-databases-tables-s3-catalog"></a>

Certifique-se de ter as permissões necessárias para listar e criar catálogos, bancos de dados e tabelas no catálogo de dados na sua região. Certifique-se de que a integração das Tabelas do S3 esteja habilitada em sua conta e região da AWS.

## Adicionar um banco de dados ao catálogo de Tabelas do S3
<a name="add-database-s3-tables-catalog"></a>

### Adicionar um banco de dados (Console)
<a name="add-database-s3-tables-console"></a>

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

1. No painel de navegação à esquerda, selecione **Bancos de dados**.

1. Selecione **Adicionar banco de dados**.

1. Escolha **Glue Database no Catálogo federado de Tabelas do S3**.

1. Insira um nome exclusivo para o banco de dados.

1. Selecione o catálogo de destino que mapeia em um bucket de tabelas nas Tabelas do S3.

1. Escolha **Create Database (Criar banco de dados)**.

### Adicionar um banco de dados (AWS CLI)
<a name="add-database-s3-tables-cli"></a>

```
aws glue create-database \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-input '{"Name": "my-database"}'
```

## Adicionar uma tabela ao catálogo de Tabelas do S3
<a name="add-table-s3-tables-catalog"></a>

### Adicionar uma tag (console)
<a name="add-table-s3-tables-console"></a>

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

1. No painel de navegação à esquerda, selecione **Tables (Tabelas)**.

1. Selecione o catálogo de Tabelas do S3 no menu suspenso do catálogo.

1. Escolha **Adicionar tabela**.

1. Insira um nome exclusivo para a tabela.

1. Confirme se o catálogo correto de Tabelas do S3 está selecionado na lista suspensa do catálogo.

1. Selecione o banco de dados na lista suspensa do banco de dados.

1. Insira o esquema da tabela inserindo um JSON ou adicionando cada coluna individualmente.

1. Escolha **Criar tabela**.

### Adicionar uma tabela (AWS CLI)
<a name="add-table-s3-tables-cli"></a>

```
aws glue create-table \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-name "my-database" \
  --table-input '{
    "Name": "my-table",
    "Parameters": {
      "classification": "",
      "format": "ICEBERG"
    },
    "StorageDescriptor": {
      "Columns": [
        {"Name": "id", "Type": "int", "Parameters": {}},
        {"Name": "val", "Type": "string", "Parameters": {}}
      ]
    }
  }'
```

# Compartilhar objetos do catálogo das Tabelas do S3
<a name="share-s3-tables-catalog"></a>

Ao usar o controle de acesso do IAM, você pode compartilhar objetos do catálogo das Tabelas do S3 com outros usuários usando links de recursos do AWS Glue para compartilhar a mesma conta. Para o compartilhamento entre contas, você pode compartilhar buckets de tabela do S3 com outra conta da AWS e o perfil do IAM ou o usuário na conta do destinatário pode criar um objeto de catálogo do AWS Glue usando o bucket de tabela compartilhado.

## Compartilhar na mesma conta usando links de recursos
<a name="share-s3-tables-resource-links"></a>

Os links de recursos permitem que você crie referências a bancos de dados do AWS Glue e tabelas no `s3tablescatalog` que aparecem em seu catálogo padrão do AWS Glue. Isso é útil para organizar o acesso aos dados ou criar agrupamentos lógicos de tabelas.

### Criar um link de recurso (console)
<a name="share-s3-tables-resource-link-console"></a>

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, escolha **Catálogos**.

1. Na lista **Catálogo**, selecione **s3tablescatalog**.

1. Selecione a tabela que você deseja compartilhar no `s3tablescatalog`.

1. Escolha **Ações** e, em seguida, escolha **Criar link de recurso**.

1. Em **Nome do link de recurso**, insira um nome para o link de recurso.

1. Em **Banco de dados de destino**, selecione o banco de dados em que você deseja criar o link de recurso.

1. (Opcional) Em **Description (Descrição)**, insira uma descrição.

1. Escolha **Criar**.

O link de recurso aparece no banco de dados de destino e aponta para a tabela original em `s3tablescatalog`.

### Criar links de recursos (AWS CLI)
<a name="share-s3-tables-resource-link-cli"></a>

Crie um link de recurso de banco de dados:

```
aws glue create-database \
  --database-name "my-database-resource-link" \
  --database-input '{
    "Name": "sales_data_link",
    "TargetDatabase": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales"
    }
  }'
```

Crie um link de recurso de tabela:

```
aws glue create-table \
  --table-name "my-table-resource-link" \
  --table-input '{
    "Name": "sales_data_link",
    "TargetTable": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales",
      "Name": "transactions"
    }
  }'
```

# Gerenciar a integração das Tabelas do S3
<a name="manage-s3-tables-catalog-integration"></a>

## Habilitar AWS Lake Formation
<a name="manage-s3-tables-enable-lf"></a>

Você poderá habilitar AWS Lake Formation para seu catálogo de Tabelas do S3 quando quiser escalar seus requisitos de governança de dados. O AWS Lake Formation fornece concessões no estilo de banco de dados para gerenciar o acesso refinado, escalar permissões usando o acesso baseado em tags e conceder permissões com base nos atributos do usuário, como associações de grupos às suas tabelas nas Tabelas do S3.

Acesse o console de gerenciamento do AWS Lake Formation para habilitar AWS Lake Formation para seu catálogo de Tabelas do S3 no AWS Glue. Para obter mais informações, consulte [Criar um catálogo de Tabelas do S3](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html) no *Guia do desenvolvedor do AWS Lake Formation*.

## Excluir integração das Tabelas do S3
<a name="manage-s3-tables-delete-integration"></a>

É possível excluir a integração das Tabelas do S3 removendo a integração do catálogo no Catálogo de Dados. Essa operação exclui somente os metadados no Catálogo de Dados, e não os recursos nas Tabelas do S3.

Certifique-se de ter as permissões necessárias para listar, editar e excluir objetos do catálogo no AWS Glue.

### Excluir integração (console)
<a name="delete-s3-tables-console"></a>

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

1. No painel de navegação, escolha **Catálogos**.

1. Na lista **Catálogo**, selecione **s3tablescatalog**.

1. Selecione a opção **Excluir**.

1. Confirme se a exclusão do catálogo também exclui todos os objetos de catálogo associados no Catálogo de Dados.

1. Escolha **Excluir**.

### Excluir integração (AWS CLI)
<a name="delete-s3-tables-cli"></a>

```
aws glue delete-catalog \
  --region region \
  --catalog-id "s3tablescatalog"
```

# Integração a outros serviços da AWS
<a name="populate-dc-other-services"></a>

 Embora você possa usar Crawler do AWS Glues para preencher o AWS Glue Data Catalog, há vários serviços da AWS que podem se integrar e preencher automaticamente o catálogo para você. As seções a seguir fornecem mais informações sobre os casos de uso específicos aceitos por serviços da AWS que podem preencher o Catálogo de dados. 

**Topics**
+ [AWS Lake Formation](#lf-dc)
+ [Amazon Athena](#ate-dc)

## AWS Lake Formation
<a name="lf-dc"></a>

 O AWS Lake Formation é um serviço que facilita configurar um data lake seguro na AWS. O Lake Formation é construído sobre a plataforma AWS Glue, e tanto ele quanto o AWS Glue compartilham o mesmo AWS Glue Data Catalog. Você pode registrar sua localização de dados do Amazon S3 com o Lake Formation e usar o console do Lake Formation para criar bancos de dados e tabelas no Catálogo de Dados do AWS Glue, definir políticas de acesso aos dados e auditar o acesso aos dados em seu data lake desde um local central. Você pode usar o controle de acesso refinado do Lake Formation para gerenciar seus recursos existentes do catálogo de dados e os locais de dados do Amazon S3. 

Com os dados registrados no Lake Formation, você pode compartilhar com segurança os recursos do Catálogo de Dados entre as entidades principais do IAM, contas da AWS, organizações da AWS e unidades organizacionais.

 Para obter mais informações sobre a criação de recursos do Catálogo de Dados usando o Lake Formation, consulte [Criar tabelas e bancos de dados do Catálogo de Dados](https://docs.aws.amazon.com/lake-formation/latest/dg/populating-catalog.html) no Guia do desenvolvedor do AWS Lake Formation. 

## Amazon Athena
<a name="ate-dc"></a>

 O Amazon Athena usa o Catálogo de Dados para armazenar e recuperar metadados de tabela para os dados do Amazon S3 em sua conta da AWS. Os metadados da tabela permitem que o mecanismo de consulta do Athena saiba como localizar, ler e processar os dados que você deseja consultar.

 Você pode preencher o AWS Glue Data Catalog usando diretamente as instruções `CREATE TABLE` do Athena. É possível definir e preencher manualmente os metadados do esquema e de partição no Catálogo de Dados sem precisar executar um crawler. 

1. No console do Athena, crie um banco de dados que armazenará os metadados da tabela no Catálogo de Dados.

1. Use a instrução `CREATE EXTERNAL TABLE` para definir o esquema da sua fonte de dados.

1. Use a cláusula `PARTITIONED BY` para definir quaisquer chaves de partição se seus dados estiverem particionados.

1. Use a cláusula `LOCATION` para especificar o caminho do Amazon S3 em que seus arquivos de dados reais são armazenados. 

1. Execute a instrução `CREATE TABLE`.

    Essa consulta cria os metadados da tabela no Catálogo de Dados com base no esquema e nas partições definidos, sem realmente fazer o crawling dos dados. 

Você pode consultar a tabela no Athena e ela usará os metadados do Catálogo de Dados para acessar e consultar seus arquivos de dados no Amazon S3. 

 Para obter mais informações, consulte [Criar bancos de dados e tabelas](https://docs.aws.amazon.com/athena/latest/ug/work-with-data.html) no Guia do usuário do Amazon Athena. 

# Configurações do Catálogo de Dados
<a name="console-data-catalog-settings"></a>

 A página de configurações do Data Catalog contém opções para definir opções de criptografia e permissões do Catálogo de Dados em sua conta. 

![\[A captura de tela mostra o modal de configurações do Data Catalog.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/data_catalog_settings.png)


**Para alterar o controle de acesso granular do Data Catalog**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1.  Escolha uma opção de criptografia. 
   +  **Criptografia de metadados**: marque essa caixa de seleção para criptografar os metadados no Data Catalog. Os metadados são criptografados em repouso usando a chave AWS Key Management Service (AWS KMS) que você especifica. Para obter mais informações, consulte [Como criptografar seu Data Catalog](encrypt-glue-data-catalog.md). 
   +  **Criptografar senhas de conexão**: marque essa caixa de seleção para criptografar senhas no objeto de conexão do AWS Glue quando a conexão for criada ou atualizada. As senhas são criptografadas usando a AWS KMS chave que você especificar. Quando as senhas forem retornadas, elas são criptografadas. Esta opção é uma configuração global para todas as conexões do AWS Glue no Data Catalog. Se você desmarcar esta caixa de seleção, as senhas criptografadas anteriormente permanecerão criptografadas usando a chave que foi usada quando foram criadas ou atualizadas. Para obter mais informações sobre conexões do AWS Glue, consulte [Conectar a dados](glue-connections.md). 

     Ao habilitar essa opção, escolha uma AWS KMS chave ou escolha **Insira uma chave ARN** e forneça o nome de recurso da Amazon (ARN) para a chave. Insira o ARN no formato ` arn:aws:kms:region:account-id:key/key-id `. Você também pode fornecer o ARN como um alias da chave, como ` arn:aws:kms:region:account-id:alias/alias-name `. 
**Importante**  
 Se esta opção estiver selecionada, qualquer usuário ou função que crie ou atualize uma conexão deve ter `kms:Encrypt` permissão na chave KMS especificada. 

     Para obter mais informações, consulte [Criptografar senhas de conexão](encrypt-connection-passwords.md).

1.  Escolha **Settings** (Configurações) e, em seguida, no editor **Permissions** (Permissões), adicione a declaração de política para alterar o controle de acesso granular do Data Catalog de sua conta. Apenas uma política pode ser anexada a um Data Catalog de cada vez. Você pode colar uma política de recurso JSON nesse controle. Para obter mais informações, consulte [Políticas baseadas em recursos no AWS Glue](security_iam_service-with-iam.md#security_iam_service-with-iam-resource-based-policies). 

1.  Escolha **Save** (Salvar) para atualizar o Data Catalog com as alterações feitas. 

 Você também pode usar AWS Glue operações da API para colocar, obter e excluir políticas de recursos.. Para obter mais informações, consulte [APIs de segurança no AWS Glue](aws-glue-api-jobs-security.md). 

# Preencher e gerenciar tabelas transacionais
<a name="populate-otf"></a>

O [Apache Iceberg](https://iceberg.apache.org/), o [Apache Hudi](https://hudi.incubator.apache.org/) e o Linux Foundation [Delta Lake](https://delta.io/) são formatos de tabela de código aberto projetados para lidar com data analytics em grande escala e workloads de data lake no Apache Spark. 

Você pode preencher as tabelas do Iceberg, Hudi e Delta Lake no AWS Glue Data Catalog usando os seguintes métodos: 
+ Crawler do AWS Glue: os Crawler do AWS Glues podem descobrir e preencher automaticamente os metadados das tabelas do Iceberg, Hudi e Delta Lake no Catálogo de Dados. Para obter mais informações, consulte [Usar crawlers para preencher o catálogo de dados](add-crawler.md).
+ Trabalhos do AWS Glue ETL: é possível criar trabalhos de ETL para gravar dados nas tabelas do Iceberg, Hudi e Delta Lake e preencher seus metadados no Catálogo de Dados. Para obter mais informações, consulte [Usar estruturas de data lake com trabalhos do AWS Glue ETL](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-datalake-native-frameworks.html).
+ Console do AWS Glue, console do AWS Lake Formation, AWS CLI ou API: você pode usar o console do AWS Glue, o console do Lake Formation ou a API da para criar e gerenciar definições de tabelas do Iceberg no Catálogo de Dados.

**Topics**
+ [Criar tabelas no Apache Iceberg](#creating-iceberg-tables)
+ [Otimizar tabelas Iceberg](table-optimizers.md)
+ [Otimizar a performance da consulta para tabelas Iceberg](iceberg-column-statistics.md)

## Criar tabelas no Apache Iceberg
<a name="creating-iceberg-tables"></a>

Agora você pode criar tabelas do Apache Iceberg que usam o formato de dados do Apache Parquet no AWS Glue Data Catalog com dados residentes no Amazon S3. Uma tabela no catálogo de dados é a definição de metadados que representa os dados em um armazenamento de dados. Por padrão, o AWS Glue cria tabelas do Iceberg v2. Para saber a diferença entre as tabelas da v1 e v2, consulte [Alterações de versão do formato](https://iceberg.apache.org/spec/#appendix-e-format-version-changes) na documentação do Apache Iceberg.

 [Apache Iceberg](https://iceberg.apache.org/) é um formato de tabela aberta para conjuntos de dados analíticos muito grandes. O Iceberg permite mudanças fáceis em seu esquema, também conhecido como evolução do esquema, o que significa que os usuários podem adicionar, renomear ou remover colunas de uma tabela de dados sem interromper os dados subjacentes. O Iceberg também fornece suporte para controle de versão de dados, o que permite que os usuários acompanhem as alterações nos dados ao longo do tempo. Isso ativa o atributo de viagem no tempo, que permite que os usuários acessem e consultem versões históricas dos dados e analisem as alterações nos dados entre atualizações e exclusões.

Você pode usar o AWS Glue, o console do Lake Formation ou a operação `CreateTable` na API do AWS Glue para criar uma tabela do Iceberg no Catálogo de Dados. Para obter mais informações, consulte a ação [CreateTable (Python: create\$1table)](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-CreateTable).

Ao criar uma tabela do Iceberg no catálogo de dados, você deve especificar o formato da tabela e o caminho do arquivo de metadados no Amazon S3 para poder realizar leituras e gravações.

 Você pode usar o Lake Formation para proteger sua tabela do Iceberg usando permissões de controle de acesso refinadas ao registrar a localização de dados do Amazon S3 com o AWS Lake Formation. Para dados de origem no Amazon S3 e metadados que não estão registrados no Lake Formation, o acesso é determinado pelas políticas de permissões do IAM para ações do Amazon S3 e do AWS Glue. Para obter mais informações, consulte [Gerenciar permissões](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-permissions.html). 

**nota**  
O catálogo de dados não oferece suporte à criação de partições e à adição de propriedades da tabela do Iceberg.

### Pré-requisitos
<a name="iceberg-prerequisites"></a>

 Para criar tabelas Iceberg no catálogo de dados e configurar as permissões de acesso aos dados do Lake Formation, você precisa preencher os seguintes requisitos: 

1. 

**Permissões necessárias para criar tabelas do Iceberg sem os dados registrados no Lake Formation.**

   Além das permissões necessárias para criar uma tabela no catálogo de dados, o criador da tabela precisa as seguintes permissões:
   + `s3:PutObject` no recurso arn:aws:s3:::\$1bucketName\$1
   + `s3:GetObject` no recurso arn:aws:s3:::\$1bucketName\$1
   + `s3:DeleteObject` no recurso arn:aws:s3:::\$1bucketName\$1

1. 

**Permissões necessárias para criar tabelas do Iceberg com dados registrados no Lake Formation:**

   Para usar o Lake Formation para gerenciar e proteger os dados em seu data lake, registre sua localização no Amazon S3 que tenha os dados para tabelas com o Lake Formation. Isso é para que a Lake Formation possa fornecer credenciais para serviços analíticos AWS como Athena, Redshift Spectrum e Amazon EMR para acessar dados. Para obter mais informações sobre o registro de um local do Amazon S3, consulte [Adicionar um local do Amazon S3 ao seu data lake](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html). 

   Uma entidade principal que lê e grava os dados subjacentes registrados no Lake Formation exige as seguintes permissões:
   + `lakeformation:GetDataAccess`
   + `DATA_LOCATION_ACCESS`

     Uma entidade principal que tem permissões de localização de dados em um local também tem permissões de localização em todos os locais secundários.

     Para obter mais informações sobre permissões de localização de dados, consulte [Controle de acesso a dados subjacente](https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-underlying-data.html#data-location-permissions).

 Para permitir a compactação, o serviço precisa assumir um perfil do IAM que tenha permissões para atualizar tabelas no catálogo de dados. Para obter detalhes, consulte [Pré-requisitos de otimização de tabelas](optimization-prerequisites.md) 

### Criar uma tabela no Iceberg
<a name="create-iceberg-table"></a>

Você pode criar tabelas do Iceberg v1 e v2 usando o AWS Glue, o console do Lake Formation ou a AWS Command Line Interface conforme documentado nesta página. Você também pode criar tabelas do Iceberg usando o Crawler do AWS Glue. Para obter mais informações, consulte [Catálogo de dados e crawlers](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html) no Guia do desenvolvedor do AWS Glue.

**Para criar uma tabela no Iceberg**

------
#### [ Console ]

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Em catálogo de dados, escolha **Tabelas** e use o botão **Criar tabela** para especificar os seguintes atributos:
   + **Nome da tabela**: insira um nome para a tabela. Se você estiver usando o Athena para acessar tabelas, use essas [dicas de nomenclatura](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html) no Guia do usuário do Amazon Athena.
   + **Banco de dados**: escolha um banco de dados existente ou crie um novo.
   + **Descrição**: a descrição da tabela. Você pode escrever uma descrição para ajudá-lo a entender o conteúdo da tabela.
   + **Formato da tabela**: para **Formato da tabela**, escolha Apache Iceberg.
   + **Ativar compactação**: escolha **Ativar compactação** para compactar objetos pequenos do Amazon S3 na tabela em objetos maiores.
   + **Perfil do IAM**: para executar a compactação, o serviço assume um perfil do IAM em seu nome. Você pode escolher um perfil do IAM usando o menu suspenso. Certifique-se de que a função tenha as permissões necessárias para habilitar a compactação.

     Para saber mais sobre as permissões necessárias, consulte [Pré-requisitos de otimização de tabelas](optimization-prerequisites.md).
   + **Localização**: especifique o caminho para a pasta no Amazon S3 que armazena a tabela de metadados. O Iceberg precisa de um arquivo de metadados e de um local no catálogo de dados para poder realizar leituras e gravações.
   + **Esquema**: escolha **Adicionar colunas** para adicionar colunas e tipos de dados das colunas. Você tem a opção de criar uma tabela vazia e atualizar o esquema posteriormente. O catálogo de dados oferece suporte aos tipos de dados do Hive. Para obter mais informações, consulte [Tipos de dados do Hive](https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=27838462#content/view/27838462). 

      O Iceberg permite que você evolua o esquema e a partição depois de criar a tabela. Você pode usar as [consultas do Athena](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-evolving-table-schema.html) para atualizar o esquema da tabela e as consultas do [Spark](https://iceberg.apache.org/docs/latest/spark-ddl/#alter-table-sql-extensions) para atualizar as partições. 

------
#### [ AWS CLI ]

```
aws glue create-table \
    --database-name iceberg-db \
    --region us-west-2 \
    --open-table-format-input '{
      "IcebergInput": { 
           "MetadataOperation": "CREATE",
           "Version": "2"
         }
      }' \
    --table-input '{"Name":"test-iceberg-input-demo",
            "TableType": "EXTERNAL_TABLE",
            "StorageDescriptor":{ 
               "Columns":[ 
                   {"Name":"col1", "Type":"int"}, 
                   {"Name":"col2", "Type":"int"}, 
                   {"Name":"col3", "Type":"string"}
                ], 
               "Location":"s3://DOC_EXAMPLE_BUCKET_ICEBERG/"
            }
        }'
```

------

**Topics**
+ [Pré-requisitos](#iceberg-prerequisites)
+ [Criar uma tabela no Iceberg](#create-iceberg-table)

# Otimizar tabelas Iceberg
<a name="table-optimizers"></a>

O AWS Glue é compatível com várias opções de otimização de tabela para aprimorar o gerenciamento e a performance das tabelas do Apache Iceberg usadas pelos mecanismos analíticos da AWS e pelos trabalhos de ETL. Esses otimizadores fornecem utilização eficiente do espaço em disco, melhor performance de consultas e gerenciamento de dados. Existem três tipos de otimizadores de tabela disponíveis no AWS Glue: 
+ **Compactação**: a compactação de dados compacta pequenos arquivos de dados para reduzir o uso de armazenamento e melhorar a performance de leitura. Os arquivos de dados são mesclados e regravados para remover dados obsoletos e consolidar dados fragmentados em arquivos maiores e mais eficientes. Você pode configurar a compactação para execução automática. 

  O binpack é a estratégia de compactação padrão no Apache Iceberg. Ela combina arquivos de dados menores em arquivos maiores para um desempenho ideal. A compactação também é compatível com estratégias de classificação e ordem Z que agrupam em cluster dados semelhantes. A classificação organiza os dados com base em colunas especificadas, melhorando o desempenho da consulta para operações filtradas. A ordem Z cria conjuntos de dados ordenados que melhoram o desempenho da consulta quando várias colunas são consultadas simultaneamente. Todas as três estratégias de compactação (binpack, classificação e ordem Z) reduzem a quantidade de dados varridos pelos mecanismos de consulta, reduzindo os custos de processamento de consultas.
+ **Retenção de snapshots**: os snapshots são versões com carimbo de data e hora de uma tabela do Iceberg. As configurações de retenção de snapshots permitem que os clientes determinem por quanto tempo reter e quantos snapshots devem ser retidos. A configuração de um otimizador de retenção de snapshots pode ajudar a gerenciar a sobrecarga de armazenamento removendo snapshots antigos e desnecessários e seus arquivos subjacentes.
+ **Exclusão de arquivos órfãos**: arquivos órfãos são arquivos que não são mais referidos pelos metadados da tabela do Iceberg. Esses arquivos podem se acumular ao longo do tempo, especialmente após operações como exclusões de tabelas ou trabalhos de ETL com falha. Habilitar a exclusão de arquivos órfãos permite que o AWS Glue identifique e remova periodicamente esses arquivos desnecessários, liberando espaço de armazenamento.

A configuração da otimização no nível do catálogo está disponível no console do Lake Formation e usando a operação da API `UpdateCatalog` do AWS Glue. É possível habilitar ou desabilitar a compactação, a retenção de snapshots e os otimizadores de exclusão de arquivos órfãos para tabelas Iceberg individuais usando o console do AWS Glue, a AWS CLI ou as operações de API do AWS Glue. 

 O vídeo a seguir demonstra como configurar otimizadores para tabelas do Iceberg no Catálogo de dados. 

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


**Topics**
+ [Pré-requisitos de otimização de tabelas](optimization-prerequisites.md)
+ [Otimizadores de tabelas em nível de catálogo](catalog-level-optimizers.md)
+ [Otimização de compactação](compaction-management.md)
+ [Otimização de retenção de snapshots](snapshot-retention-management.md)
+ [Excluir arquivos órfãos](orphan-file-deletion.md)
+ [Visualizar detalhes da otimização](view-optimization-status.md)
+ [Visualizar métricas do Amazon CloudWatch](view-optimization-metrics.md)
+ [Excluindo um otimizador](delete-optimizer.md)
+ [Considerações e limitações](optimizer-notes.md)
+ [Regiões compatíveis para otimizadores de tabela](regions-optimizers.md)

# Pré-requisitos de otimização de tabelas
<a name="optimization-prerequisites"></a>

O otimizador de tabela assume as permissões do perfil do AWS Identity and Access Management (IAM) que você especificou ao habilitar as opções de otimização (compactação, retenção de snapshot e exclusão de arquivos órfãos) para uma tabela. Você pode criar um único perfil para todos os otimizadores ou criar perfis separados para cada otimizador.

**nota**  
O otimizador de exclusão de arquivos órfãos não exige as permissões `glue:updateTable` ou `s3:putObject`. Os otimizadores de expiração e compactação de snapshots exigem o mesmo conjunto de permissões.

O perfil do IAM deve ter as permissões para ler dados e atualizar metadados no catálogo de dados. Você pode criar um perfil do IAM e anexar as políticas em linha a seguir:
+ Adicione a seguinte política em linha que concede ao Amazon S3 permissões de leitura/gravação no local para dados que não estão registrados no AWS Lake Formation. Essa política também inclui permissões para atualizar a tabela no catálogo de dados e permitir que o AWS Glue adicione logs em logs do Amazon CloudWatch e a publicação de métricas. Para dados de origem no Amazon S3 que não estão registrados no Lake Formation, o acesso é determinado pelas políticas de permissões do IAM para o Amazon S3 e ações AWS Glue. 

  Nas políticas em linha a seguir, substitua `bucket-name` pelo nome do bucket do Amazon S3, `aws-account-id` e `region` por um número de conta da AWS e por uma região do catálogo de dados válidos, `database_name` pelo nome do seu banco de dados e `table_name` pelo nome da tabela.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "s3:GetObject",
                  "s3:DeleteObject"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket/*"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "s3:ListBucket"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "glue:UpdateTable",
                  "glue:GetTable"
              ],
              "Resource": [
                  "arn:aws:glue:us-east-1:111122223333:table/<database-name>/<table-name>",
                  "arn:aws:glue:us-east-1:111122223333:database/<database-name>",
                  "arn:aws:glue:us-east-1:111122223333:catalog"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "logs:CreateLogGroup",
                  "logs:CreateLogStream",
                  "logs:PutLogEvents"
              ],
              "Resource": [
                  "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-compaction/logs:*",
                  "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-retention/logs:*",
                  "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-orphan-file-deletion/logs:*"
              ]
          }
      ]
  }
  ```

------
+ Use a política a seguir para habilitar a compactação de dados registrados no Lake Formation. 

  Se o perfil de otimização não tiver permissões do grupo `IAM_ALLOWED_PRINCIPALS` concedidas na tabela, ele exigirá as permissões `ALTER`, `DESCRIBE`, `INSERT` e `DELETE` do Lake Formation na tabela. 

  Para obter mais informações sobre o registro de um bucket do Amazon S3 com o Lake Formation, consulte [Adicionar um local do Amazon S3 ao seu data lake](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html).

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "lakeformation:GetDataAccess"
        ],
        "Resource": "*"
      },
      {
        "Effect": "Allow",
        "Action": [
          "glue:UpdateTable",
          "glue:GetTable"
        ],
        "Resource": [
          "arn:aws:glue:us-east-1:111122223333:table/databaseName/tableName",
          "arn:aws:glue:us-east-1:111122223333:database/databaseName",
          "arn:aws:glue:us-east-1:111122223333:catalog"
        ]
      },
      {
        "Effect": "Allow",
        "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
        ],
        "Resource": [
          "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-compaction/logs:*",
          "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-retention/logs:*",
          "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-orphan-file-deletion/logs:*"
        ]
      }
    ]
  }
  ```

------
+ (Opcional) Para otimizar tabelas Iceberg com dados em buckets criptografados do Amazon S3 usando [criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html), o perfil de compactação exigirá permissões para descriptografar objetos do Amazon S3 e gerar uma nova chave de dados para gravar objetos nos buckets criptografados. Adicione a seguinte política à chave do AWS KMS desejada. Oferecemos suporte somente à criptografia em nível de bucket.

  ```
  {
      "Effect": "Allow",
      "Principal": {
          "AWS": "arn:aws:iam::<aws-account-id>:role/<optimizer-role-name>"
      },
      "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
      ],
      "Resource": "*"
  }
  ```
+  (Opcional) Para locais de dados registrados no Lake Formation, o perfil usado para registrar a localização exige permissões para descriptografar objetos do Amazon S3 e gerar uma nova chave de dados para gravar objetos nos buckets criptografados. Para obter mais informações, consulte [Registrar um local do Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-encrypted.html). 
+ (Opcional) Se a chave do AWS KMS estiver armazenada em uma conta da AWS diferente, você precisará incluir as permissões a seguir no perfil de compactação.

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
        ],
        "Resource": [
          "arn:aws:kms:us-east-1:111122223333:key/key-id"
        ]
      }
    ]
  }
  ```

------
+  A função que você usa para executar a compactação deve ter a permissão `iam:PassRole` da função. 

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iam:PassRole"
        ],
        "Resource": [
          "arn:aws:iam::111122223333:role/<optimizer-role-name>"
        ]
      }
    ]
  }
  ```

------
+ Adicione a política de confiança a seguir à função para que o serviço AWS Glue assuma o perfil do IAM para executar o processo de compactação.

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

****  

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

------
+ <a name="catalog-optimizer-requirement"></a> (Opcional) Para atualizar as configurações do Catálogo de dados para habilitar otimizações de tabela no nível do catálogo, o perfil do IAM utilizado deve ter a permissão `glue:UpdateCatalog` ou a permissão AWS Lake Formation `ALTER CATALOG` no catálogo raiz. É possível usar a API `GetCatalog` para verificar as propriedades do catálogo. 

# Otimizadores de tabelas em nível de catálogo
<a name="catalog-level-optimizers"></a>

Com uma configuração única do catálogo, você pode definir otimizadores automáticos, como compactação, retenção de snapshot e exclusão de arquivos órfãos para todas as tabelas do Apache Iceberg novas e atualizadas no AWS Glue Data Catalog. As configurações do otimizador no nível do catálogo permitem aplicar configurações consistentes do otimizador em todas as tabelas de um catálogo, eliminando a necessidade de configurar otimizadores individualmente para cada tabela.

Os administradores do data lake podem configurar os otimizadores de tabela selecionando o catálogo padrão no console do Lake Formation e habilitando os otimizadores usando a opção `Table optimization`. Quando você cria novas tabelas ou atualiza tabelas existentes no Catálogo de dados, este executa automaticamente as otimizações da tabela para reduzir a carga operacional.

Se você configurou a otimização no nível da tabela ou se excluiu anteriormente as configurações de otimização de uma tabela, essas configurações específicas da tabela terão precedência sobre as configurações padrão do catálogo para otimização de tabelas. Se um parâmetro de configuração não estiver definido no nível da tabela ou do catálogo, o valor da propriedade da tabela do Iceberg será aplicado. Essa configuração é aplicável à retenção de snapshots e ao otimizador de exclusão de arquivos órfãos.

Ao habilitar otimizadores no nível do catálogo, considere o seguinte:
+ Quando você configura as definições de otimização no momento da criação do catálogo e, posteriormente, desabilita as otimizações por meio de uma solicitação de atualização do catálogo, a operação será aplicada em cascata a todas as tabelas do catálogo.
+ Se você já configurou otimizadores para uma determinada tabela, a operação de desabilitação no nível do catálogo não afetará essa tabela.
+ Quando você desabilita os otimizadores no nível do catálogo, as tabelas com configurações de otimizador existentes mantêm suas configurações específicas e não são afetadas pela alteração no nível do catálogo. No entanto, as tabelas sem suas próprias configurações de otimizador herdarão o estado desabilitado do nível do catálogo.
+ Como os otimizadores de retenção de snapshots e exclusão de arquivos órfãos podem ser baseados em agendamentos, as atualizações introduzirão um atraso aleatório no início do agendamento. Isso fará com que cada otimizador inicie em momentos ligeiramente diferentes, distribuindo a carga e reduzindo a probabilidade de exceder os limites do serviço.
+ As configurações do otimizador em nível de catálogo não são herdadas automaticamente pelas tabelas quando a criptografia AWS Glue Data Catalog está ativada. Se o seu catálogo tiver a criptografia de metadados ativada, você deve configurar os otimizadores de tabela individualmente para cada tabela. Para usar a herança do otimizador no catálogo, a criptografia de metadados deve estar desativada no catálogo.

**Topics**
+ [Habilitar otimização automática de tabelas no nível do catálogo](enable-auto-table-optimizers.md)
+ [Visualizar otimizações no nível do catálogo](view-catalog-optimizations.md)
+ [Desabilitar otimização de tabelas no nível do catálogo](disable-auto-table-optimizers.md)

# Habilitar otimização automática de tabelas no nível do catálogo
<a name="enable-auto-table-optimizers"></a>

 É possível habilitar a otimização automática de tabelas para todas as novas tabelas do Apache Iceberg no Catálogo de dados. Após criar a tabela, você também pode atualizar explicitamente as configurações de otimização da tabela manualmente. 

 Para atualizar as configurações do Catálogo de dados para habilitar otimizações de tabela no nível do catálogo, o perfil do IAM utilizado deve ter permissão `glue:UpdateCatalog` no catálogo raiz. É possível usar a API `GetCatalog` para verificar as propriedades do catálogo. 

 Para as tabelas gerenciadas pelo Lake Formation, o perfil do IAM selecionado durante a configuração de otimização do catálogo requer permissões do Lake Formation `ALTER`, `DESCRIBE`, `INSERT` e `DELETE` para quaisquer tabelas novas ou atualizadas. 

## Para habilitar otimizadores no nível do catálogo (console)
<a name="enable-catalog-optimizers-console"></a>

1. Abra o console do Lake Formation em [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/).

1. No painel de navegação, escolha **Catálogo de Dados**.

1. Escolha a guia **Catálogos**.

1. Escolha o catálogo no nível da conta.

1. Escolha **Otimizações da tabela**, **Editar** na guia **Otimizações da tabela**. Você também pode escolher **Editar otimizações** em **Ações**.  
![\[A captura de tela mostra a opção Editar para permitir otimizações no nível do catálogo.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/catalog-edit-optimizations.png)

1. Na página **Otimização de tabelas**, configure estas opções:  
![\[A captura de tela mostra as opções de otimização no nível do catálogo.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/catalog-optimization-options.png)

   1. Defina as configurações de **Compactação**:
      + Habilitar/desabilitar a compactação.
      + Escolha o perfil do IAM com as permissões necessárias para executar os otimizadores.

        Para obter mais informações sobre os requisitos de permissão para o perfil do IAM, consulte [Pré-requisitos de otimização de tabelas](optimization-prerequisites.md).

   1. Defina as configurações de **Retenção de snapshots**:
      + Habilitar/desabilitar a retenção.
      + Defina o período de retenção do snapshot em dias: o padrão é 5 dias.
      + Defina o número de snapshots a serem retidos: o padrão é 1 snapshot.
      + Habilitar/desabilitar a limpeza de arquivos expirados.

   1. Defina configurações de **Exclusão de arquivos órfãos**:
      + Habilitar/desabilitar exclusão de arquivos órfãos.
      + Defina o período de retenção de arquivos órfãos em dias - o padrão é 3 dias.

1. Escolha **Salvar**.

## Habilitando otimizadores em nível de catálogo por meio do AWS CLI
<a name="catalog-auto-optimizers-cli"></a>

Use o seguinte comando da CLI para atualizar um catálogo existente com as configurações do otimizador:

**Example Atualizar catálogo com configurações do otimizador**  

```
aws glue update-catalog \
   --name catalog-id \
  --catalog-input \
  '{
    "CatalogId": "111122223333",
    "CatalogInput": {
        "CatalogProperties": {
            "CustomProperties": {
                "ColumnStatistics.Enabled": "false",
                "ColumnStatistics.RoleArn": "arn:aws:iam::111122223333:role/service-role/stats-role-name"
            },
            "IcebergOptimizationProperties": {
                "RoleArn": "arn:aws:iam::111122223333:role/optimizer-role-name",
                "Compaction": {
                    "enabled": "true"
                },
                "Retention": {
                    "enabled": "true",
                    "snapshotRetentionPeriodInDays": "10",
                    "numberOfSnapshotsToRetain": "5",
                    "cleanExpiredFiles": "true"
                },
                "OrphanFileDeletion": {
                    "enabled": "true",
                    "orphanFileRetentionPeriodInDays": "3"
                }
            }
        }
    }
}'
```

Se você encontrar problemas com otimizadores no nível do catálogo, verifique o seguinte:
+ Certifique-se de que o perfil do IAM tenha as permissões corretas, conforme descrito na seção Pré-requisitos.
+ Verifique os logs do CloudWatch para ver se há mensagens de erro relacionadas às operações do otimizador.

   Para obter mais informações, consulte [Visualizar métricas disponíveis](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html) no *Guia do usuário do Amazon CloudWatch*. 
+ Verifique se as configurações do catálogo foram aplicadas com êxito, conferindo a configuração do catálogo.
+ Para falhas no acesso à tabela, verifique os logs do CloudWatch e as notificações do EventBridge para obter informações detalhadas sobre o erro.

# Visualizar otimizações no nível do catálogo
<a name="view-catalog-optimizations"></a>

 Quando a otimização da tabela no nível do catálogo está habilitada, sempre que uma tabela do Apache Iceberg é criada ou atualizada por meio das APIs `CreateTable` ou `UpdateTable` por meio d Console de gerenciamento da AWS, do SDK ou da Crawler do AWS Glue, uma configuração equivalente no nível da tabela é criada para essa tabela. 

 Depois de criar ou atualizar uma tabela, você pode verificar os detalhes da tabela para confirmar sua otimização. A `Table optimization` mostra a propriedade `Configuration source` definida como `Catalog`. 

![\[Uma imagem de uma tabela do Apache Iceberg com configuração de otimização em nível de catálogo foi aplicada.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/catalog-optimization-enabled.png)


# Desabilitar otimização de tabelas no nível do catálogo
<a name="disable-auto-table-optimizers"></a>

 É possível desabilitar a otimização de tabelas para novas tabelas usando o console do AWS Lake Formation e a API `glue:UpdateCatalog`. 

**Para desabilitar as otimizações de tabela no nível do catálogo**

1. Abra o console do Lake Formation em [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/).

1. No painel de navegação à esquerda, escolha **Catálogos)**.

1. Na página **Resumo do catálogo**, selecione **Editar** em **Otimizações da tabela**.

1. Na página **Editar otimização**, desmarque **Opções de otimização**.

1. Escolha **Salvar**.

# Otimização de compactação
<a name="compaction-management"></a>

 Os data lakes do Amazon S3 usando formatos de tabela aberta, como o Apache Iceberg, armazenam dados como objetos do S3. Ter milhares de pequenos objetos do Amazon S3 em uma tabela de data lake aumenta a sobrecarga de metadados e afeta a performance de leitura. O AWS Glue Data Catalog fornece compactação gerenciada para tabelas Iceberg, compactando objetos pequenos em objetos maiores para melhor performance de leitura por meio de serviços de analytics da AWS, como o Amazon Athena e o Amazon EMR, e trabalhos de ETL do AWS Glue. O Catálogo de Dados executa compactação sem interferir nas consultas simultâneas e é compatível com compactação somente para tabelas no formato Parquet. 

O otimizador de tabelas monitora constantemente as partições da tabela e inicia o processo de compactação quando o limite é excedido para o número de arquivos e tamanhos de arquivo.

No Catálogo de Dados, o processo de compactação começa quando uma tabela ou qualquer uma de suas partições tem mais de 100 arquivos. Cada arquivo deve ser menor que 75% do tamanho do arquivo de destino. O tamanho do arquivo de destino é definido pela propriedade `write.target-file-size-bytes` da tabela, cujo padrão é 512 MB caso não tenha sido definido explicitamente.

 Para conhecer as limitações, consulte [Formatos e limitações compatíveis para compactação gerenciada de dados](optimizer-notes.md#compaction-notes). 

**Topics**
+ [Habilitar o otimizador de compactação](enable-compaction.md)
+ [Desabilitar o otimizador de compactação](disable-compaction.md)

# Habilitar o otimizador de compactação
<a name="enable-compaction"></a>

 Você pode usar o console do AWS Glue, a AWS CLI, ou a API da AWS para habilitar a compactação de tabelas Apache Iceberg no Catálogo de Dados do AWS Glue. Para novas tabelas, você pode escolher o Apache Iceberg como formato de tabela e ativar a compactação ao criar a tabela. A compactação está desabilitada por padrão para novas tabelas.

------
#### [ Console ]

**Para habilitar compactação**

1.  Abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) e faça login como administrador do data lake, criador da tabela ou um usuário que tenha recebido as permissões `glue:UpdateTable` e `lakeformation:GetDataAccess` na tabela. 

1. No painel de navegação, em **Catálogo de dados**, escolha **Tabelas**.

1. Na página **Tabelas**, escolha uma tabela em formato de tabela aberta para a qual você deseja habilitar a compactação e, em seguida, no menu **Ações**, escolha **Optimização** e **Habilitar**.

   Você também pode habilitar a compactação selecionando a tabela **Otimização de tabela** e abrindo a página **Detalhes da tabela**. Escolha a guia **Otimização de tabela** na seção inferior da página e escolha **Ativar compactação**. 

   A opção **Ativar otimização** também está disponível ao criar uma nova tabela Iceberg no Catálogo de Dados.

1. Na página **Habilitar otimização**, escolha **Compactação** em **Opções de otimização**.  
![\[Página de detalhes da tabela do Apache Iceberg com a opção Ativar compactação.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/table-enable-compaction.png)

1. Em seguida, selecione um perfil do IAM na lista suspensa com as permissões mostradas na seção [Pré-requisitos de otimização de tabelas](optimization-prerequisites.md). 

   Você também pode escolher a opção **Criar um novo perfil do IAM** para criar um perfil personalizado com as permissões necessárias para executar a compactação.

    Siga as etapas abaixo para atualizar um perfil do IAM existente: 

   1.  Para atualizar a política de permissões para o perfil do IAM, no console do IAM, acesse a função do IAM que está sendo usada para executar a compactação. 

   1.  Na seção **Adicionar permissões**, escolha Criar política. Na janela recém-aberta do navegador, crie uma nova política para usar com sua função. 

   1. Na página Criar política, escolha a guia `JSON`. Copie o código JSON mostrado nos Pré-requisitos no campo do editor de políticas.

1. Se você tiver configurações de política de segurança em que o otimizador de tabelas do Iceberg precise acessar buckets do Amazon S3 de uma Nuvem Privada Virtual (VPC) específica, crie uma conexão de rede do AWS Glue ou use uma existente.

   Se você ainda não tiver uma conexão VPC do AWS Glue configurada, crie uma seguindo as etapas na seção [Creating connections for connectors](https://docs.aws.amazon.com/glue/latest/dg/creating-connections.html) usando o console do AWS Glue ou a AWS CLI/o SDK.

1. Escolha uma estratégia de compactação. As opções disponíveis são:
   + **Binpack**: binpack é a estratégia de compactação padrão no Apache Iceberg. Ela combina arquivos de dados menores em arquivos maiores para um desempenho ideal.
   + **Sort**: a classificação no Apache Iceberg é uma técnica de organização de dados que agrupa em cluster informações em arquivos com base em colunas especificadas, melhorando significativamente o desempenho da consulta ao reduzir o número de arquivos que precisam ser processados. Você define a ordem de classificação nos metadados do Iceberg usando o campo sort-order e, quando houver a especificação de várias colunas, os dados são classificados na sequência em que as colunas aparecem na ordem de classificação, garantindo que registros com valores semelhantes sejam armazenados juntos nos arquivos. A estratégia de compactação de classificação promove ainda mais otimização ao classificar os dados em todos os arquivos dentro de uma partição. 
   + **Z-order**: a ordenação Z é uma forma de organizar dados quando você precisa classificar por várias colunas com importância igual. Diferentemente da classificação tradicional que prioriza uma coluna em detrimento de outras, a ordenação Z dá um peso equilibrado a cada coluna, ajudando seu mecanismo de consulta a ler menos arquivos ao pesquisar dados.

     A técnica funciona entrelaçando os dígitos binários dos valores de diferentes colunas. Por exemplo, se você tiver os números 3 e 4 de duas colunas, primeiro a ordenação Z os converte em binário (3 vira 011 e 4 vira 100) e, em seguida, intercala esses dígitos para criar um novo valor: 011010. Essa intercalação cria um padrão que mantém os dados relacionados fisicamente próximos uns dos outros.

     A ordenação Z é particularmente eficaz para consultas multidimensionais. Por exemplo, uma tabela de clientes com ordenação em Z por renda, estado e código postal pode oferecer desempenho superior em comparação à classificação hierárquica ao fazer consultas em várias dimensões. Essa organização permite que consultas direcionadas a combinações específicas de renda e localização geográfica localizem rapidamente dados relevantes e, ao mesmo tempo, minimizem varreduras desnecessárias de arquivos.

1. **Arquivos de entrada mínimos**: o número de arquivos de dados necessários em uma partição antes que a compactação seja acionada.

1. **Limite de exclusão de arquivos**: operações mínimas de exclusão necessárias em um arquivo de dados antes que ele se torne elegível para compactação.

1. Escolha **Habilitar otimização**.

------
#### [ AWS CLI ]

 O exemplo a seguir mostra como habilitar a compactação. Substitua o ID da conta por um ID de conta da AWS válido. Substitua o nome do banco de dados e o nome da tabela pelo nome real da tabela do Iceberg e pelo nome do banco de dados. Substitua o `roleArn` pelo nome do recurso (ARN) AWS do perfil do IAM e o nome do perfil do IAM que tem as permissões necessárias para executar a compactação. Você pode substituir a estratégia de compactação `sort` por outras estratégias compatíveis, como `z-order` ou `binpack`.

order” dependendo dos seus requisitos.

```
aws glue create-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{
    "roleArn": "arn:aws:iam::123456789012:role/optimizer_role",
    "enabled": true,
    "vpcConfiguration": {"glueConnectionName": "glue_connection_name"},
    "compactionConfiguration": {
      "icebergConfiguration": {"strategy": "sort"}
    }
  }'\
--type compaction
```

------
#### [ AWS API ]

Chame a operação [CreateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) para ativar a compactação de uma tabela.

------

Após habilitar a compactação, a guia **Otimização da tabela** mostrará os seguintes detalhes da compactação após a conclusão da execução da compactação:

Hora de início  
A hora em que o processo de compactação iniciou no Catálogo de Dados. O valor é um timestamp no horário UTC. 

End Time  
A hora em que o processo de compactação terminou no catálogo de dados. O valor é um timestamp no horário UTC. 

Status  
O status de execução da compactação. Os valores são sucesso ou falha.

Arquivos compactados  
Número total de arquivos compactados.

Bytes compactados  
Número total de bytes compactados.

# Desabilitar o otimizador de compactação
<a name="disable-compaction"></a>

 Você pode desativar a compactação automática para uma tabela específica do Apache Iceberg usando o console do AWS Glue ou a AWS CLI. 

------
#### [ Console ]

1. Faça login no Console de gerenciamento da AWS e 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, em **Catálogo de dados**, escolha **Tabelas**. 

1. Na lista de tabelas, escolha a tabela Iceberg da qual você deseja desabilitar a compactação.

1. Selecione a guia **Otimização de tabela** na seção inferior da página **Detalhes da tabela**.

1. Em **Ações**, escolha **Desativar** e, em seguida, escolha **Compactação**.

1.  Escolha **Desativar compactação** na mensagem de confirmação. Você poderá reabilitar a compactação mais tarde. 

    Após a confirmação, a compactação é desativada e o status de compactação da tabela volta para `Disabled`.

------
#### [ AWS CLI ]

No exemplo a seguir, substitua o ID da conta por um ID de conta da AWS válido. Substitua o nome do banco de dados e o nome da tabela pelo nome real da tabela do Iceberg e pelo nome do banco de dados. Substitua o `roleArn` pelo nome do recurso (ARN) AWS do perfil do IAM e o nome real do perfil do IAM que tem as permissões necessárias para executar a compactação.

```
aws glue update-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role", "enabled":'false', "vpcConfiguration":{"glueConnectionName":"glue_connection_name"}}'\ 
  --type compaction
```

------
#### [ AWS API ]

Chame a operação [UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) para desabilitar a compactação para uma tabela específica.

------

# Otimização de retenção de snapshots
<a name="snapshot-retention-management"></a>

O recurso de retenção de snapshots do Apache Iceberg permite que os usuários consultem dados históricos em momentos específicos e revertam modificações indesejadas em suas tabelas. No Catálogo de Dados do AWS Glue, a configuração de retenção de snapshots controla por quanto tempo esses snapshots (versões dos dados da tabela) são mantidos antes de expirarem e serem removidos. Isso ajuda a gerenciar os custos de armazenamento e a sobrecarga de metadados removendo automaticamente os snapshots antigos com base em um período de retenção configurado ou no número máximo de snapshots a serem mantidos. 

Você pode configurar o período de retenção em dias e o número máximo de snapshots a serem retidos em uma tabela. O AWS Glue remove os snapshots mais antigos do que o período de retenção especificado dos metadados da tabela, enquanto mantém os snapshots mais recentes até o limite configurado. Depois de remover os snapshots antigos dos metadados, o AWS Glue exclui os dados e os arquivos de metadados correspondentes que não são mais relacionados e que são exclusivos dos snapshots expirados. Isso permite consultas de viagem no tempo somente até os snapshots retidos restantes, enquanto recupera o espaço de armazenamento usado pelos dados de snapshots expirados.

**Topics**
+ [Habilitar o otimizador de retenção de snapshots](enable-snapshot-retention.md)
+ [Atualizar o otimizador de retenção de snapshots](update-snapshot-retention.md)
+ [Desabilitar o otimizador de retenção de snapshots](disable-snapshot-retention.md)

# Habilitar o otimizador de retenção de snapshots
<a name="enable-snapshot-retention"></a>

 Você pode usar o console do AWS Glue, a AWS CLI ou a API da AWS para habilitar os otimizadores de retenção de snapshots nas suas tabelas Apache Iceberg no Catálogo de Dados. Para novas tabelas, você pode escolher Apache Iceberg como o formato de tabela e habilitar o otimizador de retenção de snapshots ao criar a tabela. A retenção de snapshots está desabilitada por padrão para novas tabelas.

------
#### [ Console ]

**Para habilitar o otimizador de retenção de snapshots**

1.  Abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) e faça login como administrador do data lake, criador da tabela ou um usuário que tenha recebido as permissões `glue:UpdateTable` e `lakeformation:GetDataAccess` na tabela. 

1. No painel de navegação, em **Catálogo de dados**, escolha **Tabelas**.

1. Na página **Tabelas**, escolha uma tabela Iceberg para a qual você deseja habilitar o otimizador de retenção de snapshots e, no menu **Ações**, escolha **Habilitar** em **Otimização**.

   Você também pode habilitar a otimização selecionando a tabela e abrindo a página **Detalhes da tabela**. Escolha a guia **Otimização de tabela** na seção inferior da página e depois **Habilitar a retenção de snapshots**. 

1. Na página **Habilitar otimização**, em **Configuração da otimização**, você tem duas opções: **Usar configuração padrão** ou **Personalizar configurações**. Se você optar por usar as configurações padrão, o AWS Glue utiliza as propriedades definidas na configuração da tabela Iceberg para determinar o período de retenção de snapshots e o número de snapshots a serem retidos. Na ausência dessa configuração, o AWS Glue retém um snapshot por cinco dias e exclui os arquivos associados aos snapshots expirados.

1.  Em seguida, escolha um perfil do IAM que o AWS Glue possa assumir em seu nome para executar o otimizador. Para obter detalhes sobre as permissões necessárias para o perfil do IAM, consulte a seção [Pré-requisitos de otimização de tabelas](optimization-prerequisites.md).

   Siga as etapas abaixo para atualizar um perfil do IAM existente: 

   1.  Para atualizar a política de permissões para o perfil do IAM, no console do IAM, acesse a função do IAM que está sendo usada para executar a compactação. 

   1.  Na seção Adicionar permissões, escolha Criar política. Na janela recém-aberta do navegador, crie uma nova política para usar com sua função. 

   1. Na página Criar política, escolha a guia JSON. Copie o código JSON mostrado nos Pré-requisitos no campo do editor de políticas.

1. Se você preferir definir os valores da **Configuração de retenção de snapshots** manualmente, escolha **Personalizar configurações**.   
![\[Página de detalhes da tabela Apache Iceberg com a opção Habilitar retenção > Personalizar configurações.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/table-enable-retention.png)

1. Escolha a opção **Aplicar o perfil do IAM selecionado aos otimizadores selecionados** para usar um único perfil do IAM para habilitar todos os otimizadores.

1. Se você tiver configurações de política de segurança em que o otimizador de tabelas do Iceberg precise acessar buckets do Amazon S3 de uma Nuvem Privada Virtual (VPC) específica, crie uma conexão de rede do AWS Glue ou use uma existente.

   Se você ainda não tiver uma conexão VPC do AWS Glue configurada, crie uma seguindo as etapas na seção [Creating connections for connectors](https://docs.aws.amazon.com/glue/latest/dg/creating-connections.html) usando o console do AWS Glue ou a AWS CLI/o SDK.

1. Em seguida, em **Configuração de retenção de snapshots**, escolha usar os valores especificados na [Configuração da tabela do Iceberg](https://iceberg.apache.org/docs/1.5.2/configuration/#table-behavior-properties) ou especifique valores personalizados para o período de retenção do snapshot (history.expire.max-snapshot-age-ms), o número mínimo de snapshots (history.expire.min-snapshots-to-keep) a serem mantidos e o tempo em horas entre as execuções consecutivas do trabalho de exclusão de snapshots.

1.  Escolha **Excluir arquivos associados** para excluir arquivos subjacentes quando o otimizador de tabela excluir snapshots antigos dos metadados da tabela.

    Se você não escolher essa opção, quando os snapshots mais antigos forem removidos dos metadados da tabela, seus arquivos associados permanecerão no armazenamento como arquivos órfãos. 

1. Em seguida, leia a declaração de atenção e escolha **Eu confirmo** para continuar.
**nota**  
 No Catálogo de Dados, o otimizador de retenção de snapshots respeita o ciclo de vida controlado pelas políticas de retenção no nível de ramificação e tag. Para obter mais informações, consulte a seção [Branching and tagging](https://iceberg.apache.org/docs/latest/branching/#overview) na documentação do Iceberg.

1. Revise a configuração e escolha **Habilitar otimização**.

   Aguarde alguns minutos até que o otimizador de retenção seja executado e expire os snapshots antigos com base na configuração.

------
#### [ AWS CLI ]

 Para habilitar a retenção de snapshots para novas tabelas Iceberg no AWS Glue, você precisa criar um otimizador de tabela do tipo `retention` e definir o campo `enabled` como `true` na `table-optimizer-configuration`. Você pode executar essa ação usando o comando `create-table-optimizer` ou `update-table-optimizer` da AWS CLI. Além disso, você precisa especificar os campos de configuração de retenção, como `snapshotRetentionPeriodInDays` e `numberOfSnapshotsToRetain`, com base em seus requisitos.

O exemplo a seguir mostra como habilitar o otimizador de retenção de snapshots. Substitua o ID da conta por um ID de conta da AWS válido. Substitua o nome do banco de dados e o nome da tabela pelo nome real da tabela do Iceberg e pelo nome do banco de dados. Substitua `roleArn` pelo nome do recurso da AWS (ARN) do perfil do IAM e o nome atual do perfil do IAM que tem as permissões necessárias para executar o otimizador de retenção de snapshots. 

```
aws glue create-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role","enabled":'true', "vpcConfiguration":{
"glueConnectionName":"glue_connection_name"}, "retentionConfiguration":{"icebergConfiguration":{"snapshotRetentionPeriodInDays":7,"numberOfSnapshotsToRetain":3,"cleanExpiredFiles":'true'}}}'\
  --type retention
```

 Esse comando cria um otimizador de retenção para a tabela Iceberg especificada no catálogo, no banco de dados e na região especificados. A configuração do otimizador de tabela especifica o ARN do perfil do IAM a ser usado, habilita o otimizador e define a configuração de retenção. Neste exemplo, ele retém os snapshots por sete dias, mantém um mínimo três snapshots e limpa os arquivos expirados. 
+  snapshotRetentionPeriodInDays: o número de dias para reter os snapshots antes de expirá-los. O valor padrão é `5`. 
+ numberOfSnapshotsToRetain: o número mínimo de snapshots a serem mantidos, mesmo que sejam mais antigos que o período de retenção. O valor padrão é `1`. 
+ cleanExpiredFiles: um booleano que indica se os arquivos de dados expirados devem ser excluídos após a expiração dos snapshots. O valor padrão é `true`.

   Quando definido como true, os snapshots mais antigos são removidos dos metadados da tabela e seus arquivos subjacentes são excluídos. Se esse parâmetro for definido como false, os snapshots mais antigos serão removidos dos metadados da tabela, mas seus arquivos subjacentes permanecerão no armazenamento como arquivos órfãos. 

------
#### [ AWS API ]

Chame a operação [CreateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) para habilitar o otimizador de retenção de snapshots de uma tabela.

------

Depois de ativar a compactação, a guia **Otimização de tabela** mostra os seguintes detalhes da compactação (após aproximadamente 15 a 20 minutos):

Hora de início  
A hora em que o otimizador de retenção de snapshots foi iniciado. O valor é um timestamp no horário UTC. 

Run time (runtime)  
A hora mostra quanto tempo o otimizador leva para concluir a tarefa. O valor é um timestamp no horário UTC. 

Status  
O status da execução do otimizador. Os valores são sucesso ou falha.

Arquivos de dados excluídos  
Número total de arquivos excluídos.

Arquivos de manifesto excluídos  
Número total de arquivos de manifesto excluídos.

Listas de manifestos excluídas  
Número total de listas de manifestos excluídas.

# Atualizar o otimizador de retenção de snapshots
<a name="update-snapshot-retention"></a>

 Você pode atualizar a configuração atual de um otimizador de retenção de snapshots para uma tabela Apache Iceberg específica usando o console do AWS Glue, a AWS CLI ou a API UpdateTableOptimizer. 

------
#### [ Console ]

**Para atualizar a configuração de retenção de snapshots**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha **catálogo de dados** e escolha **Tabelas**. Na lista de tabelas, escolha a tabela do Iceberg para a qual deseja atualizar a configuração do otimizador de retenção de snapshots.

1. Na seção inferior da página de **Detalhes das tabelas**, selecione a guia **Otimização da tabela** e **Editar**. Você também pode escolher **Editar** em **Otimização** no menu **Ações** localizado no canto superior direito da página.

1.  Na página **Editar otimização**, faça as alterações necessárias. 

1.  Escolha **Salvar**. 

------
#### [ AWS CLI ]

 Para atualizar um otimizador de retenção de snapshots usando aAWS CLI, você pode usar o seguinte comando: 

```
aws glue update-table-optimizer \
 --catalog-id 123456789012 \
 --database-name iceberg_db \
 --table-name iceberg_table \
 --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role"","enabled":'true', "vpcConfiguration":{"glueConnectionName":"glue_connection_name"},"retentionConfiguration":{"icebergConfiguration":{"snapshotRetentionPeriodInDays":7,"numberOfSnapshotsToRetain":3,"cleanExpiredFiles":'true'}}}' \
 --type retention
```

 Esse comando atualiza a configuração de retenção para a tabela especificada em determinado catálogo, banco de dados e região. Os principais parâmetros são: 
+  snapshotRetentionPeriodInDays: o número de dias para reter os snapshots antes de expirá-los. O valor padrão é `1`. 
+ numberOfSnapshotsToRetain: o número mínimo de snapshots a serem mantidos, mesmo que sejam mais antigos que o período de retenção. O valor padrão é `5`. 
+ cleanExpiredFiles: um booleano que indica se os arquivos de dados expirados devem ser excluídos após a expiração dos snapshots. O valor padrão é `true`. 

   Quando definido como true, os snapshots mais antigos são removidos dos metadados da tabela e seus arquivos subjacentes são excluídos. Se esse parâmetro for definido como false, os snapshots mais antigos serão removidos dos metadados da tabela, mas seus arquivos subjacentes permanecerão no armazenamento como arquivos órfãos. 

------
#### [ API ]

Para atualizar um otimizador de tabela, você pode usar a API `UpdateTableOptimizer`. Essa API permite que você atualize a configuração de um otimizador de tabela existente para compactação, retenção ou remoção de arquivos órfãos. Os parâmetros de solicitação incluem:
+ catalogId (obrigatório): o ID do catálogo que contém a tabela 
+  databaseName (opcional): o nome do banco de dados que contém a tabela 
+  tableName (opcional): o nome da tabela 
+  type (obrigatório): o tipo de otimizador de tabela (compactação, retenção ou orphan\$1file\$1deletion) 
+  retentionConfiguration (obrigatório): a configuração atualizada do otimizador de tabela, incluindo o ARN do perfil, o status habilitado, a configuração de retenção e a configuração de remoção de arquivos órfãos. 

------

# Desabilitar o otimizador de retenção de snapshots
<a name="disable-snapshot-retention"></a>

 Você pode desabilitar o otimizador de retenção de snapshots para uma tabela Apache Iceberg específica usando o console do AWS Glue ou a AWS CLI. 

------
#### [ Console ]

**Para desabilitar a retenção de snapshots**

1. Faça login no Console de gerenciamento da AWS e abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha **catálogo de dados** e escolha **Tabelas**. Na lista de tabelas, escolha a tabela Iceberg da qual você deseja desabilitar o otimizador para a retenção de snapshots.

1. Na seção inferior da página **Detalhes da tabela**, escolha **Otimização de tabela** e **Desabilitar**, **Retenção de snapshots**, em **Ações**.

   Também é possíveç escolher **Desativar** em **Otimização** no menu **Ações**, localizado no canto superior direito da página.

1.  Escolha **Desabilitar** na mensagem de confirmação. Você poderá habilitar novamente o otimizador de retenção de snapshots mais tarde. 

    Após a confirmação, o otimizador de retenção de snapshots é desabilitado e o status de retenção de snapshots volta a ser `Not enabled`.

------
#### [ AWS CLI ]

No exemplo a seguir, substitua o ID da conta por um ID de conta da AWS válido. Substitua o nome do banco de dados e o nome da tabela pelo nome real da tabela do Iceberg e pelo nome do banco de dados. Substitua `roleArn` pelo nome do recurso da AWS (ARN) do perfil do IAM e o nome atual do perfil do IAM que tem as permissões necessárias para executar o otimizador de retenção.

```
aws glue update-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role", "vpcConfiguration":{"glueConnectionName":"glue_connection_name"}, "enabled":'false'}'\ 
  --type retention
```

------
#### [ AWS API ]

Chame a operação [UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) para desabilitar o otimizador de retenção de snapshots para uma tabela específica.

------

# Excluir arquivos órfãos
<a name="orphan-file-deletion"></a>

 O AWS Glue Data Catalog permite que você remova arquivos órfãos de suas tabelas Iceberg. Arquivos órfãos são arquivos não referenciados que existem na sua fonte de dados do Amazon S3 na localização da tabela especificada, não são rastreados pelos metadados da tabela Iceberg e são mais antigos do que o limite de idade configurado. Esses arquivos órfãos podem se acumular com o tempo devido a falhas de operações como compactação, descarte de partições ou regravações de tabelas, além de ocupar espaço de armazenamento desnecessário.

O otimizador de exclusão de arquivos órfãos no AWS Glue verifica os metadados da tabela e os arquivos de dados reais, identifica os arquivos órfãos e os exclui para recuperar espaço de armazenamento. O otimizador remove apenas os arquivos criados após a data de criação do otimizador que também atendam aos critérios de exclusão configurados. Os arquivos criados antes ou na data de criação do otimizador nunca são excluídos.

**Lógica de exclusão de arquivos órfãos**

1. Verificação de data: compara a data de criação do arquivo com a data de criação do otimizador. Se o arquivo for anterior ou igual à data de criação do otimizador, ele será ignorado.

1. Verificação da configuração do otimizador: se o arquivo for mais recente que a data de criação do otimizador, ele será avaliado em relação ao limite de idade configurado. O otimizador exclui o arquivo se ele corresponder aos critérios de exclusão. Ignora o arquivo, se ele não corresponder aos critérios.

 Você pode iniciar a exclusão de arquivos órfãos criando um otimizador de tabela de exclusão de arquivos órfãos no Catálogo de Dados.

**Importante**  
 Por padrão, a exclusão de arquivos órfãos avalia os arquivos em toda a localização da sua tabela do AWS Glue. Embora você possa configurar um subprefixo para limitar o escopo da avaliação usando o parâmetro API, é necessário garantir que o local da tabela não contenha arquivos de outras fontes de dados ou tabelas. Se a localização da sua tabela se sobrepuser a outras fontes de dados, o serviço poderá identificar e excluir arquivos não relacionados como órfãos. 

**Topics**
+ [Habilitar a exclusão de arquivos órfãos](enable-orphan-file-deletion.md)
+ [Atualizar o otimizador de exclusão de arquivos órfãos](update-orphan-file-deletion.md)
+ [Desabilitar a exclusão de arquivos órfãos](disable-orphan-file-deletion.md)

# Habilitar a exclusão de arquivos órfãos
<a name="enable-orphan-file-deletion"></a>

 Você pode usar o console do AWS Glue, a AWS CLI ou a API da AWS para habilitar a exclusão de arquivos órfãos das suas tabelas Apache Iceberg que estão no Catálogo de Dados. Para novas tabelas, você pode escolher Apache Iceberg como o formato de tabela e habilitar o otimizador de exclusão de arquivos órfãos ao criar a tabela. A retenção de snapshots está desabilitada por padrão para novas tabelas.

------
#### [ Console ]

**Para habilitar a exclusão de arquivos órfãos**

1.  Abra o console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) e faça login como administrador do data lake, criador da tabela ou um usuário que tenha recebido as permissões `glue:UpdateTable` e `lakeformation:GetDataAccess` na tabela. 

1. No painel de navegação, em **Catálogo de dados**, escolha **Tabelas**.

1. Na página **Tabelas**, escolha uma tabela Iceberg na qual você deseja habilitar a exclusão de arquivos órfãos.

   Escolha a guia **Otimização de tabela** na seção inferior da página e depois **Habilitar**, **Exclusão de arquivos órfãos**, em **Ações**. 

   Você também pode escolher **Habilitar** em **Otimização** no menu **Ações** localizado no canto superior direito da página.

1. Na página **Habilitar otimização**, escolha **Exclusão de arquivos órfãos** em **Opções de otimização**.

1. Se você optar por usar as **Configurações padrão**, todos os arquivos órfãos serão excluídos após 3 dias. Se quiser manter os arquivos órfãos por um número específico de dias, escolha **Personalizar configurações**.

1. Depois, escolha uma perfil do IAM com as permissões necessárias para excluir arquivos órfãos.

1. Se você tiver configurações de política de segurança em que o otimizador de tabelas do Iceberg precise acessar buckets do Amazon S3 de uma Nuvem Privada Virtual (VPC) específica, crie uma conexão de rede do AWS Glue ou use uma existente.

   Se você ainda não tiver uma conexão VPC do AWS Glue configurada, crie uma seguindo as etapas na seção [Creating connections for connectors](https://docs.aws.amazon.com/glue/latest/dg/creating-connections.html) usando o console do AWS Glue ou a AWS CLI/o SDK.

1. Em **Personalizar configurações**, insira o número de dias para reter os arquivos antes da exclusão em **Configuração de exclusão de arquivos órfãos**. Também é possível especificar o intervalo entre duas execuções consecutivas do otimizador. O valor padrão é 24 horas.

1. Escolha **Habilitar otimização**.

------
#### [ AWS CLI ]

 Para habilitar a exclusão de arquivos órfãos para uma tabela Iceberg no AWS Glue, você precisa criar um otimizador de tabela do tipo `orphan_file_deletion` e definir o campo `enabled` como true. Para criar um otimizador de exclusão de arquivos órfãos para uma tabela Iceberg usando a AWS CLI, você pode usar o seguinte comando:

```
aws glue create-table-optimizer \
 --catalog-id 123456789012 \
 --database-name iceberg_db \
 --table-name iceberg_table \
 --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role","enabled":true, "vpcConfiguration":{
"glueConnectionName":"glue_connection_name"}, "orphanFileDeletionConfiguration":{"icebergConfiguration":{"orphanFileRetentionPeriodInDays":3, "location":'S3 location'}}}'\
 --type orphan_file_deletion
```

 Esse comando cria um otimizador de exclusão de arquivos órfãos para a tabela Iceberg especificada. Os principais parâmetros são:
+ roleArn: o ARN do perfil do IAM com permissões para acessar o bucket do S3 e os recursos do Glue.
+ enabled: defina como true para habilitar o otimizador.
+ orphanFileRetentionPeriodInDays: o número de dias para reter arquivos órfãos antes de excluí-los (o mínimo é um dia).
+ type: defina como orphan\$1file\$1deletion para criar um otimizador de exclusão de arquivos órfãos.

 Depois de criar o otimizador de tabela, ele executará a exclusão de arquivos órfãos periodicamente (uma vez por dia, se estiver habilitado). Você pode verificar as execuções usando a API `list-table-optimizer-runs`. O trabalho de exclusão de arquivos órfãos identificará e excluirá arquivos que não são rastreados nos metadados Iceberg da tabela.

------
#### [ API ]

Chame a operação [CreateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) para criar o otimizador de exclusão de arquivos órfãos de uma tabela específica.

------

# Atualizar o otimizador de exclusão de arquivos órfãos
<a name="update-orphan-file-deletion"></a>

 Você pode modificar a configuração do otimizador de exclusão de arquivos órfãos, como alterar o período de retenção de arquivos órfãos ou o perfil do IAM usado pelo otimizador usando o console do AWS Glue, a AWS CLI ou a operação `UpdateTableOptimizer`. 

------
#### [ Console de gerenciamento da AWS ]

**Para atualizar o otimizador de exclusão de arquivos órfãos**

1.  Escolha **catálogo de dados** e escolha **Tabelas**. Na lista de tabelas, escolha a tabela da qual você deseja atualizar a configuração do otimizador de exclusão de arquivos órfãos.

1. Na seção inferior da página de **Detalhes das tabelas**, escolha **Otimização de tabela** e, em seguida, **Editar**. 

1.  Na página **Editar otimização**, faça as alterações necessárias. 

1.  Escolha **Salvar**. 

------
#### [ AWS CLI ]

 Você pode usar a chamada `update-table-optimizer` para atualizar o otimizador de exclusão de arquivos órfãos no AWS Glue, você pode usar a chamada. Isso permite que você modifique a `OrphanFileDeletionConfiguration` no campo `icebergConfiguration` em que você pode especificar a atualização de `OrphanFileRetentionPeriodInDays` para definir o número de dias para reter arquivos órfãos, para especificar a localização da tabela Iceberg da qual excluir arquivos órfãos. 

```
aws glue update-table-optimizer \
 --catalog-id 123456789012 \
 --database-name iceberg_db \
 --table-name Iceberg_table \
 --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role","enabled":true, "vpcConfiguration":{"glueConnectionName":"glue_connection_name"},"orphanFileDeletionConfiguration":{"icebergConfiguration":{"orphanFileRetentionPeriodInDays":5}}}' \
 --type orphan_file_deletion
```

------
#### [ API ]

Chame a operação [UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) para atualizar o otimizador de exclusão de arquivos órfãos de uma tabela.

------

 

# Desabilitar a exclusão de arquivos órfãos
<a name="disable-orphan-file-deletion"></a>

 Você pode desabilitar o otimizador de exclusão de arquivos órfãos para uma tabela Apache Iceberg específica usando o console do AWS Glue ou a AWS CLI. 

------
#### [ Console ]

**Para desabilitar a exclusão de arquivos órfãos**

1. Escolha **catálogo de dados** e escolha **Tabelas**. Na lista de tabelas, escolha a tabela Iceberg da qual você deseja desabilitar o otimizador para a exclusão de arquivos órfãos.

1. Na seção inferior da página **Detalhes da tabela**, escolha a guia **Otimização de tabela**.

1. Escolha **Ações** e, em seguida, escolha **Desativar**, **Exclusão de arquivo órfão**.

   Você também pode escolher **Desabilitar** em **Otimização** no menu **Ações**.

1.  Escolha **Desabilitar** na mensagem de confirmação. Você poderá habilitar novamente o otimizador de exclusão de arquivos órfãos mais tarde. 

    Após a confirmação, o otimizador de exclusão de arquivos órfãos é desabilitado e o status da exclusão de arquivos órfãos volta a ser `Not enabled`.

------
#### [ AWS CLI ]

No exemplo a seguir, substitua o ID da conta por um ID de conta da AWS válido. Substitua o nome do banco de dados e o nome da tabela pelo nome real da tabela do Iceberg e pelo nome do banco de dados. Substitua `roleArn` pelo nome do recurso da AWS (ARN) do perfil do IAM e o nome atual do perfil do IAM que tem as permissões necessárias para desabilitar o otimizador.

```
aws glue update-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role", "enabled":'false'}'\ 
  --type orphan_file_deletion
```

------
#### [ API ]

Chame a operação [UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) para desabilitar o otimizador de retenção de snapshots para uma tabela específica.

------

# Visualizar detalhes da otimização
<a name="view-optimization-status"></a>

Você pode visualizar o status de otimização das tabelas Apache Iceberg no console do AWS Glue, na AWS CLI ou usando as operações de API da AWS. 

------
#### [ Console ]

**Para visualizar o status de otimização das tabelas Iceberg (console)**
+ Você pode visualizar o status de otimização das tabelas Iceberg no console do AWS Glue escolhendo uma tabela Iceberg na lista **Tabelas** em **Catálogo de Dados**. Em **Otimização da tabela**. Escolha a opção **Exibir tudo**  
![\[Página de detalhes da tabela do Apache Iceberg com a opção Ativar compactação.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/table-list-compaction-status.png)

------
#### [  AWS CLI  ]

Você pode visualizar os detalhes da otimização usando a AWS CLI.

Nos exemplos a seguir, substitua o ID da conta por um ID de conta da AWS válido, o nome do banco de dados e o nome da tabela pelo nome real da tabela Iceberg. Para `type`, forneça um tipo de otimização. Os valores aceitáveis são `compaction`, `retention` e `orphan-file-deletion`.
+ **Para obter os detalhes da última execução de compactação para uma tabela**

  ```
  aws get-table-optimizer \
    --catalog-id 123456789012 \
    --database-name iceberg_db \
    --table-name iceberg_table \
    --type compaction
  ```
+ Use o exemplo a seguir para recuperar o histórico de um otimizador para uma tabela específica.

  ```
  aws list-table-optimizer-runs \
    --catalog-id 123456789012 \
    --database-name iceberg_db \
    --table-name iceberg_table \
    --type compaction
  ```
+ O exemplo a seguir mostra como recuperar a execução de otimização e os detalhes de configuração de vários otimizadores. Você pode especificar no máximo 20 otimizadores.

  ```
  aws glue batch-get-table-optimizer \
  --entries '[{"catalogId":"123456789012", "databaseName":"iceberg_db", "tableName":"iceberg_table", "type":"compaction"}]'
  ```

------
#### [ API ]
+ Use a operação `GetTableOptimizer` para recuperar os detalhes da última execução de um otimizador. 
+  Use a operação `ListTableOptimizerRuns` para recuperar o histórico de um determinado otimizador em uma tabela específica. Você pode especificar 20 otimizadores em uma única chamada de API. 
+ Use a operação [BatchGetTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-BatchGetTableOptimizer) para recuperar detalhes de configuração de vários otimizadores na conta. 

------

# Visualizar métricas do Amazon CloudWatch
<a name="view-optimization-metrics"></a>

 Depois de executar os otimizadores de tabela com êxito, o serviço cria métricas do Amazon CloudWatch sobre a performance do trabalho de otimização. Você pode acessar as **Métricas do CloudWatch** e escolher **Métricas**, **Todas as métricas**. Você pode filtrar métricas pelo namespace específico (por exemplo, do AWS Glue), nome da tabela ou nome do banco de dados.

 Para obter mais informações, consulte [Visualizar métricas disponíveis](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html) no *Guia do usuário do Amazon CloudWatch*. 

****Compactação****
+ Número de bytes compactados 
+ Número de arquivos compactados
+ Número de DPU alocado para o trabalho 
+ Duração do trabalho (horas) 

****Retenção de snapshots****
+ Número de arquivos de dados excluídos 
+ Número de arquivos de manifesto excluídos
+ Número de listas de manifestos excluídas 
+ Duração do trabalho (horas)

****Exclusão de arquivos órfãos****
+ Número de arquivos órfãos excluídos 
+ Duração do trabalho (horas) 

# Excluindo um otimizador
<a name="delete-optimizer"></a>

Você pode excluir um otimizador e os metadados associados à tabela usando a AWS CLI ou a operação de API da AWS.

Execute o comando AWS CLI a seguir para excluir o histórico de otimização de uma tabela. Você precisa especificar o otimizador `type` junto com o ID do catálogo, o nome do banco de dados e o nome da tabela. Os valores aceitáveis são: `compaction`, `retention` e `orphan_file_deletion`.

```
aws glue delete-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --type compaction
```

 Use a operação `DeleteTableOptimizer` para excluir um otimizador para uma tabela.

# Considerações e limitações
<a name="optimizer-notes"></a>

 Esta seção inclui considerações a serem feitas quando forem usados otimizadores de tabela no AWS Glue Data Catalog. 

## Durabilidade e correção
<a name="durability-correctness"></a>

**Locais da tabela do S3:**

Quando várias tabelas do AWS Glue Data Catalog compartilham o mesmo local do Amazon S3 e têm otimizadores habilitados, o otimizador de retenção de snapshots ou exclusão de arquivos órfãos de uma tabela pode excluir arquivos que ainda sejam referenciados pela outra tabela. É preciso que cada tabela com otimizadores habilitados tenha um local exclusivo do Amazon S3 que não seja compartilhado com nenhuma outra tabela, inclusive tabelas em bancos de dados diferentes.

**Expiração do ciclo de vida do S3:**

As regras de expiração do ciclo de vida do Amazon S3 que se aplicam aos locais de armazenamento de tabelas do Iceberg podem excluir arquivos de manifesto e de dados que ainda sejam referenciados por snapshots ativos. Se seu bucket tiver regras de expiração do ciclo de vida, é necessário que elas excluam o caminho de armazenamento da tabela do Iceberg.

## Formatos e limitações compatíveis para compactação gerenciada de dados
<a name="compaction-notes"></a>

A compactação de dados aceita uma variedade de tipos de dados e formatos de compactação para leitura e gravação de dados, incluindo a leitura de dados de tabelas criptografadas.

**Controle de simultaneidade:**

 O Apache Iceberg é compatível com um controle otimista de simultaneidade, permitindo que vários gravadores realizem operações simultaneamente. Os conflitos são detectados e resolvidos no momento da confirmação. Ao trabalhar com pipelines de streaming, defina as configurações de repetição apropriadas por meio das propriedades da tabela e das configurações de compactação para lidar com gravações simultâneas de forma eficaz. Para obter orientação detalhada, consulte o Blog de Big Data da AWS sobre como [gerenciar gravações simultâneas nas tabelas do Iceberg](https://aws.amazon.com/blogs/big-data/manage-concurrent-write-conflicts-in-apache-iceberg-on-the-aws-glue-data-catalog/). 

**Novas tentativas de compactação:**

 Quando as operações de compactação falham quatro vezes consecutivas, a otimização da tabela de catálogos do AWS Glue suspende automaticamente o otimizador para evitar o consumo desnecessário de recursos computacionais. Primeiro, investigue os logs e tente entender por que a compactação está falhando repetidamente. Para retomar a otimização da compactação, você pode reativar o otimizador por meio do console AWS Glue ou da API. 

 **A compactação de dados suporta:**
+ **Criptografia**: a compactação de dados oferece suporte somente à criptografia padrão do Amazon S3 (SSE-S3) e a criptografia do KMS no lado do servidor (SSE-KMS).
+ **Estratégias de compactação**: binpack, classificação e classificação em ordem Z.
+ Você pode executar a compactação a partir da conta em que o catálogo de dados reside quando o bucket do Amazon S3 que armazena os dados subjacentes estiver em outra conta. Para fazer isso, a função de compactação exige acesso ao bucket do Amazon S3.

 **Atualmente, a compactação de dados não oferece suporte a:** 
+ **Compactação em tabelas de contas cruzadas**: não é possível executar a compactação em tabelas de contas cruzadas.
+ **Compactação de tabelas entre regiões**: não é possível executar a compactação de tabelas entre regiões.
+ **Habilitando a compactação em links de recursos**
+ **Tabelas na classe de armazenamento Amazon S3 Express One Zone**: você não pode executar compactação nas tabelas do Iceberg do Amazon S3 Express One Zone. 
+ **A estratégia de compactação em ordem Z não é compatível com os seguintes tipos de dados :**
  + Decimal
  + TimestampWithoutZone

## Considerações sobre otimizadores de retenção de snapshots e exclusão de arquivos órfãos
<a name="retention-notes"></a>

A consideração a seguir se aplica ao otimizador de retenção de snapshots e exclusão de arquivos órfãos. 
+ Os processos de retenção de snapshots e exclusão de arquivos órfãos têm um limite máximo de exclusão de 1 milhão de arquivos por execução. Ao excluir snapshots expirados, se o número de arquivos elegíveis para exclusão ultrapassar 1 milhão, todos os arquivos restantes além desse limite continuarão existindo no armazenamento da tabela como arquivos órfãos. 
+ Os snapshots serão preservados pelo otimizador de retenção de snapshots somente quando ambos os critérios forem satisfeitos: o número mínimo de snapshots a serem mantidos e o período de retenção especificado.
+ O otimizador de retenção de snapshots exclui metadados de snapshots expirados do Apache Iceberg, evitando consultas de viagem no tempo para snapshots expirados e, opcionalmente, excluindo arquivos de dados associados.
+  O otimizador de exclusão de arquivos órfãos exclui dados órfãos e arquivos de metadados que não são mais referenciados pelos metadados do Iceberg se a hora de criação for anterior ao período de retenção da exclusão de arquivos órfãos a partir do momento da execução do otimizador.
+ O Apache Iceberg facilita o controle de versão por meio de ramificações e tags, que são denominadas ponteiros para estados específicos de snapshots. Cada ramificação e tag segue seu próprio ciclo de vida independente, regido por políticas de retenção definidas em seus respectivos níveis. Os otimizadores do AWS Glue Data Catalog levam em consideração essas políticas de ciclo de vida, garantindo a adesão às regras de retenção especificadas. As políticas de retenção em nível de ramificação e tag têm precedência sobre as configurações do otimizador. 

   Para obter mais informações, consulte a seção [Ramificações e marcações](https://iceberg.apache.org/docs/nightly/branching/) na documentação do Iceberg. 
+ Os otimizadores de retenção de snapshots e exclusão de arquivos órfãos excluirão os arquivos elegíveis para limpeza de acordo com os parâmetros configurados. Melhore seu controle sobre a exclusão de arquivos implementando políticas de controle de versão e ciclo de vida do S3 nos buckets apropriados.

   Para obter instruções detalhadas sobre como configurar o controle de versão e criar regras de ciclo de vida, consulte [https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html). 
+  Para a determinação correta dos arquivos órfãos, certifique-se de que o local da tabela fornecido e quaisquer caminhos secundários não se sobreponham ou contenham dados de outras tabelas ou fontes de dados. Caso haja sobreposição de caminhos, você corre o risco de perda de dados irrecuperáveis devido à exclusão não intencional de arquivos. 

## Depurar a exceção do OversizedAllocationException
<a name="debug-exception"></a>

Para resolver uma exceção `OversizedAllocationException`:
+ Reduza o tamanho do lote do leitor vetorizado e verifique. O tamanho padrão do lote é 5.000. Isso é controlado no `read.parquet.vectorization.batch-size`.
  + Se isso não funcionar mesmo após diversas variações, desative a vetorização. Isso é controlado no `read.parquet.vectorization.enabled`.

# Regiões compatíveis para otimizadores de tabela
<a name="regions-optimizers"></a>

Os recursos de otimização de tabelas (compactação, retenção de instantâneos e exclusão de arquivos órfãos) do AWS Glue Data Catalog estão disponíveis nas seguintes Regiões da AWS:
+ Ásia-Pacífico (Tóquio)
+ Ásia-Pacífico (Seul)
+ Ásia-Pacífico (Mumbai)
+ Ásia-Pacífico (Singapura)
+ Ásia-Pacífico (Sydney)
+ Ásia-Pacífico (Jacarta)
+ Canadá (Central)
+ Europa (Irlanda)
+ Europa (Londres)
+ Europa (Frankfurt)
+ Europa (Estocolmo)
+ Leste dos EUA (Norte da Virgínia)
+ Leste dos EUA (Ohio)
+ Oeste dos EUA (Oregon)
+ América do Sul (São Paulo)

# Otimizar a performance da consulta para tabelas Iceberg
<a name="iceberg-column-statistics"></a>

Apache Iceberg é um formato de tabela aberta de alta performance para grandes conjuntos de dados analíticos. O AWS Glue é compatível com o cálculo e a atualização do número de valores distintos (NDVs) para cada coluna nas tabelas Iceberg. Essas estatísticas podem facilitar uma melhor otimização de consultas, gerenciamento de dados e eficiência de performance para cientistas e engenheiros de dados que trabalham com conjuntos de dados em grande escala.

 O AWS Glue estima o número de valores distintos em cada coluna da tabela Iceberg e os armazena em arquivos [Puffin](https://iceberg.apache.org/puffin-spec/) no Amazon S3 associados aos snapshots da tabela Iceberg. Puffin é um formato de arquivo Iceberg projetado para armazenar metadados como índices, estatísticas e esboços. Armazenar esboços em arquivos Puffin vinculados a snapshots garante a consistência transacional e a atualização das estatísticas do NDV.

Você pode configurar para executar a tarefa de geração de estatísticas de coluna usando o console do AWS Glue ou a AWS CLI. Quando você inicia o processo, o AWS Glue inicia um trabalho do Spark em segundo plano e atualiza os metadados da tabela AWS Glue no Catálogo de Dados. Você pode visualizar as estatísticas da coluna usando o console do AWS Glue ou a AWS CLI ou chamando a operação da API [GetColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetColumnStatisticsForTable.html).

**nota**  
Se você estiver usando as permissões do AWS Lake Formation para controlar o acesso à tabela, o perfil assumido pela tarefa de estatísticas da coluna exigirá acesso total à tabela para gerar estatísticas.

**Topics**
+ [Pré-requisitos para gerar estatísticas de colunas](iceberg-column-stats-prereqs.md)
+ [Gerar estatísticas de colunas para tabelas Iceberg](iceberg-generate-column-stats.md)
+ [Consulte também](#see-also-iceberg-stats)

# Pré-requisitos para gerar estatísticas de colunas
<a name="iceberg-column-stats-prereqs"></a>

Para gerar ou atualizar as estatísticas de colunas para tabelas Iceberg, a tarefa de geração de estatísticas assume um perfil do AWS Identity and Access Management (IAM) em seu nome. Com base nas permissões concedidas ao perfil, a tarefa de geração de estatísticas de colunas pode ler os dados do datastore do Amazon S3.

Ao configurar a tarefa de geração de estatísticas de colunas, o AWS Glue permite que você crie um perfil que inclua a política `AWSGlueServiceRole` gerenciada pela AWS, além da política em linha necessária para a fonte de dados especificada. 

Se você especificar um perfil existente para a geração de estatísticas de colunas, certifique-se de que ele inclua a política `AWSGlueServiceRole` ou equivalente (ou uma versão dessa política com um escopo reduzido), além das políticas em linha necessárias.

Para obter mais informações sobre as permissões do necessárias, consulte [Pré-requisitos para gerar estatísticas de colunas](column-stats-prereqs.md). 

# Gerar estatísticas de colunas para tabelas Iceberg
<a name="iceberg-generate-column-stats"></a>

Siga estas etapas para configurar um cronograma para gerar estatísticas no Catálogo de Dados usando o console do AWS Glue ou a AWS CLI, ou execute a operação **StartColumnStatisticsTaskRun**.

**Para gerar estatísticas de colunas**

1. Faça login no console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/). 

1. Escolha **Tabelas** em Catálogo de Dados.

1. Escolha uma tabela Iceberg na lista. 

1. Escolha **Estatísticas de colunas**, **Gerar sob demanda** no menu **Ações**.

   Você também pode escolher o botão **Gerar estatísticas** na guia **Estatísticas de colunas** na seção inferior da página **Tabelas**.

1. Na página **Gerar estatísticas**, forneça os detalhes da geração de estatísticas. Siga as etapas de 6 a 11 na seção [Gerar estatísticas de colunas em uma programação](generate-column-stats.md) para configurar a geração de estatísticas para tabelas do Iceberg. 

   Você também pode optar por gerar estatísticas de colunas sob demanda seguindo as instruções na [Gerar estatísticas de colunas sob demanda](column-stats-on-demand.md).
**nota**  
A opção de amostragem não está disponível para tabelas Iceberg.

   O AWS Glue calcula o número de valores distintos de cada coluna da tabela Iceberg para um novo arquivo Puffin comprometido com o ID de snapshot especificado em sua localização no Amazon S3.

## Consulte também
<a name="see-also-iceberg-stats"></a>
+ [Visualizar estatísticas de colunas](view-column-stats.md)
+ [Visualizar as execuções de tarefas de estatísticas de colunas](view-stats-run.md)
+ [Interromper a execução da tarefa de estatísticas de coluna](stop-stats-run.md)
+ [Excluir estatísticas de colunas](delete-column-stats.md)

# Gerenciar o Catálogo de Dados
<a name="manage-catalog"></a>

 O AWS Glue Data Catalog é um repositório central de metadados que armazena metadados estruturais e operacionais para seus conjuntos de dados do Amazon S3. Gerenciar o Catálogo de Dados de forma eficaz é crucial para manter a qualidade, o desempenho, a segurança e a governança dos dados.

 Ao entender e aplicar essas práticas de gerenciamento de Catálogos de Dados, é possível garantir que seus metadados permaneçam precisos, eficientes, seguros e bem governados à medida que seu cenário de dados evolui. 

Esta seção aborda os seguintes aspectos do gerenciamento do Catálogo de Dados:
+ *Atualização do esquema e das partições da tabela* Conforme seus dados evoluírem, talvez seja necessário atualizar o esquema da tabela ou a estrutura de partições definida no Catálogo de Dados. Para obter mais informações sobre como fazer essas atualizações programaticamente usando o AWS Glue ETL, consulte [Atualizar esquemas e adicionar novas partições ao Catálogo de Dados em trabalhos do AWS Glue ETL](update-from-job.md).
+ *Gerenciar estatísticas de colunas*: estatísticas de colunas precisas ajudam a otimizar os planos de consulta e melhorar a performance. Para obter mais informações sobre como gerar, atualizar e gerenciar estatísticas de colunas, consulte [Otimizar a performance da consulta usando estatísticas de coluna](column-statistics.md). 
+  *Criptografar o Catálogo de Dados* Para proteger metadados confidenciais, é possível criptografar seu Catálogo de Dados usando o AWS Key Management Service (AWS KMS). Esta seção explica como habilitar e gerenciar a criptografia em seu Catálogo de Dados. 
+ *Proteger o Catálogo de Dados com o AWS Lake Formation* O Lake Formation fornece uma abordagem abrangente para a segurança e o controle de acesso do data lake. É possível usar o Lake Formation para proteger e controlar o acesso ao seu catálogo de dados e aos dados subjacentes. 

**Topics**
+ [Atualizar esquemas e adicionar novas partições ao Catálogo de Dados em trabalhos do AWS Glue ETL](update-from-job.md)
+ [Otimizar a performance da consulta usando estatísticas de coluna](column-statistics.md)
+ [Como criptografar seu Data Catalog](catalog-encryption.md)
+ [Proteger seu catálogo de dados usando o Lake Formation](secure-catalog.md)
+ [Trabalho com as visualizações do AWS Glue Data Catalog no AWS Glue](catalog-views.md)

# Atualizar esquemas e adicionar novas partições ao Catálogo de Dados em trabalhos do AWS Glue ETL
<a name="update-from-job"></a>

O trabalho de extração, transformação e carregamento (ETL) pode criar partições de tabelas no armazenamento de dados de destino. Os esquemas do conjunto de dados podem evoluir e divergir do esquema do esquema do AWS Glue Data Catalog ao longo do tempo. Os trabalhos de ETL do AWS Glue agora oferecem vários recursos que podem ser usados no script de ETL para atualizar os esquemas e as partições no Data Catalog. Esses recursos permitem visualizar os resultados do trabalho de ETL no Data Catalog sem precisar executar o crawler novamente.

## Novas partições
<a name="update-from-job-partitions"></a>

Se quiser visualizar as novas partições no AWS Glue Data Catalog, é possível realizar um dos seguintes procedimentos:
+ Quando o trabalho terminar, execute novamente o crawler e exiba as novas partições no console quando o crawler terminar.
+ Quando o trabalho terminar, exiba as novas partições no console imediatamente, sem precisar executar novamente o crawler. Você pode habilitar esse recurso adicionando algumas linhas de código ao seu script de ETL, como exibido nos exemplos a seguir. O código usa o argumento `enableUpdateCatalog` para indicar que o Data Catalog deve ser atualizado durante a execução do trabalho à medida que as novas partições são criadas.

**Método 1**  
Passe `enableUpdateCatalog` e `partitionKeys` em um argumento de opções.  

```
additionalOptions = {"enableUpdateCatalog": True}
additionalOptions["partitionKeys"] = ["region", "year", "month", "day"]


sink = glueContext.write_dynamic_frame_from_catalog(frame=last_transform, database=<target_db_name>,
                                                    table_name=<target_table_name>, transformation_ctx="write_sink",
                                                    additional_options=additionalOptions)
```

```
val options = JsonOptions(Map(
    "path" -> <S3_output_path>, 
    "partitionKeys" -> Seq("region", "year", "month", "day"), 
    "enableUpdateCatalog" -> true))
val sink = glueContext.getCatalogSink(
    database = <target_db_name>, 
    tableName = <target_table_name>, 
    additionalOptions = options)sink.writeDynamicFrame(df)
```

**Método 2**  
Passe `enableUpdateCatalog` e `partitionKeys` em `getSink()` e chame o objeto `setCatalogInfo()` no `DataSink`.  

```
sink = glueContext.getSink(
    connection_type="s3", 
    path="<S3_output_path>",
    enableUpdateCatalog=True,
    partitionKeys=["region", "year", "month", "day"])
sink.setFormat("json")
sink.setCatalogInfo(catalogDatabase=<target_db_name>, catalogTableName=<target_table_name>)
sink.writeFrame(last_transform)
```

```
val options = JsonOptions(
   Map("path" -> <S3_output_path>, 
       "partitionKeys" -> Seq("region", "year", "month", "day"), 
       "enableUpdateCatalog" -> true))
val sink = glueContext.getSink("s3", options).withFormat("json")
sink.setCatalogInfo(<target_db_name>, <target_table_name>)
sink.writeDynamicFrame(df)
```

Agora, é possível criar novas tabelas de catálogo, atualizar tabelas existentes com esquema modificado e adicionar novas partições de tabelas no Data Catalog usando um trabalho de ETL do AWS Glue, sem a necessidade de executar crawlers novamente.

## Atualizar esquema da tabela
<a name="update-from-job-updating-table-schema"></a>

Se você quiser substituir o esquema da tabela do Data Catalog, é possível realizar um dos seguintes procedimentos:
+ Quando o trabalho for concluído, execute o crawler novamente e verifique se está configurado para atualizar a definição da tabela também. Visualize as partições no console junto com atualizações do esquema, quando o crawler finalizar. Para obter mais informações, consulte [Configurar um crawler com a API](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-configure-changes-api).
+ Quando o trabalho for concluído, visualize o esquema modificado no console imediatamente, sem precisar executar o crawler novamente. Você pode habilitar esse recurso adicionando algumas linhas de código ao seu script de ETL, como exibido nos exemplos a seguir. O código usa `enableUpdateCatalog` definido como true e `updateBehavior` definido como `UPDATE_IN_DATABASE`, o que indica substituir o esquema e adicionar novas partições no Data Catalog durante a execução do trabalho.

------
#### [ Python ]

```
additionalOptions = {
    "enableUpdateCatalog": True, 
    "updateBehavior": "UPDATE_IN_DATABASE"}
additionalOptions["partitionKeys"] = ["partition_key0", "partition_key1"]

sink = glueContext.write_dynamic_frame_from_catalog(frame=last_transform, database=<dst_db_name>,
    table_name=<dst_tbl_name>, transformation_ctx="write_sink",
    additional_options=additionalOptions)
job.commit()
```

------
#### [ Scala ]

```
val options = JsonOptions(Map(
    "path" -> outputPath, 
    "partitionKeys" -> Seq("partition_0", "partition_1"), 
    "enableUpdateCatalog" -> true))
val sink = glueContext.getCatalogSink(database = nameSpace, tableName = tableName, additionalOptions = options)
sink.writeDynamicFrame(df)
```

------

Também é possível definir o valor de `updateBehavior` como `LOG` se quiser impedir que o esquema da tabela seja substituído, mas ainda quiser adicionar novas partições. O valor padrão de `updateBehavior` é `UPDATE_IN_DATABASE`, portanto, se você não defini-lo explicitamente, o esquema da tabela será substituído.

Se `enableUpdateCatalog` não estiver definido como true, independentemente da opção selecionada para `updateBehavior`, o trabalho de ETL não atualizará a tabela no Data Catalog. 

## Criar novas tabelas
<a name="update-from-job-creating-new-tables"></a>

Também é possível usar as mesmas opções para criar uma tabela no Data Catalog. Também é possível especificar o banco de dados e o nome da nova tabela usando `setCatalogInfo`.

------
#### [ Python ]

```
sink = glueContext.getSink(connection_type="s3", path="s3://path/to/data",
    enableUpdateCatalog=True, updateBehavior="UPDATE_IN_DATABASE",
    partitionKeys=["partition_key0", "partition_key1"])
sink.setFormat("<format>")
sink.setCatalogInfo(catalogDatabase=<dst_db_name>, catalogTableName=<dst_tbl_name>)
sink.writeFrame(last_transform)
```

------
#### [ Scala ]

```
val options = JsonOptions(Map(
    "path" -> outputPath, 
    "partitionKeys" -> Seq("<partition_1>", "<partition_2>"), 
    "enableUpdateCatalog" -> true, 
    "updateBehavior" -> "UPDATE_IN_DATABASE"))
val sink = glueContext.getSink(connectionType = "s3", connectionOptions = options).withFormat("<format>")
sink.setCatalogInfo(catalogDatabase = “<dst_db_name>”, catalogTableName = “<dst_tbl_name>”)
sink.writeDynamicFrame(df)
```

------

## Restrições
<a name="update-from-job-restrictions"></a>

Observe as seguintes restrições:
+ Somente os destinos do Amazon Simple Storage Service (Amazon S3) são suportados.
+ O atributo `enableUpdateCatalog` é suportado para tabelas governadas.
+ Somente os seguintes formatos são compatíveis: `json`, `csv`, `avro` e `parquet`.
+ Para criar ou atualizar tabelas com a classificação `parquet`, você deve utilizar o gravador de parquet do AWS Glue otimizado para DynamicFrames. Isso pode ser feito de uma das seguintes maneiras:
  + se você estiver atualizando uma tabela existente no catálogo com classificação `parquet`, a tabela deve ter a propriedade de tabela `"useGlueParquetWriter"` definida como `true` antes de você atualizá-la. Você pode definir essa propriedade por meio de APIs/SDK do AWS Glue, por meio do console ou por meio de uma instrução DDL do Athena.   
![\[Campo de edição de propriedade da tabela de catálogo no console do AWS Glue.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/edit-table-property.png)

    Depois que a propriedade da tabela do catálogo estiver definida, você poderá usar o seguinte trecho de código para atualizar a tabela do catálogo com os novos dados:

    ```
    glueContext.write_dynamic_frame.from_catalog(
        frame=frameToWrite,
        database="dbName",
        table_name="tableName",
        additional_options={
            "enableUpdateCatalog": True,
            "updateBehavior": "UPDATE_IN_DATABASE"
        }
    )
    ```
  + Se a tabela ainda não existir no catálogo, você pode utilizar o método `getSink()` em seu script com `connection_type="s3"` para adicionar a tabela e suas partições ao catálogo, além de gravar os dados no Amazon S3. Forneça as `partitionKeys` e a `compression` para seu fluxo de trabalho.

    ```
    s3sink = glueContext.getSink(
        path="s3://bucket/folder/",
        connection_type="s3",
        updateBehavior="UPDATE_IN_DATABASE",
        partitionKeys=[],
        compression="snappy",
        enableUpdateCatalog=True
    )
        
    s3sink.setCatalogInfo(
        catalogDatabase="dbName", catalogTableName="tableName"
    )
        
    s3sink.setFormat("parquet", useGlueParquetWriter=True)
    s3sink.writeFrame(frameToWrite)
    ```
  + O valor de formato `glueparquet` é um método herdado para habilitar o gravador parquet AWS Glue.
+ Quando `updateBehavior` for definido como `LOG`, as novas partições serão adicionadas somente se o esquema `DynamicFrame` for equivalente a, ou contiver, um subconjunto das colunas definidas no esquema da tabela do Data Catalog.
+ As atualizações de esquema não são aceitas para tabelas não particionadas (que não usam a opção “partitionKeys”).
+ As partitionKeys devem ser equivalentes e estar na mesma ordem, entre o parâmetro informado no script de ETL e as partitionKeys no esquema da tabela do Data Catalog.
+ Atualmente, esse recurso ainda não suporta atualização/criação de tabelas nas quais os esquemas de atualização são aninhados (por exemplo, matrizes dentro de estruturas).

Para obter mais informações, consulte [Programar scripts do Spark](aws-glue-programming.md).

# Trabalhar com conexões MongoDB em trabalhos de ETL
<a name="integrate-with-mongo-db"></a>

Você pode criar uma conexão para MongoDB e, em seguida, usar essa conexão em seu trabalho do AWS Glue. Para obter mais informações, consulte [Conexões do MongoDB](aws-glue-programming-etl-connect-mongodb-home.md) no guia de programação do AWS Glue. O `url`, `username` e `password` da conexão são armazenados na conexão do MongoDB. Outras opções podem ser especificadas em seu script de trabalho de ETL usando o parâmetro `additionalOptions` do `glueContext.getCatalogSource`. As outras opções podem incluir:
+ `database`: (obrigatório) o banco de dados MongoDB do qual fazer a leitura.
+ `collection`: (obrigatório) a coleção do MongoDB da qual fazer a leitura.

Ao colocar as informações de `database` e `collection` dentro do script de trabalho de ETL, você pode usar a mesma conexão em vários trabalhos.

1. Criar uma conexão do AWS Glue Data Catalog para a fonte de dados do MongoDB. Consulte ["connectionType": "mongodb"](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-mongodb) para uma descrição dos parâmetros de conexão. É possível criar a conexão ao utilizar o console, as APIs ou a CLI.

1. Crie um banco de dados no AWS Glue Data Catalog para armazenar as definições de tabela para seus dados do MongoDB. Consulte [Criar bancos de dados](define-database.md) para obter mais informações.

1. Crie um crawler que rastreie os dados no MongoDB usando as informações na conexão para se conectar ao MongoDB. O crawler cria as tabelas no AWS Glue Data Catalog que descrevem as tabelas no banco de dados MongoDB que você usa em seu trabalho. Consulte [Usar crawlers para preencher o catálogo de dados](add-crawler.md) para obter mais informações.

1. Crie um trabalho com um script personalizado. É possível criar o trabalho usando o console, as APIs ou a CLI. Para obter mais informações, consulte [Adicionar trabalhos no AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-job.html).

1. Escolha os destinos de dados para o seu trabalho. As tabelas que representam o destino dos dados podem ser definidas no Data Catalog, ou seu trabalho pode criar as tabelas de destino quando for executado. Você escolhe um local de destino ao criar o trabalho. Se o destino exigir uma conexão, ela também será referenciada no seu trabalho. Se o trabalho precisar de vários destinos de dados, você poderá adicioná-los posteriormente editando o script.

1. Personalize o ambiente de processamento de trabalhos informando os argumentos para seu trabalho e o script gerado. 

   A seguir, encontra-se um exemplo de como criar um `DynamicFrame` do banco de dados MongoDB com base na estrutura da tabela definida no Data Catalog. O código usa `additionalOptions` para fornecer as informações adicionais sobre a origem dos dados:

------
#### [  Scala  ]

   ```
   val resultFrame: DynamicFrame = glueContext.getCatalogSource(
           database = catalogDB, 
           tableName = catalogTable, 
           additionalOptions = JsonOptions(Map("database" -> DATABASE_NAME, 
                   "collection" -> COLLECTION_NAME))
         ).getDynamicFrame()
   ```

------
#### [  Python  ]

   ```
   glue_context.create_dynamic_frame_from_catalog(
           database = catalogDB,
           table_name = catalogTable,
           additional_options = {"database":"database_name", 
               "collection":"collection_name"})
   ```

------

1. Execute o trabalho, sob demanda ou por meio de um acionador.

# Otimizar a performance da consulta usando estatísticas de coluna
<a name="column-statistics"></a>

Você pode calcular estatísticas em nível de coluna para tabelas do AWS Glue Data Catalog em formatos de dados como Parquet, ORC, JSON, ION, CSV e XML sem precisar configurar pipelines de dados adicionais. As estatísticas de colunas ajudam você a entender os perfis de dados obtendo insights sobre os valores em uma coluna. 

O Catálogo de Dados possibilita a geração de estatísticas para valores de colunas, como valor mínimo, valor máximo, total de valores nulos, total de valores distintos, comprimento médio dos valores e ocorrências totais de valores reais. Os serviços analíticos da AWS, como o Amazon Redshift e o Amazon Athena, podem usar essas estatísticas de colunas para gerar planos de execução de consultas e escolher o plano ideal para melhorar a performance da consulta.

Há três cenários para a geração de estatísticas de colunas: 

 **Auto**   
O AWS Glue oferece suporte à geração automática de estatísticas de colunas no nível do catálogo para que ele possa gerar automaticamente estatísticas para novas tabelas no AWS Glue Data Catalog. 

**Programado**  
O AWS Glue oferece suporte à programação da geração de estatísticas de coluna para que ela possa ser executada automaticamente em uma programação recorrente.   
Com o cálculo de estatísticas programado, a tarefa de estatísticas de coluna atualiza as estatísticas gerais em nível de tabela, como mínimos, máximos e média, com as novas estatísticas, fornecendo aos mecanismos de consulta estatísticas precisas e atualizadas para otimizar a execução de consultas. 

**Sob demanda**  
Use essa opção para gerar estatísticas de coluna sob demanda sempre que necessário. Isso é útil para análises ad hoc ou quando as estatísticas precisam ser calculadas imediatamente. 

É possível configurar para executar a tarefa de geração de estatísticas de coluna usando o console do AWS Glue, a AWS CLI ou a API do AWS Glue. Quando você inicia o processo, o AWS Glue inicia um trabalho do Spark em segundo plano e atualiza os metadados da tabela AWS Glue no Catálogo de Dados. Você pode visualizar as estatísticas da coluna usando o console do AWS Glue ou a AWS CLI ou chamando a operação da API [GetColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetColumnStatisticsForTable.html).

**nota**  
Se você estiver usando as permissões do Lake Formation para controlar o acesso à tabela, o perfil assumido pela tarefa de estatísticas da coluna exigirá acesso total à tabela para gerar estatísticas.

 O vídeo a seguir demonstra como aprimorar a performance da consulta usando estatísticas de colunas. 

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


**Topics**
+ [Pré-requisitos para gerar estatísticas de colunas](column-stats-prereqs.md)
+ [Geração automática de estatísticas de colunas](auto-column-stats-generation.md)
+ [Gerar estatísticas de colunas em uma programação](generate-column-stats.md)
+ [Gerar estatísticas de colunas sob demanda](column-stats-on-demand.md)
+ [Visualizar estatísticas de colunas](view-column-stats.md)
+ [Visualizar as execuções de tarefas de estatísticas de colunas](view-stats-run.md)
+ [Interromper a execução da tarefa de estatísticas de coluna](stop-stats-run.md)
+ [Excluir estatísticas de colunas](delete-column-stats.md)
+ [Considerações e limitações](column-stats-notes.md)

# Pré-requisitos para gerar estatísticas de colunas
<a name="column-stats-prereqs"></a>

Para gerar ou atualizar as estatísticas de colunas, a tarefa de geração de estatísticas assume um perfil do AWS Identity and Access Management (IAM) em seu nome. Com base nas permissões concedidas ao perfil, a tarefa de geração de estatísticas de colunas pode ler os dados do datastore do Amazon S3.

Ao configurar a tarefa de geração de estatísticas de colunas, o AWS Glue permite que você crie um perfil que inclua a política `AWSGlueServiceRole` gerenciada pela AWS, além da política em linha necessária para a fonte de dados especificada. 

Se você especificar um perfil existente para a geração de estatísticas de colunas, certifique-se de que ele inclua a política `AWSGlueServiceRole` ou equivalente (ou uma versão dessa política com um escopo reduzido), além das políticas em linha necessárias. Siga estas etapas para criar um novo perfil do IAM:

**nota**  
 Para gerar estatísticas para tabelas gerenciadas pelo Lake Formation, o perfil do IAM usado para gerar estatísticas exige acesso total à tabela. 

Ao configurar a tarefa de geração de estatísticas de colunas, o AWS Glue permite que você crie um perfil que inclua a política `AWSGlueServiceRole` gerenciada pela AWS, além da política em linha necessária para a fonte de dados especificada. Você também pode criar um perfil e anexar as permissões listadas na política abaixo, e adicionar esse perfil à tarefa de geração de estatísticas de colunas.

**Para criar um perfil do IAM para gerar estatísticas de coluna**

1. Para criar um perfil do IAM, consulte [Criar um perfil do IAM para o AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/create-an-iam-role.html).

1. Para atualizar um perfil existente, no console do IAM, acesse o perfil do IAM que está sendo usado pelo processo de geração de estatísticas de colunas.

1. Na guia **Adicionar permissões**, escolha **Anexar políticas**. Na janela recém-aberta do navegador, escolha política gerenciada pela AWS `AWSGlueServiceRole`.

1. Você também precisa incluir permissão para ler dados da localização de dados do Amazon S3.

   Na seção **Adicionar permissões**, escolha **Criar política**. Na janela recém-aberta do navegador, crie uma nova política para usar com seu perfil.

1. Na página **Criar política**, escolha a guia **JSON**. Copie o seguinte código `JSON` no editor.
**nota**  
Nas políticas a seguir, substitua o ID da conta por uma Conta da AWS válida e substitua `region` pela região da tabela e `bucket-name` pelo nome do bucket do Amazon S3.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "S3BucketAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject"
               ],
               "Resource": [
               	"arn:aws:s3:::amzn-s3-demo-bucket/*",
   							"arn:aws:s3:::amzn-s3-demo-bucket"
               ]
           }
        ]
   }
   ```

------

1. (Opcional) Se você estiver usando as permissões do Lake Formation para fornecer acesso aos seus dados, o perfil do IAM exigirá permissões de `lakeformation:GetDataAccess`.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "LakeFormationDataAccess",
         "Effect": "Allow",
         "Action": "lakeformation:GetDataAccess",
         "Resource": [
           "*"
         ]
       }
     ]
   }
   ```

------

    Se a localização dos dados do Amazon S3 estiver registrada no Lake Formation e o perfil do IAM assumido pela tarefa de geração de estatísticas de colunas não tiver permissões de grupo `IAM_ALLOWED_PRINCIPALS` concedidas na tabela, o perfil exigirá as permissões `ALTER` e `DESCRIBE` do Lake Formation na tabela. O perfil usado para registrar o bucket do Amazon S3 requer as permissões `INSERT` e `DELETE` do Lake Formation na tabela. 

   Se a localização dos dados do Amazon S3 não estiver registrada no Lake Formation e o perfil do IAM não tiver permissões de grupo `IAM_ALLOWED_PRINCIPALS` concedidas na tabela, o perfil exigirá as permissões `ALTER`, `DESCRIBE`, `INSERT` e `DELETE` do Lake Formation na tabela. 

1. Se você ativou a opção `Automatic statistics generation` em nível de catálogo, o perfil do IAM deve ter a permissão `glue:UpdateCatalog` ou a permissão `ALTER CATALOG` do Lake Formation no Catálogo de Dados padrão. Você pode usar a operação `GetCatalog` para verificar as propriedades do catálogo. 

1. (Opcional) A tarefa de geração de estatísticas de colunas que grava Amazon CloudWatch Logs criptografados requer as permissões a seguir na política de chave.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "CWLogsKmsPermissions",
         "Effect": "Allow",
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents",
           "logs:AssociateKmsKey"
         ],
         "Resource": [
           "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue:*"
         ]
       },
       {
         "Sid": "KmsPermissions",
         "Effect": "Allow",
         "Action": [
           "kms:GenerateDataKey",
           "kms:Decrypt",
           "kms:Encrypt"
         ],
         "Resource": [
           "arn:aws:kms:us-east-1:111122223333:key/arn of key used for ETL cloudwatch encryption"
         ],
         "Condition": {
           "StringEquals": {
             "kms:ViaService": [
               "glue.us-east-1.amazonaws.com"
             ]
           }
         }
       }
     ]
   }
   ```

------

1. O perfil que você usa para executar as estatísticas de colunas deve ter a permissão `iam:PassRole`.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "iam:PassRole"
         ],
         "Resource": [
           "arn:aws:iam::111122223333:role/columnstats-role-name"
         ]
       }
     ]
   }
   ```

------

1. Ao criar um perfil do IAM para gerar estatísticas de colunas, esse perfil também deve ter a política de confiança a seguir que permite que o serviço assuma o perfil. 

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

****  

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

------

# Geração automática de estatísticas de colunas
<a name="auto-column-stats-generation"></a>

A geração automática de estatísticas de colunas permite a você agendar e calcular automaticamente estatísticas em novas tabelas no AWS Glue Data Catalog. Quando a geração automática de estatísticas é habilitada, o Catálogo de Dados descobre novas tabelas com formatos de dados específicos, como Parquet, JSON, CSV, XML, ORC, ION e Apache Iceberg, junto com seus caminhos de bucket individuais. Com uma configuração única de catálogo, o Catálogo de Dados gera estatísticas para essas tabelas.

 Os administradores do Data Lake podem configurar a geração de estatísticas selecionando o catálogo padrão no console do Lake Formation e habilitando as estatísticas da tabela usando a opção `Optimization configuration`. Quando você cria novas tabelas ou atualiza tabelas existentes no Catálogo de Dados, o Catálogo de Dados coleta semanalmente o número de valores distintos (NDVs) das tabelas do Apache Iceberg e estatísticas adicionais, como o número de nulos, tamanho máximo, mínimo e médio de outros formatos de arquivo compatíveis. 

Se você configurou a geração de estatísticas no nível da tabela ou se já excluiu as configurações de geração de estatísticas de uma tabela, essas configurações específicas da tabela têm precedência sobre as configurações padrão do catálogo para a geração automática de estatísticas de coluna.

 A tarefa de geração automática de estatísticas analisa 50% dos registros nas tabelas para calcular estatísticas. A geração automática de estatísticas de colunas garante que o Catálogo de dados mantenha as métricas semanais que podem ser usadas por mecanismos de consulta como Amazon Athena e Amazon Redshift Spectrum para melhorar a performance das consultas e reduzir custos potenciais. Isso permite programar a geração de estatísticas usando APIs ou o console do AWS Glue, fornecendo um processo automatizado sem intervenção manual. 

**Topics**
+ [Habilitar a geração automática de estatísticas em nível de catálogo](enable-auto-column-stats-generation.md)
+ [Visualizar configurações em nível de tabela automatizadas](view-auto-column-stats-settings.md)
+ [Desabilitar a geração de estatísticas de colunas em nível de catálogo](disable-auto-column-stats-generation.md)

# Habilitar a geração automática de estatísticas em nível de catálogo
<a name="enable-auto-column-stats-generation"></a>

É possível habilitar a geração automática de estatísticas de colunas para todas as novas tabelas do Apache Iceberg e tabelas em formatos não OTF (Parquet, JSON, CSV, XML, ORC, ION) no Catálogo de Dados. Depois de criar a tabela, você também poderá atualizar explicitamente as configurações de estatísticas de coluna manualmente.

 Para atualizar as configurações do Catálogo de Dados para habilitar o nível do catálogo, o perfil do IAM usado deve ter a permissão `glue:UpdateCatalog` ou a permissão `ALTER CATALOG` do AWS Lake Formation no catálogo raiz. É possível usar a API `GetCatalog` para verificar as propriedades do catálogo. 

------
#### [ Console de gerenciamento da AWS ]

**Para habilitar a geração automática de estatísticas de colunas no nível da conta**

1. Abra o console do Lake Formation em [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/).

1. No painel de navegação à esquerda, escolha **Catálogos)**.

1. Na página **Resumo do catálogo**, escolha **Editar** em **Configuração da otimização**.   
![\[A captura de tela mostra as opções disponíveis para gerar estatísticas da coluna.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/edit-column-stats-auto.png)

1. Na página **Configuração da otimização de tabelas**, escolha a opção **Habilitar geração automática de estatísticas para as tabelas do catálogo**.  
![\[A captura de tela mostra as opções disponíveis para gerar estatísticas da coluna.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/edit-optimization-option.jpg)

1. Escolha um perfil do IAM existente ou crie um novo com as permissões necessárias para executar a tarefa de estatísticas de coluna.

1. Selecione **Enviar**.

------
#### [ AWS CLI ]

Você também pode habilitar a coleta de estatísticas em nível de catálogo via AWS CLI. Para configurar a coleta de estatísticas em nível de tabela usando a AWS CLI, execute o seguinte comando:

```
aws glue update-catalog --cli-input-json '{
    "name": "123456789012",
    "catalogInput": {
        "description": "Updating root catalog with role arn",
        "catalogProperties": {
            "customProperties": {
                "ColumnStatistics.RoleArn": "arn:aws:iam::"123456789012":role/service-role/AWSGlueServiceRole",
                "ColumnStatistics.Enabled": "true"
            }
        }
    }
}'
```

 O comando acima chama a operação `UpdateCatalog` do AWS Glue, que usa uma estrutura `CatalogProperties` com os seguintes pares de chave-valor para geração de estatísticas em nível de catálogo: 
+ ColumnStatistics.RoleArn: ARN do perfil do IAM a ser usado para todas as tarefas acionadas para geração de estatísticas em nível de catálogo
+ ColumnStatistics.Enabled: booleano que indica se as configurações em nível de catálogo estão habilitadas ou desabilitadas

------

# Visualizar configurações em nível de tabela automatizadas
<a name="view-auto-column-stats-settings"></a>

 Quando a coleta de estatísticas em nível de catálogo está habilitada, sempre que uma tabela do Apache Hive ou uma tabela do Apache Iceberg é criada ou atualizada por meio das APIs `CreateTable` ou `UpdateTable` via Console de gerenciamento da AWS, SDK ou Crawler do AWS Glue, uma configuração em nível de tabela equivalente é criada para essa tabela. 

 As tabelas com a geração automática de estatísticas habilitada devem seguir uma das seguintes propriedades:
+ Usar um `InputSerdeLibrary` que comece com org.apache.hadoop e em que `TableType` seja igual a `EXTERNAL_TABLE`
+ Usar um `InputSerdeLibrary` que comece com `com.amazon.ion` e em que `TableType` seja igual a `EXTERNAL_TABLE`
+ Conter table\$1type: "ICEBERG" em sua estrutura de parâmetros. 

 Após criar ou atualizar uma tabela, você poderá verificar os detalhes da tabela para confirmar a geração de estatísticas. `Statistics generation summary` mostra a propriedade `Schedule` definida como `AUTO` e o valor de `Statistics configuration` é `Inherited from catalog`. Qualquer configuração de tabela com a configuração a seguir seria acionada automaticamente pelo Glue internamente. 

![\[Uma imagem de uma tabela do Hive com coleta de estatísticas em nível de catálogo foi aplicada e as estatísticas foram coletadas.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/auto-stats-summary.png)


# Desabilitar a geração de estatísticas de colunas em nível de catálogo
<a name="disable-auto-column-stats-generation"></a>

 É possível desabilitar a geração automática de estatísticas de colunas para novas tabelas usando o console do AWS Lake Formation, a API `glue:UpdateCatalogSettings` ou a API `glue:DeleteColumnStatisticsTaskSettings`. 

**Para desabilitar a geração automática de estatísticas de colunas no nível da conta**

1. Abra o console do Lake Formation em [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/).

1. No painel de navegação à esquerda, escolha **Catálogos)**.

1. Na página **Resumo do catálogo**, escolha **Editar** em **Configuração da otimização**. 

1. Na página **Configuração da otimização de tabelas**, desmarque a opção **Habilitar geração automática de estatísticas para as tabelas do catálogo**.

1. Selecione **Enviar**.

# Gerar estatísticas de colunas em uma programação
<a name="generate-column-stats"></a>

Siga estas etapas para configurar um cronograma para gerar estatísticas no AWS Glue Data Catalog usando o console do , o AWS Glue, a AWS CLI ou a operação [StartColumnStatisticsTaskRun](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-CreateColumnStatisticsTaskSettings).

------
#### [ Console ]

**Para gerar estatísticas de colunas usando o console**

1. Faça login no console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/). 

1. Escolha uma tabela do Catálogo de Dados.

1. Escolha uma tabela na lista. 

1. Escolha a guia **Estatísticas de colunas** na seção inferior da página **Tabelas**.

1. Você também pode escolher **Gerar em uma programação** em **Estatísticas de colunas** em **Ações**.

1. Na página **Gerar estatísticas em uma programação**, configure uma programação recorrente para executar a tarefa de estatísticas de colunas escolhendo a frequência e a hora de início. É possível definir a frequência como a cada hora, diária ou semanal ou ainda definir uma expressão cron para especificar a programação.

   Uma expressão cron é uma string que representa um padrão de programação que consiste em 6 campos separados por espaços: \$1 \$1 \$1 \$1 \$1 <minuto> <hora> <dia do mês> <mês> <dia da semana> <ano> Por exemplo, para executar uma tarefa todos os dias à meia-noite, a expressão cron seria: 0 0 \$1 \$1 ? \$1

   Para obter mais informações, consulte [Expressões cron](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html#CronExpressions).  
![\[A captura de tela mostra as opções disponíveis para gerar estatísticas da coluna.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/generate-column-stats-schedule.png)

1. Em seguida, escolha a opção de coluna para gerar estatísticas.
   + **Todas as colunas**: escolha essa opção para gerar estatísticas para todas as colunas na tabela.
   + **Colunas selecionadas**: escolha essa opção para gerar estatísticas para colunas específicas. É possível selecionar as colunas na lista suspensa.

1. Crie um perfil do IAM ou escolha um existente que tenha permissões para gerar estatísticas. O AWS Glue assume esse perfil para gerar estatísticas de colunas.

   Uma abordagem mais rápida é permitir que o console do AWS Glue crie um perfil para você. O perfil por ele criado destina-se especificamente à geração de estatísticas de colunas e inclui a política `AWSGlueServiceRole` gerenciada pela AWS e mais a política em linha necessária para a fonte de dados especificada. 

   Se você especificar um perfil existente para a geração de estatísticas de colunas, certifique-se de que ele inclua a política `AWSGlueServiceRole` ou equivalente (ou uma versão dessa política com um escopo reduzido), além das políticas em linha necessárias. 

1. (Opcional) Em seguida, escolha uma configuração de segurança para ativar a criptografia em repouso para logs.

1. (Opcional) É possível escolher um tamanho de amostra indicando somente uma porcentagem específica de linhas da tabela para gerar estatísticas. O padrão é todas as linhas. Use as setas para cima e para baixo para aumentar ou diminuir o valor percentual. 

   Recomendamos incluir todas as linhas na tabela para calcular estatísticas precisas. Use as linhas de exemplo para gerar estatísticas de coluna somente quando valores aproximados forem aceitáveis.

1. Escolha **Gerar estatísticas** para executar a tarefa de geração de estatísticas de colunas.

------
#### [ AWS CLI ]

O exemplo de AWS CLI a seguir pode ser usado para criar uma programação de geração de estatísticas de colunas. Os parâmetros obrigatórios são database-name, table-name e role, enquanto os parâmetros opcionais são schedule, column-name-list, catalog-id, sample-size e security-configuration.

```
aws glue create-column-statistics-task-settings \ 
 --database-name 'database_name' \ 
 --table-name table_name \ 
 --role 'arn:aws:iam::123456789012:role/stats-role' \ 
 --schedule 'cron(0 0-5 14 * * ?)' \ 
 --column-name-list 'col-1' \  
 --catalog-id '123456789012' \ 
 --sample-size '10.0 ' \
 --security-configuration 'test-security'
```

Também é possível pode gerar estatísticas de colunas chamando a operação [StartColumnStatisticsTaskRun](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-StartColumnStatisticsTaskRun).

------

# Gerenciar a programação para geração de estatísticas de colunas
<a name="manage-column-stats-schedule"></a>

Você pode gerenciar as operações de programação, como atualizar, iniciar, interromper e excluir programações para a geração de estatísticas de colunas no AWS Glue. É possível usar o console do AWS Glue, a AWS CLI ou [operações de API de estatísticas de colunas do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html) para realizar essas tarefas.

**Topics**
+ [Atualizar a programação da geração de estatísticas de colunas](#update-column-stats-shedule)
+ [Interromper a programação de geração de estatísticas de colunas](#stop-column-stats-schedule)
+ [Retomar a programação de geração de estatísticas de colunas](#resume-column-stats-schedule)
+ [Excluir programação de geração de estatísticas de colunas](#delete-column-stats-schedule)

## Atualizar a programação da geração de estatísticas de colunas
<a name="update-column-stats-shedule"></a>

É possível atualizar a programação para acionar a tarefa de geração de estatísticas de colunas após ela ser criada. É possível usar o console do AWS Glue ou a AWS CLI ou executar a operação [UpdateColumnStatisticsTaskSettings](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-UpdateColumnStatisticsTaskSettings) para atualizar a programação para uma tabela. É possível modificar os parâmetros de uma programação existente, como o tipo de programação (sob demanda ou programada) e outros parâmetros opcionais. 

------
#### [ Console de gerenciamento da AWS ]

**Para atualizar as configurações para uma tarefa de estatísticas de colunas**

1. Faça login no console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Escolha a tabela que você deseja atualizar na lista de tabelas.

1. Na seção inferior da página de detalhes da tabela, escolha **Estatísticas de colunas**. 

1. Em **Ações**, escolha **Editar** para atualizar a programação.

1. Faça as alterações desejadas na programação e escolha **Salvar**.

------
#### [ AWS CLI ]

 Se você não estiver usando o recurso de geração de estatísticas do AWS Glue no console, poderá atualizar manualmente a programação usando o comando `update-column-statistics-task-settings`. O exemplo a seguir mostra como excluir estatísticas de colunas usando a AWS CLI. 

```
aws glue update-column-statistics-task-settings \ 
 --database-name 'database_name' \ 
 --table-name 'table_name' \ 
 --role arn:aws:iam::123456789012:role/stats_role \ 
 --schedule 'cron(0 0-5 16 * * ?)' \ 
 --column-name-list 'col-1' \
 --sample-size '20.0' \  
 --catalog-id '123456789012'\
 --security-configuration 'test-security'
```

------

## Interromper a programação de geração de estatísticas de colunas
<a name="stop-column-stats-schedule"></a>

 Se não precisar mais das estatísticas incrementais, você poderá interromper a geração agendada para economizar recursos e custos. Pausar a programação não afeta as estatísticas geradas anteriormente. Você pode retomar a programação conforme sua conveniência. 

------
#### [ Console de gerenciamento da AWS ]

**Para interromper a programação de uma tarefa de geração de estatísticas de colunas**

1. No console do AWS Glue, escolha **Tabelas** em Catálogo de Dados.

1. Selecione uma tabela com estatísticas de colunas.

1. Na página **Detalhes da tabela**, escolha **Estatísticas da coluna**.

1. Em **Ações**, escolha **Geração programada**, **Pausar**.

1. Escolha **Pausar** para confirmar.

------
#### [ AWS CLI ]

Para interromper a programação de execução de uma tarefa de estatísticas de colunas usando a AWS CLI, é possível usar o seguinte comando: 

```
aws glue stop-column-statistics-task-run-schedule \
 --database-name ''database_name' \
 --table-name 'table_name'
```

Substitua `database_name` e `table_name` pelos nomes reais do banco de dados e da tabela para os quais você deseja interromper a programação de execução da tarefa de estatísticas de colunas.

------

## Retomar a programação de geração de estatísticas de colunas
<a name="resume-column-stats-schedule"></a>

 Se você pausou a programação de geração de estatísticas, o AWS Glue permite retomá-lo conforme sua conveniência. Você pode retomar a programação usando o console do AWS Glue, a AWS CLI ou a operação [StartColumnStatisticsTaskRunSchedule](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-StartColumnStatisticsTaskRunSchedule). 

------
#### [ Console de gerenciamento da AWS ]

**Para retomar a programação de geração de estatísticas de colunas**

1. No console do AWS Glue, escolha **Tabelas** em Catálogo de Dados.

1. Selecione uma tabela com estatísticas de colunas.

1. Na página **Detalhes da tabela**, escolha **Estatísticas da coluna**.

1. Em **Ações**, escolha **Geração programada** e escolha **Retomar**.

1. Escolha **Retomar** para confirmar.

------
#### [ AWS CLI ]

Substitua `database_name` e `table_name` pelos nomes reais do banco de dados e da tabela para os quais você deseja interromper a programação de execução da tarefa de estatísticas de colunas.

```
aws glue start-column-statistics-task-run-schedule \
 --database-name 'database_name' \
 --table-name 'table_name'
```

------

## Excluir programação de geração de estatísticas de colunas
<a name="delete-column-stats-schedule"></a>

 Embora a manutenção de estatísticas atualizadas seja geralmente recomendada para otimizar a performance da consulta, há casos de uso específicos em que a remoção da programação de geração automática pode ser benéfica.
+ Se os dados permanecerem relativamente estáticos, as estatísticas de colunas existentes poderão permanecer precisas por um longo período, reduzindo a necessidade de atualizações frequentes. Excluir a programação pode evitar o consumo desnecessário de recursos e a sobrecarga associada à regeneração de estatísticas em dados inalterados.
+ Quando o controle manual sobre a geração de estatísticas é preferido. Ao excluir a programação automática, os administradores podem atualizar seletivamente as estatísticas de colunas em intervalos específicos ou após alterações significativas nos dados, alinhando o processo com suas estratégias de manutenção e necessidades de alocação de recursos. 

------
#### [ Console de gerenciamento da AWS ]

**Para excluir a programação de geração de estatísticas de colunas**

1. No console do AWS Glue, escolha **Tabelas** em Catálogo de Dados.

1. Selecione uma tabela com estatísticas de colunas.

1. Na página **Detalhes da tabela**, escolha **Estatísticas da coluna**.

1. Em **Ações**, escolha **Geração programada**, **Excluir**.

1. Escolha **Excluir** para confirmar.

------
#### [ AWS CLI ]

Substitua `database_name` e `table_name` pelos nomes reais do banco de dados e da tabela para os quais você deseja interromper a programação de execução da tarefa de estatísticas de colunas.

Você pode excluir estatísticas de colunas usando a operação da API [DeleteColumnStatisticsTaskSettings](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-DeleteColumnStatisticsTaskSettings) ou a AWS CLI. Os exemplos a seguir mostram como excluir a programação de geração de estatísticas de colunas usando a AWS Command Line Interface (AWS CLI).

```
aws glue delete-column-statistics-task-settings \
    --database-name 'database_name' \
    --table-name 'table_name'
```

------

# Gerar estatísticas de colunas sob demanda
<a name="column-stats-on-demand"></a>

É possível executar a tarefa de estatísticas de coluna para tabelas do AWS Glue Data Catalog sob demanda, sem uma programação definida. Essa opção é útil para análises ad hoc ou quando as estatísticas precisam ser calculadas imediatamente.

Siga estas etapas para gerar estatísticas de colunas sob demanda para tabelas do Catálogo de Dados usando o console ou a AWS CLI do AWS Glue.

------
#### [ Console de gerenciamento da AWS ]

**Para gerar estatísticas de colunas usando o console**

1. Faça login no console do AWS Glue em [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/). 

1. Escolha uma tabela do Catálogo de Dados.

1.  Escolha uma tabela na lista. 

1. Escolha **Gerar estatísticas** no menu **Ações**.

   Você também pode escolher a opção **Gerar**, **Gerar sob demanda** na guia **Estatísticas de colunas** na seção inferior da página **Tabela**.

1. Siga as etapas de 7 a 11 em [Gerar estatísticas de colunas em uma programação](generate-column-stats.md) para gerar estatísticas de colunas para a tabela.

1. Na página **Gerar estatísticas**, especifique as seguintes opções:   
![\[A captura de tela mostra as opções disponíveis para gerar estatísticas da coluna.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/generate-column-stats.png)
   + **Todas as colunas**: escolha essa opção para gerar estatísticas para todas as colunas na tabela.
   + **Colunas selecionadas**: escolha essa opção para gerar estatísticas para colunas específicas. É possível selecionar as colunas na lista suspensa.
   + **Perfil do IAM**: escolha **Criar um novo perfil do IAM** com as políticas de permissão necessárias para executar a tarefa de geração de estatísticas de colunas. Escolha Exibir detalhes da permissão para revisar a declaração de política. Também é possível selecionar um perfil do IAM na lista. Para mais informações sobre as permissões necessárias, consulte [Pré-requisitos para gerar estatísticas de colunas](column-stats-prereqs.md).

     O AWS Glue assume as permissões do perfil que você especificou para gerar estatísticas. 

     Para obter mais informações sobre o fornecimento de perfis para o AWS Glue, consulte [Identity-based policies for AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies).
   + (Opcional) Em seguida, escolha uma configuração de segurança para ativar a criptografia em repouso para logs.
   + **Linhas de exemplo**: escolha somente uma porcentagem específica de linhas da tabela para gerar estatísticas. O padrão é todas as linhas. Use as setas para cima e para baixo para aumentar ou diminuir o valor percentual.
**nota**  
Recomendamos incluir todas as linhas na tabela para calcular estatísticas precisas. Use as linhas de exemplo para gerar estatísticas de coluna somente quando valores aproximados forem aceitáveis.

   Escolha **Gerar estatísticas** para executar a tarefa.

------
#### [ AWS CLI ]

Esse comando acionará a execução de uma tarefa de estatísticas de colunas para a tabela especificada. É necessário fornecer o nome do banco de dados, o nome da tabela, um perfil do IAM com permissões para gerar estatísticas e, opcionalmente, fornecer os nomes das colunas e uma porcentagem do tamanho da amostra para o cálculo das estatísticas.

```
aws glue start-column-statistics-task-run \ 
    --database-name 'database_name \ 
    --table-name 'table_name' \ 
    --role 'arn:aws:iam::123456789012:role/stats-role' \
    --column-name 'col1','col2'  \
    --sample-size 10.0
```

Esse comando iniciará uma tarefa para gerar estatísticas de coluna para a tabela especificada. 

------

## Atualizar estatísticas de colunas sob demanda
<a name="update-column-stats-on-demand"></a>

 Manter estatísticas de colunas atualizadas é crucial para que o otimizador de consultas gere planos de execução eficientes, garantindo uma melhor performance de consultas, menor consumo de recursos e melhor performance geral do sistema. Esse processo é particularmente importante após alterações significativas nos dados, como cargas em massa ou modificações extensivas que podem tornar as estatísticas existentes obsoletas. 

É necessário executar explicitamente a tarefa **Gerar estatísticas** no console do AWS Glue para atualizar as estatísticas da coluna. O Catálogo de Dados não atualiza as estatísticas automaticamente.

Se você não estiver usando o recurso de geração de estatísticas do AWS Glue no console, poderá atualizar manualmente as estatísticas da coluna usando a operação da API [UpdateColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateColumnStatisticsForTable.html) ou a AWS CLI. O exemplo a seguir mostra como excluir estatísticas de colunas usando a AWS CLI.

```
aws glue update-column-statistics-for-table --cli-input-json:

{
    "CatalogId": "111122223333",
    "DatabaseName": "database_name",
    "TableName": "table_name",
    "ColumnStatisticsList": [
        {
            "ColumnName": "col1",
            "ColumnType": "Boolean",
            "AnalyzedTime": "1970-01-01T00:00:00",
            "StatisticsData": {
                "Type": "BOOLEAN",
                "BooleanColumnStatisticsData": {
                    "NumberOfTrues": 5,
                    "NumberOfFalses": 5,
                    "NumberOfNulls": 0
                }
            }
        }
    ]
}
```

# Visualizar estatísticas de colunas
<a name="view-column-stats"></a>

Depois de gerar as estatísticas com êxito, o Data Catalog armazena essas informações para que os otimizadores baseados em custos no Amazon Athena e no Amazon Redshift façam as melhores escolhas ao executar consultas. As estatísticas variam de acordo com o tipo de coluna.

------
#### [ Console de gerenciamento da AWS ]

**Para visualizar estatísticas de colunas para uma tabela**
+ Após a execução da tarefa de estatísticas da coluna, a guia **Estatísticas da coluna** na página **Detalhes da tabela** mostra as estatísticas da tabela.   
![\[A captura de tela mostra as colunas geradas com base na execução mais recente.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/view-column-stats.png)

  As seguintes estatísticas estão disponíveis:
  + Nome da coluna: o nome da coluna usada para gerar as estatísticas
  + Última atualização: a data e a hora em que as estatísticas foram geradas
  + Comprimento médio: o comprimento médio dos valores na coluna
  + Valores distintos: o número total de valores distintos na coluna. Estimamos o número de valores distintos em uma coluna com erro relativo de 5%.
  + Valor máximo: o maior valor na coluna.
  + Valor mínimo: o menor valor na coluna. 
  + Comprimento máximo: o comprimento do valor mais alto na coluna.
  + Valores nulos: o número de valores nulos na coluna.
  + Valores verdadeiros: o número de valores verdadeiros na coluna.
  + Valores falsos: o número de valores falsos na coluna.
  + numFiles: o número total de arquivos na tabela. Esse valor está disponível na guia **Propriedades avançadas**.

------
#### [ AWS CLI ]

O exemplo a seguir mostra como recuperar estatísticas de colunas usando a AWS CLI.

```
aws glue get-column-statistics-for-table \
    --database-name database_name \
    --table-name table_name \
    --column-names <column_name>
```

 Você também pode visualizar as estatísticas da coluna usando a operação da API [GetColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetColumnStatisticsForTable.html). 

------

# Visualizar as execuções de tarefas de estatísticas de colunas
<a name="view-stats-run"></a>

Depois de executar uma tarefa de estatísticas de coluna, é possível explorar os detalhes da execução da tarefa para uma tabela usando o console do AWS Glue, a AWS CLI ou a operação [GetColumnStatisticsTaskRuns](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-GetColumnStatisticsTaskRun).

------
#### [ Console ]

**Para visualizar detalhes da execução da tarefa de estatísticas da coluna**

1. No console do AWS Glue, escolha **Tabelas** em Catálogo de Dados.

1. Selecione uma tabela com estatísticas de colunas.

1. Na página **Detalhes da tabela**, escolha **Estatísticas da coluna**.

1. Escolha **Visualizar execuções**.

   É possível ver informações sobre todas as execuções associadas à tabela especificada.  
![\[A captura de tela mostra as opções disponíveis para gerar estatísticas da coluna.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/view-column-stats-task-runs.png)

------
#### [ AWS CLI ]

No exemplo a seguir, substitua os valores de `DatabaseName` e `TableName` pelos nomes reais do banco de dados e da tabela.

```
aws glue get-column-statistics-task-runs --input-cli-json file://input.json
{
    "DatabaseName": "database_name",
    "TableName": "table_name"
}
```

------

# Interromper a execução da tarefa de estatísticas de coluna
<a name="stop-stats-run"></a>

Você pode interromper a execução de uma tarefa de estatísticas de coluna para uma tabela usando o console do AWS Glue, a AWS CLI ou a operação [StopColumnStatisticsTaskRun](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-StopColumnStatisticsTaskRun).

------
#### [ Console ]

**Para interromper a execução de uma tarefa de estatísticas de coluna**

1. No console do AWS Glue, escolha **Tabelas** em Catálogo de Dados.

1. Selecione a tabela com a execução da tarefa de estatísticas da coluna em andamento.

1. Na página **Detalhes da tabela**, escolha **Estatísticas da coluna**.

1. Escolha **Parar**.

   Se você interromper a tarefa antes que a execução seja concluída, as estatísticas da coluna não serão geradas para a tabela.

------
#### [ AWS CLI ]

No exemplo a seguir, substitua os valores de `DatabaseName` e `TableName` pelos nomes reais do banco de dados e da tabela.

```
aws glue stop-column-statistics-task-run --input-cli-json file://input.json
{
    "DatabaseName": "database_name",
    "TableName": "table_name"
}
```

------

# Excluir estatísticas de colunas
<a name="delete-column-stats"></a>

Você pode excluir estatísticas de colunas usando a operação da API [DeleteColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_DeleteColumnStatisticsForTable.html) ou a AWS CLI. Os exemplos a seguir mostram como excluir estatísticas de colunas usando a AWS Command Line Interface (AWS CLI).

```
aws glue delete-column-statistics-for-table \
    --database-name 'database_name' \
    --table-name 'table_name' \
    --column-name 'column_name'
```

# Considerações e limitações
<a name="column-stats-notes"></a>

As considerações e limitações a seguir se aplicam à geração de estatísticas de colunas.

**Considerações**
+ Usar amostragem para gerar estatísticas reduz o tempo de execução, mas pode gerar estatísticas imprecisas.
+ O Catálogo de Dados não armazena versões diferentes das estatísticas.
+ Só é possível executar uma tarefa de geração de estatísticas de cada vez por tabela.
+ Se uma tabela for criptografada usando a chave AWS KMS do cliente registrada no Catálogo de Dados, o AWS Glue usa a mesma chave para criptografar as estatísticas.

**A tarefa de estatísticas de colunas oferece suporte à geração de estatísticas:**
+ Quando o perfil do IAM tem permissões completas na tabela (IAM ou Lake Formation).
+ Quando o perfil do IAM tem permissões na tabela usando o modo de acesso híbrido do Lake Formation.

**A tarefa de estatísticas de colunas não oferece suporte à geração de estatísticas para:**
+ Tabelas com controle de acesso baseado em células do Lake Formation
+ Data lakes transacionais: Delta Lake do Linux foundation, Apache Hudi
+ Tabelas em bancos de dados federados: metastore do Hive, compartilhamentos de dados do Amazon Redshift
+ Colunas aninhadas, matrizes e tipos de dados struct.
+ Tabela que é compartilhada com você de outra conta

# Como criptografar seu Data Catalog
<a name="catalog-encryption"></a>

 Você pode proteger seus metadados armazenados no AWS Glue Data Catalog em repouso usando chaves de criptografia gerenciadas pelo AWS Key Management Service (AWS KMS). É possível habilitar a criptografia do Catálogo de Dados para o novo Catálogo de Dados usando as **Configurações do Catálogo de Dados**. Você pode habilitar ou desabilitar a criptografia para o Catálogo de Dados existente conforme necessário. Quando habilitada, o AWS Glue criptografa todos os novos metadados gravados no catálogo, enquanto os metadados existentes permanecem sem criptografia. 

Para obter informações detalhadas sobre como criptografar seu Catálogo de Dados, consulte [Como criptografar seu Data Catalog](encrypt-glue-data-catalog.md).

# Proteger seu catálogo de dados usando o Lake Formation
<a name="secure-catalog"></a>

 O AWS Lake Formation é um serviço que facilita configurar um data lake seguro na AWS. Ele fornece um local central para criar e gerenciar com segurança seus data lakes com a definição de permissões de controle de acesso refinadas. O Lake Formation usa o Catálogo de Dados para armazenar e recuperar metadados sobre seu data lake, como definições de tabelas, informações de esquema e configurações de controle de acesso a dados.

Você pode registrar a localização da tabela de metadados ou do banco de dados no Amazon S3 com o Lake Formation e usá-la para definir permissões em nível de metadados nos recursos do Catálogo de Dados. Também é possível usar o Lake Formation para gerenciar permissões de acesso ao armazenamento nos dados subjacentes armazenados no Amazon S3 em nome de mecanismos analíticos integrados.

Para obter mais informações, consulte [O que é o AWS Lake Formation?](lake-formation/latest/dg/what-is-lake-formation.html).

# Trabalho com as visualizações do AWS Glue Data Catalog no AWS Glue
<a name="catalog-views"></a>

 É possível criar e gerenciar as visualizações no AWS Glue Data Catalog, comumente conhecidas como visualizações do AWS Glue Data Catalog. Essas visualizações são úteis por serem compatíveis com diversos mecanismos de consulta SQL, permitindo o acesso à mesma visualização por diferentes serviços da AWS, como o Amazon Athena, o Amazon Redshift e o AWS Glue. É possível usar visualizações baseadas em Apache Iceberg, Apache Hudi e Delta Lake. 

 Ao criar uma visualização no Catálogo de Dados, você pode usar concessões de recursos e controles de acesso baseados em etiquetas no AWS Lake Formation para conceder acesso à visualização. Com esse método de controle de acesso, não é necessário configurar permissões de acesso adicionais para as tabelas referenciadas na criação da visualização. Esse método de concessão de permissões é chamado de semântica definidora, e essas exibições são chamadas de vizualizações definidoras. Para obter mais informações sobre controle de acesso no AWS Lake Formation, consulte a página [Granting and revoking permissions on Data Catalog resources](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html) no Guia do desenvolvedor do AWS Lake Formation. 

 As vizualizações do Data Catalog são úteis para os seguintes casos de uso: 
+  **Controle de acesso granular**: é possível criar uma visualização que restringe o acesso aos dados com base nas permissões necessárias ao usuário. Por exemplo, você pode usar visualizações no Catálogo de Dados para impedir que colaboradores externos ao departamento de Recursos Humanos acessem informações de identificação pessoal (PII). 
+  **Definição completa da visualização**: ao aplicar filtros em sua visualização no Catálogo de Dados, você garante que os registros de dados disponíveis estejam sempre completos. 
+  **Segurança aprimorada**: a obrigatoriedade de uma definição de consulta completa durante a criação da visualização contribui para reduzir a suscetibilidade das visualizações do Catálogo de Dados a comandos SQL de agentes mal-intencionados. 
+  **Compartilhamento de dados simplificado**: compartilhe dados com outras contas da AWS sem a necessidade de movimentação dos dados, usando o compartilhamento de dados entre contas no AWS Lake Formation. 

## Criação de uma visualização do Catálogo de Dados
<a name="catalog-creating-view"></a>

 Você pode criar visualizações do Catálogo de Dados usando a AWS CLI ou scripts de ETL do AWS Glue desenvolvidos com Spark SQL. A criação de visualizações do Catálogo de Dados segue uma sintaxe que inclui a especificação do tipo de visualização como `MULTI DIALECT` e do predicado `SECURITY` como `DEFINER`, o que configura uma visualização do tipo “definer”. 

 Exemplo de instrução SQL para a criação de uma visualização do Catálogo de Dados: 

```
CREATE PROTECTED MULTI DIALECT VIEW database_name.catalog_view SECURITY DEFINER
AS SELECT order_date, sum(totalprice) AS price
FROM source_table
GROUP BY order_date;
```

 Após criar uma visualização do Catálogo de Dados, é possível usar um perfil do IAM com a permissão “SELECT” do AWS Lake Formation sobre a visualização para consultá-la, usando serviços como o Amazon Athena, o Amazon Redshift ou trabalhos de ETL do AWS Glue. Não é necessário conceder acesso às tabelas subjacentes referenciadas na visualização. 

 Para obter mais informações sobre a criação e a configuração de visualizações do Catálogo de Dados, consulte a página [Building AWS Glue Data Catalog views](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html) no Guia do desenvolvedor do AWS Lake Formation. 

## Operações compatíveis para visualizações
<a name="catalog-supported-view-operations"></a>

 Os fragmentos de comandos apresentados a seguir mostram como é possível trabalhar com as visualizações do Catálogo de Dados de diferentes formas: 

 **CREATE VIEW** 

 Cria uma visualização do Catálogo de Dados. A seguir, um exemplo que demonstra a criação da visualização usando uma tabela existente: 

```
CREATE PROTECTED MULTI DIALECT VIEW catalog_view 
SECURITY DEFINER AS SELECT * FROM my_catalog.my_database.source_table
```

 **ALTER VIEW** 

 Sintaxe disponível: 

```
ALTER VIEW view_name [FORCE] ADD DIALECT AS query
ALTER VIEW view_name [FORCE] UPDATE DIALECT AS query
ALTER VIEW view_name DROP DIALECT
```

 É possível usar a opção `FORCE ADD DIALECT` para aplicar a atualização do esquema e dos objetos secundários de acordo com o novo dialeto do mecanismo. Lembre-se de que essa ação pode resultar em erros de consulta, caso a opção `FORCE` não seja usada para atualizar os demais dialetos do mecanismo. A seguir, um exemplo que demonstra a aplicação: 

```
ALTER VIEW catalog_view FORCE ADD DIALECTAS
SELECT order_date, sum(totalprice) AS priceFROM source_tableGROUP BY orderdate;
```

 A seguir, um exemplo que demonstra a alteração de uma visualização para a atualização do dialeto: 

```
ALTER VIEW catalog_view UPDATE DIALECT AS
SELECT count(*) FROM my_catalog.my_database.source_table;
```

 **DESCRIBE VIEW** 

 Sintaxe disponível para descrever uma visualização: 

 `SHOW COLUMNS {FROM|IN} view_name [{FROM|IN} database_name]`: se o usuário tiver as permissões necessárias no AWS Glue e no AWS Lake Formation para descrever a visualização, será possível listar as colunas. A seguir, alguns exemplos de comandos que demonstram como visualizar colunas: 

```
SHOW COLUMNS FROM my_database.source_table;    
SHOW COLUMNS IN my_database.source_table;
```

 `DESCRIBE view_name`: se o usuário tiver as permissões necessárias no AWS Glue e no AWS Lake Formation para descrever a visualização, será possível listar as colunas na visualização, incluindo os respectivos metadados. 

 **DROP VIEW** 

 Sintaxe disponível: 

```
DROP VIEW [ IF EXISTS ] view_name
```

 A seguir, um exemplo de instrução `DROP` que demonstra como realizar um teste para verificar a existência da visualização antes de sua remoção: 

```
DROP VIEW IF EXISTS catalog_view;
```

 `SHOW CREATE VIEW view_name`: mostra a instrução SQL responsável pela criação da visualização especificada. A seguir, um exemplo que demonstra o processo de criação de uma visualização no Catálogo de Dados: 

```
SHOW CREATE TABLE my_database.catalog_view;CREATE PROTECTED MULTI DIALECT VIEW my_catalog.my_database.catalog_view (
  net_profit,
  customer_id,
  item_id,
  sold_date)
TBLPROPERTIES (
  'transient_lastDdlTime' = '1736267222')
SECURITY DEFINER AS SELECT * FROM
my_database.store_sales_partitioned_lf WHERE customer_id IN (SELECT customer_id from source_table limit 10)
```

 **SHOW VIEWS** 

 Lista todas as visualizações existentes no catálogo, incluindo as visualizações regulares, as visualizações com múltiplos dialetos (MDV, na sigla em inglês) e as MDVs sem suporte ao dialeto Spark. A sintaxe disponível é a seguinte: 

```
SHOW VIEWS [{ FROM | IN } database_name] [LIKE regex_pattern]:
```

 A seguir, um exemplo que demonstra um comando para mostrar as visualizações: 

```
SHOW VIEWS IN marketing_analytics LIKE 'catalog_view*';
```

 Para obter mais informações sobre a criação e a configuração de visualizações do Catálogo de Dados, consulte a página [Building AWS Glue Data Catalog views](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html) no Guia do desenvolvedor do AWS Lake Formation. 

## Consulta de uma visualização do Catálogo de Dados
<a name="catalog-view-query"></a>

 Após criar uma visualização do Catálogo de Dados, é possível consultá-la normalmente. O perfil do IAM configurado em seus trabalhos do AWS Glue deve ter a permissão **SELECT** do Lake Formation na visualização do Catálogo de Dados. Não é necessário conceder acesso às tabelas subjacentes referenciadas na visualização. 

 Depois de configurar tudo, você pode consultar sua exibição. Por exemplo, você pode executar a consulta apresentada a seguir para acessar uma visualização. 

```
SELECT * from my_database.catalog_view LIMIT 10;
```

## Limitações
<a name="catalog-view-limitations"></a>

 Considere as limitações a seguir ao usar as vizualizações do Data Catalog. 
+  É possível criar visualizações do Catálogo de Dados apenas com a versão 5.0 ou superior do AWS Glue. 
+  O responsável pela definição da visualização do Catálogo de Dados deve ter permissão de acesso `SELECT` nas tabelas de base subjacentes acessadas pela visualização. A operação de criação da visualização do Catálogo de Dados não será bem-sucedida caso uma das tabelas de base tenha filtros do Lake Formation atribuídos ao perfil “definer”. 
+  As tabelas de base devem estar configuradas sem a permissão `IAMAllowedPrincipals` no data lake do AWS Lake Formation. Se presente, o erro **Visualizações de vários dialetos só podem fazer referência a tabelas sem permissões de IAMAllowedPrincipals permissions** ocorrerá. 
+  A localização da tabela no Amazon S3 deve estar registrada como um local de data lake no AWS Lake Formation. Caso a tabela não esteja registrada, será gerado o erro: `Multi Dialect views may only reference AWS Lake Formation managed tables`. Para obter informações sobre como registrar localizações do Amazon S3 no AWS Lake Formation, consulte [Registering an Amazon S3 location](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html) no Guia do desenvolvedor do AWS Lake Formation. 
+  Você só pode criar vizualizações `PROTECTED` do Data Catalog. Não há suporte para exibições `UNPROTECTED`. 
+  Você não pode referenciar tabelas de outra conta da AWS na definição de uma visualização do Catálogo de Dados. Além disso, não é possível referenciar uma tabela da mesma conta que esteja em uma região diferente. 
+  Para compartilhar dados entre contas ou regiões, a visualização inteira deve ser compartilhada entre contas e entre regiões, usando links de recurso do AWS Lake Formation. 
+  As funções definidas pelo usuário (UDFs) não são compatíveis. 
+  Não é possível fazer referência a outras vizualizações nas exibições do Data Catalog. 

# Acessar o Catálogo de Dados
<a name="access_catalog"></a>

 É possível usar o AWS Glue Data Catalog (Catálogo de Dados) para descobrir e entender seus dados. O Catálogo de Dados fornece uma maneira consistente de manter definições de esquema, tipos de dados, localizações e outros metadados. É possível acessar o Catálogo de Dados usando qualquer um dos seguintes métodos:
+ Console do AWS Glue: é possível acessar e gerenciar o Catálogo de Dados via console do AWS Glue, uma interface do usuário baseada na Web. O console permite que você navegue por e pesquise bancos de dados, tabelas e seus metadados associados, além de criar, atualizar e excluir definições de metadados. 
+ Crawler do AWS Glue: os crawlers são programas que examinam automaticamente suas fontes de dados e preenchem o Catálogo de Dados com metadados. É possível criar e executar crawlers para descobrir e catalogar dados de várias fontes, como Amazon S3, Amazon RDS, Amazon DynamoDB, Amazon CloudWatch e bancos de dados relacionais compatíveis com JDBC, como MySQL e PostgreSQL, além de várias fontes não relacionadas à AWS, como Snowflake e Google BigQuery.
+ APIs do AWS Glue: é possível acessar o catálogo de dados programaticamente usando as APIs do AWS Glue. Essas APIs permitem que você interaja com o Catálogo de Dados de forma programática, possibilitando a automação e a integração com outros serviços e aplicações. 
+ AWS Command Line Interface (AWS CLI): é possível usar a AWS CLI para acessar e gerenciar o Catálogo de Dados a partir da linha de comando. A CLI fornece comandos para criar, atualizar e excluir definições de metadados, bem como consultar e recuperar informações de metadados. 
+ Integração com outros serviços da AWS: o Catálogo de Dados se integra a vários outros serviços da AWS, permitindo que você acesse e utilize os metadados armazenados no catálogo. Por exemplo, é possível usar o Amazon Athena para consultar fontes de dados usando os metadados no catálogo de dados e usar o AWS Lake Formation para gerenciar o acesso aos dados e a governança dos recursos do Catálogo de Dados. 

**Topics**
+ [Conectar ao Catálogo de Dados usando o endpoint REST do Iceberg do AWS Glue](connect-glu-iceberg-rest.md)
+ [Conectar ao Catálogo de Dados usando o endpoint da extensão REST do Iceberg do AWS Glue](connect-glue-iceberg-rest-ext.md)
+ [APIs REST do AWS Glue para especificações do Apache Iceberg](iceberg-rest-apis.md)
+ [Conectar ao Catálogo de Dados via aplicação Spark autônoma](connect-gludc-spark.md)
+ [Mapeamento de dados entre o Amazon Redshift e o Amazon Iceberg](data-mapping-rs-iceberg.md)
+ [Considerações e limitações ao usar APIs do catálogo REST do Iceberg do AWS Glue](limitation-glue-iceberg-rest-api.md)

# Conectar ao Catálogo de Dados usando o endpoint REST do Iceberg do AWS Glue
<a name="connect-glu-iceberg-rest"></a>

 O endpoint REST do Iceberg do AWS Glue oferece suporte a operações de API definidas na especificação REST do Apache Iceberg. Usando um cliente REST do Iceberg, é possível conectar sua aplicação em execução em um mecanismo de análise ao catálogo REST hospedado no Catálogo de Dados.

 O endpoint oferece suporte às especificações v1 e v2 das tabelas do Apache Iceberg, sendo v2 a padrão. Ao usar a especificação v1 das tabelas do Iceberg, será necessário especificar v1 na chamada da API. Usando a operação da API, você é possível acessar tabelas do Iceberg residentes no armazenamento de objetos do Amazon S3 e no armazenamento de tabelas do Amazon S3. 

**Configuração do endpoint**

É possível acessar o catálogo REST do AWS Glue Iceberg usando o endpoint do serviço. Consulte o [Guia de referência dos endpoints de serviço do AWS Glue](https://docs.aws.amazon.com/general/latest/gr/glue.html#glue_region) para o endpoint específico da região. Por exemplo, ao se conectar ao AWS Glue na região us-east-1, você precisará configurar a propriedade URI do endpoint da seguinte forma: 

```
Endpoint : https://glue.us-east-1.amazonaws.com/iceberg
```

**Propriedades de configuração adicionais**: ao usar o cliente do Iceberg para conectar um mecanismo de análise como o Spark ao endpoint de serviço, é necessário especificar as seguintes propriedades de configuração da aplicação:

```
catalog_name = "mydatacatalog"
aws_account_id = "123456789012"
aws_region = "us-east-1"
spark = SparkSession.builder \
    ... \
    .config("spark.sql.defaultCatalog", catalog_name) \
    .config(f"spark.sql.catalog.{catalog_name}", "org.apache.iceberg.spark.SparkCatalog") \
    .config(f"spark.sql.catalog.{catalog_name}.type", "rest") \
    .config(f"spark.sql.catalog.{catalog_name}.uri", "https://glue.{aws_region}.amazonaws.com/iceberg") \
    .config(f"spark.sql.catalog.{catalog_name}.warehouse", "{aws_account_id}") \
    .config(f"spark.sql.catalog.{catalog_name}.rest.sigv4-enabled", "true") \
    .config(f"spark.sql.catalog.{catalog_name}.rest.signing-name", "glue") \    
    .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .getOrCreate()
```

O endpoint do Iceberg ` https://glue.us-east-1.amazonaws.com/iceberg` do AWS Glue é compatível com as seguintes APIs REST do Iceberg:
+ GetConfig
+ ListNamespaces
+ CreateNamespace
+ LoadNamespaceMetadata
+ UpdateNamespaceProperties
+ DeleteNamespace
+ ListTables
+ CreateTable
+ LoadTable
+ TableExists
+ UpdateTable
+ DeleteTable

## Parâmetros de prefixo e caminho do catálogo
<a name="prefix-catalog-path-parameters"></a>

As APIs do catálogo REST do Iceberg têm um prefixo de formato livre em seus URLs de solicitação. Por exemplo, a chamada de API `ListNamespaces` usa o formato de URL `GET/v1/{prefix}/namespaces`. O prefixo AWS Glue sempre segue a estrutura `/catalogs/{catalog}` para garantir que o caminho REST alinhe a hierarquia de múltiplos catálogos do AWS Glue. O parâmetro de caminho `{catalog}` pode ser derivado com base nas seguintes regras:


| **Padrão de acesso** |  **Estilo de ID do catálogo do Glue**  |  **Estilo de prefixo**  | **Exemplo de ID de catálogo padrão** |  **Exemplo de rota REST**  | 
| --- | --- | --- | --- | --- | 
|  Acesar o catálogo padrão na conta atual  | não obrigatório | : |  não aplicável  |  GET /v1/catalogs/:/namespaces  | 
|  Acessar o catálogo padrão em uma conta específica  | accountID | accountID | 111122223333 | GET /v1/catalogs/111122223333/namespaces | 
|  Acesar um catálogo aninhado na conta atual  |  catalog1/catalog2  |  catalog1/catalog2  |  rmscatalog1:db1  |  GET /v1/catalogs/rmscatalog1:db1/namespaces  | 
|  Acessar um catálogo aninhado em uma conta específica  |  accountId:catalog1/catalog2  |  accountId:catalog1/catalog2  |  123456789012/rmscatalog1:db1  |  GET /v1/catalogs/123456789012:rmscatalog1:db1/namespaces  | 

Esse mapeamento de ID de catálogo em prefixo é necessário somente quando você chama diretamente as APIs REST. Ao trabalhar com as APIs do catálogo REST do Iceberg do AWS Glue por meio de um mecanismo, é necessário especificar o ID do catálogo do AWS Glue no parâmetro `warehouse` da configuração da API do catálogo REST do Iceberg ou no parâmetro `glue.id` da configuração da API de extensões do AWS Glue. Por exemplo, veja como você pode usá-lo com o EMR Spark em [Usar um cluster do Iceberg com o Spark](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-iceberg-use-spark-cluster.html).

## Parâmetro do caminho do namespace
<a name="ns-path-param"></a>

Os namespaces no caminho das APIs do catálogo REST do Iceberg podem ter vários níveis. No entanto, o AWS Glue só oferece suporte a namespaces de nível único. Para acessar um namespace em uma hierarquia de catálogos de vários níveis, é possível se conectar a um catálogo de vários níveis acima do namespace para fazer referência ao namespace. Isso permite que qualquer mecanismo de consulta que suporte a notação em três partes de `catalog.namespace.table` acesse objetos na hierarquia de catálogos de vários níveis do AWS Glue sem problemas de compatibilidade em comparação com o uso do namespace de vários níveis.

# Conectar ao Catálogo de Dados usando o endpoint da extensão REST do Iceberg do AWS Glue
<a name="connect-glue-iceberg-rest-ext"></a>

 O endpoint da extensão REST do Iceberg do AWS Glue fornece APIs adicionais que não estão presentes na especificação REST do Apache Iceberg, além de recursos de planejamento verificação no lado do servidor. Essas APIs adicionais são usadas quando você acessa tabelas residentes no armazenamento gerenciado do Amazon Redshift. O endpoint pode ser acessado a partir de uma aplicação por meio de extensões do AWS Glue Data Catalog para Apache Iceberg. 

**Configuração do endpoint**: um catálogo com tabelas no armazenamento gerenciado do Redshift é acessível usando o endpoint de serviço. Consulte o [Guia de referência dos endpoints de serviço do AWS Glue](https://docs.aws.amazon.com/general/latest/gr/glue.html#glue_region) para o endpoint específico da região. Por exemplo, ao se conectar ao AWS Glue na região us-east-1, você precisará configurar a propriedade URI do endpoint da seguinte forma:

```
Endpoint : https://glue.us-east-1.amazonaws.com/extensions
```

```
catalog_name = "myredshiftcatalog"
aws_account_id = "123456789012"
aws_region = "us-east-1"
spark = SparkSession.builder \
    .config("spark.sql.defaultCatalog", catalog_name) \
    .config(f"spark.sql.catalog.{catalog_name}", "org.apache.iceberg.spark.SparkCatalog") \
    .config(f"spark.sql.catalog.{catalog_name}.type", "glue") \
    .config(f"spark.sql.catalog.{catalog_name}.glue.id", "{123456789012}:redshiftnamespacecatalog/redshiftdb") \
    .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .getOrCreate()
```

# APIs REST do AWS Glue para especificações do Apache Iceberg
<a name="iceberg-rest-apis"></a>

Esta seção contém especificações sobre o catálogo REST do AWS Glue para Iceberg e as APIs de extensão do AWS Glue, além de considerações sobre o uso dessas APIs. 

As solicitações de API aos endpoints do AWS Glue Data Catalog são autenticadas por meio do AWS Signature Version 4 (SigV4). Consulte a seção [AWS Signature Version 4 para solicitações de API](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) para saber mais sobre o AWS SigV4.

Ao acessar o endpoint de serviço do AWS Glue e os metadados do AWS Glue, a aplicação assume um perfil do IAM que exige uma ação `glue:getCatalog` do IAM. 

O acesso ao Catálogo de Dados e seus objetos pode ser gerenciado usando permissões do IAM, Lake Formation ou modo híbrido do Lake Formation.

Os catálogos federados no Catálogo de Dados têm locais de dados registrados no Lake Formation. O Lake Formation trabalha com o Catálogo de Dados para fornecer permissões no estilo de banco de dados para gerenciar o acesso de usuários a objetos do Catálogo de Dados. 

É possível usar as permissões do IAM, do AWS Lake Formation ou do modo híbrido do Lake Formation para gerenciar o acesso ao Catálogo de Dados padrão e seus objetos. 

Para criar, inserir ou excluir dados em objetos gerenciados do Lake Formation, é necessário configurar permissões específicas para o usuário ou perfil do IAM. 
+ CREATE\$1CATALOG: necessária para criar catálogos 
+ CREATE\$1DATABASE: necessária para criar bancos de dados
+ CREATE\$1TABLE: necessária para criar tabelas
+ DELETE: necessária para excluir dados de uma tabela
+ DESCRIBE: necessária para ler metadados 
+ DROP: necessária para descartar/excluir uma tabela ou banco de dados
+ INSERT: necessária quando a entidade principal precisa inserir dados em uma tabela
+ SELECT: necessária quando a entidade principal precisa selecionar dados de uma tabela

Para obter mais informações, consulte [Referência de permissões do Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/lf-permissions-reference.html) no Guia do desenvolvedor do AWS Lake Formation.

# GetConfig
<a name="get-config"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | GetConfig | 
| Tipo |  API do catálogo REST do Iceberg  | 
| Caminho REST |  GET /iceberg/v1/config  | 
| Ação do IAM |  glue:GetCatalog  | 
| Permissões do Lake Formation | Não aplicável | 
| Evento do CloudTrail |  glue:GetCatalog  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L67 | 

****Considerações e limitações****
+ O parâmetro da consulta `warehouse` deve ser definido como o ID do catálogo do AWS Glue. Caso não tenha sido definido, o catálogo raiz na conta atual será usado para retornar a resposta. Para obter mais informações, consulte [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).

# GetCatalog
<a name="get-catalog"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | GetCatalog | 
| Tipo |  API de extensão do AWS Glue  | 
| Caminho REST |  GET/extensions/v1/catalogs/\$1catalog\$1  | 
| Ação do IAM |  glue:GetCatalog  | 
| Permissões do Lake Formation | DESCRIBE | 
| Evento do CloudTrail |  glue:GetCatalog  | 
| Definição da Open API | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L40 | 

****Considerações e limitações****
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).

# ListNamespaces
<a name="list-ns"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | ListNamespaces | 
| Tipo |  API do catálogo REST do Iceberg  | 
| Caminho REST |  GET/iceberg/v1/catalogs/\$1catalog\$1/namespaces  | 
| Ação do IAM |  glue:GetDatabase  | 
| Permissões do Lake Formation | ALL, DESCRIBE, SELECT | 
| Evento do CloudTrail |  glue:GetDatabase  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L205 | 

****Considerações e limitações****
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Somente os namespaces do próximo nível são exibidos. Para listar namespaces em níveis mais profundos, especifique o ID do catálogo aninhado no parâmetro do caminho do catálogo.

# CreateNamespace
<a name="create-ns"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | CreateNamespace | 
| Tipo |  API do catálogo REST do Iceberg  | 
| Caminho REST |  POST/iceberg/v1/catalogs/\$1catalog\$1/namespaces  | 
| Ação do IAM |  glue:CreateDatabase  | 
| Permissões do Lake Formation | ALL, DESCRIBE, SELECT | 
| Evento do CloudTrail |  glue:CreateDatabase  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L256 | 

****Considerações e limitações****
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ Somente um namespace de nível único pode ser criado. Para criar um namespace de vários níveis, é necessário criar iterativamente cada nível e se conectarao nível usando o parâmetro de caminho do catálogo.

# StartCreateNamespaceTransaction
<a name="start-create-ns-transaction"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | StartCreateNamespaceTransaction | 
| Tipo |  API de extensões do AWS Glue  | 
| Caminho REST |  POST/extensions/v1/catalogs/\$1catalog\$1/namespaces  | 
| Ação do IAM |  glue:CreateDatabase  | 
| Permissões do Lake Formation | ALL, DESCRIBE, SELECT | 
| Evento do CloudTrail |  glue:CreateDatabase  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L256 | 

****Considerações e limitações****
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível criar somente um namespace de nível único. Para criar namespaces de vários níveis, é necessário criar cada nível de forma iterativa e conectar-se ao nível usando o parâmetro de caminho do catálogo.
+ A API é assíncrona e retorna um ID de transação que você pode usar para rastreamento usando a chamada de API `CheckTransactionStatus`.
+  Você poderá chamar essa API somente se a chamada de API `GetCatalog` contiver o parâmetro `use-extensions=true` na resposta. 

## LoadNamespaceMetadata
<a name="load-ns-metadata"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | LoadNamespaceMetadata | 
| Tipo |  API do catálogo REST do Iceberg  | 
| Caminho REST |  GET/iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1  | 
| Ação do IAM |  glue:GetDatabase  | 
| Permissões do Lake Formation | ALL, DESCRIBE, SELECT | 
| Evento do CloudTrail |  glue:GetDatabase  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L302 | 

****Considerações e limitações****
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).

## UpdateNamespaceProperties
<a name="w2aac20c29c16c21c13"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | UpdateNamespaceProperties | 
| Tipo |  API do catálogo REST do Iceberg  | 
| Caminho REST |  POST /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/properties  | 
| Ação do IAM |  glue:UpdateDatabase  | 
| Permissões do Lake Formation | ALL, ALTER | 
| Evento do CloudTrail |  glue:UpdateDatabase  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L400 | 

****Considerações e limitações****
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).

# DeleteNamespace
<a name="delete-ns"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | DeleteNamespace | 
| Tipo |  API do catálogo REST do Iceberg  | 
| Caminho REST |  DELETE/iceberg/v1/catalogs/\$1catalog\$1/namespces/\$1ns\$1  | 
| Ação do IAM |  glue:DeleteDatabase  | 
| Permissões do Lake Formation | ALL, DROP | 
| Evento do CloudTrail |  glue:DeleteDatabase  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L365 | 

****Considerações e limitações****
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).
+ Se houver objetos no banco de dados, a operação falhará.
+ A API é assíncrona e retorna um ID de transação que você pode usar para rastreamento usando a chamada de API `CheckTransactionStatus`.
+  A API só poderá ser usada se a chamada de API `GetCatalog` indicar `use-extensions=true` na resposta. 

# StartDeleteNamespaceTransaction
<a name="start-delete-ns-transaction"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | StartDeleteNamespaceTransaction | 
| Tipo |  API de extensões do AWS Glue  | 
| Caminho REST |  DELETE /extensions/v1/catalogs/\$1catalog\$1/namespces/\$1ns\$1  | 
| Ação do IAM |  glue:DeleteDatabase  | 
| Permissões do Lake Formation | ALL, DROP | 
| Evento do CloudTrail |  glue:DeleteDatabase  | 
| Definição da Open API | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L85 | 

****Considerações e limitações****
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).
+ Se houver objetos no banco de dados, a operação falhará.
+ A API é assíncrona e retorna um ID de transação que você pode usar para rastreamento usando a chamada de API `CheckTransactionStatus`.
+  A API só poderá ser usada se a chamada de API `GetCatalog` indicar `use-extensions=true` na resposta. 

# ListTables
<a name="list-tables"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | ListTables | 
| Tipo |  API do catálogo REST do Iceberg  | 
| Caminho REST |  GET /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables  | 
| Ação do IAM |  glue:GetTables  | 
| Permissões do Lake Formation | ALL, SELECT, DESCRIBE | 
| Evento do CloudTrail |  glue:GetTables  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L463 | 

****Considerações e limitações****
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).
+ Todas as tabelas, incluindo tabelas não Iceberg, serão listadas. Para determinar se uma tabela pode ser carregada como uma tabela Iceberg ou não, chame a operação `LoadTable`.

# CreateTable
<a name="create-table"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | CreateTable | 
| Tipo |  API do catálogo REST do Iceberg  | 
| Caminho REST |  GET /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables  | 
| Ação do IAM |  glue:CreateTable  | 
| Permissões do Lake Formation | ALL, CREATE\$1TABLE | 
| Evento do CloudTrail |  glue:CreateTable  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L497 | 

****Considerações e limitações****
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).
+ Não há suporte a `CreateTable` com preparação. Se o parâmetro de consulta `stageCreate` for especificado, a operação falhará. Isso significa que operações como `CREATE TABLE AS SELECT` não são permitidas, e você poderá usar uma combinação de `CREATE TABLE` e `INSERT INTO` como alternativa.
+ A operação `CreateTable` da API não oferece suporte à opção `state-create = TRUE`.

# StartCreateTableTransaction
<a name="start-create-table-transaction"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | CreateTable | 
| Tipo |  API de extensões do AWS Glue  | 
| Caminho REST |  POST/extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables  | 
| Ação do IAM |  glue:CreateTable  | 
| Permissões do Lake Formation | ALL, CREATE\$1TABLE | 
| Evento do CloudTrail |  glue:CreateTable  | 
| Definição da Open API | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L107 | 

****Considerações e limitações****
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).
+ Não há suporte a `CreateTable` com preparação. Se o parâmetro de consulta `stageCreate` for especificado, a operação falhará. Isso significa que não há suporte a operações como `CREATE TABLE AS SELECT`, e o usuário deve usar uma combinação de `CREATE TABLE` e `INSERT INTO` como solução alternativa.
+ A API é assíncrona e retorna um ID de transação que você pode usar para rastreamento usando a chamada de API `CheckTransactionStatus`.
+  A API só poderá ser usada se a chamada de API `GetCatalog` indicar `use-extensions=true` na resposta. 

# LoadTable
<a name="load-table"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | LoadTable | 
| Tipo |  API do catálogo REST do Iceberg  | 
| Caminho REST |  GET /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Ação do IAM |  glue:GetTable  | 
| Permissões do Lake Formation | ALL, SELECT, DESCRIBE | 
| evento do CloudTrail |  glue:GetTable  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L616 | 

**Considerações**
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).
+ Não há suporte a `CreateTable` com preparação. Se o parâmetro de consulta `stageCreate` for especificado, a operação falhará. Isso significa que não há suporte a operações como `CREATE TABLE AS SELECT`, e o usuário deve usar uma combinação de `CREATE TABLE` e `INSERT INTO` como solução alternativa.
+ A API é assíncrona e retorna um ID de transação que você pode usar para rastreamento usando a chamada de API `CheckTransactionStatus`.
+  A API só poderá ser usada se a chamada de API `GetCatalog` indicar `use-extensions=true` na resposta. 

# ExtendedLoadTable
<a name="extended-load-table"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | LoadTable | 
| Tipo |  API de extensões do AWS Glue  | 
| Caminho REST |  GET /extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Ação do IAM |  glue:GetTable  | 
| Permissões do Lake Formation | ALL, SELECT, DESCRIBE | 
| Evento do CloudTrail |  glue:GetTable  | 
| Definição da Open API | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L134 | 

**Considerações**
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).
+ Somente o modo `all` é suportado para o parâmetro de consulta de snapshots.
+ Em comparação com a API `LoadTable`, a API `ExtendedLoadTable` difere das seguintes formas:
  +  Não impõe estritamente que todos os campos estejam disponíveis.
  + Fornece os seguintes parâmetros adicionais no campo de configuração da resposta:   
**Parâmetros adicionais**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/extended-load-table.html)

# PreplanTable
<a name="preplan-table"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | PreplanTable | 
| Tipo |  API de extensões do AWS Glue  | 
| Caminho REST |  POST /extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1/preplan  | 
| Ação do IAM |  glue:GetTable  | 
| Permissões do Lake Formation | ALL, SELECT, DESCRIBE | 
| Evento do CloudTrail |  glue:GetTable  | 
| Definição da Open API | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L211 | 

**Considerações**
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).
+ O chamador dessa API deve sempre determinar se ainda há resultados a serem buscados com base no token da página. Uma resposta com um item de página vazio, mas um token de paginação, será possível se o lado do servidor ainda estiver processando, mas não for capaz de produzir nenhum resultado no tempo de resposta determinado.
+  Você poderá usar essa API somente se a resposta da API `ExtendedLoadTable` contiver `aws.server-side-capabilities.scan-planning=true`. 

# PlanTable
<a name="plan-table"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | PlanTable | 
| Tipo |  API de extensões do AWS Glue  | 
| Caminho REST |  POST /extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1/plan  | 
| Ação do IAM |  glue:GetTable  | 
| Permissões do Lake Formation | ALL, SELECT, DESCRIBE | 
| Evento do CloudTrail |  glue:GetTable  | 
| Definição da Open API | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L243 | 

**Considerações**
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).
+ O chamador dessa API deve sempre determinar se ainda há resultados a serem buscados com base no token da página. Uma resposta com um item de página vazio, mas um token de paginação, será possível se o lado do servidor ainda estiver processando, mas não for capaz de produzir nenhum resultado no tempo de resposta determinado.
+  Você poderá usar essa API somente se a resposta da API `ExtendedLoadTable` contiver `aws.server-side-capabilities.scan-planning=true`. 

# TableExists
<a name="table-exists"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | TableExists | 
| Tipo |  API do catálogo REST do Iceberg  | 
| Caminho REST |  HEAD/iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Ação do IAM |  glue:GetTable  | 
| Permissões do Lake Formation | ALL, SELECT, DESCRIBE | 
| Evento do CloudTrail |  glue:GetTable  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L833 | 

**Considerações**
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).

# UpdateTable
<a name="update-table"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | UpdateTable | 
| Tipo |  API do catálogo REST do Iceberg  | 
| Caminho REST |  POST /iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Ação do IAM |  glue:UpdateTable  | 
| Permissões do Lake Formation | ALL, ALTER | 
| Evento do CloudTrail |  glue:UpdateTable  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L677 | 

**Considerações**
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).

# StartUpdateTableTransaction
<a name="start-update-table-transaction"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | StartUpdateTableTransaction | 
| Tipo | API de extensão do AWS Glue | 
| Caminho REST |  POST/extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Ação do IAM |  glue:UpdateTable  | 
| Permissões do Lake Formation |  ALL, ALTER  | 
| Evento do CloudTrail |  glue:UpdateTable  | 
| Definição da Open API | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L154 | 

**Considerações**
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).
+ A API é assíncrona e retorna um ID de transação que você pode usar para rastreamento usando a chamada de API `CheckTransactionStatus`.
+  Uma operação `RenamTable` também pode ser executada por meio dessa API. Quando isso acontece, o chamador também deve ter a permissão glue:CreateTable ou CREATE\$1TABLE do LakeFormation para que a tabela seja renomeada. 
+  Você poderá usar essa API somente se a resposta da API `ExtendedLoadTable` contiver `aws.server-side-capabilities.scan-planning=true`. 

# DeleteTable
<a name="delete-table"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | DeleteTable | 
| Tipo |  API do catálogo REST do Iceberg  | 
| Caminho REST |  DELETE/iceberg/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Ação do IAM |  glue:DeleteTable  | 
| Permissões do Lake Formation | ALL, DROP | 
| Evento do CloudTrail |  glue:DeleteTable  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L793 | 

**Considerações**
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).
+ A operação da API `DeleteTable` oferece suporte a uma opção de expurgo. Quando a limpeza é definida como `true`, os dados da tabela são excluídos, caso contrário, os dados não são excluídos. Para tabelas no Amazon S3, a operação não exclui dados da tabela. A operação falha quando a tabela está armazenada no Amazon S3 e `purge = TRUE,`. 

  Para tabelas que estão no armazenamento gerenciado do Amazon Redshift, a operação excluirá os dados da tabela, semelhante ao comportamento de `DROP TABLE` no Amazon Redshift. A operação falha quando a tabela está armazenada no Amazon Redshift e `purge = FALSE`.
+ Não há suporte ao `purgeRequest=true`. 

# StartDeleteTableTransaction
<a name="start-delete-table-transaction"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | StartDeleteTableTransaction | 
| Tipo |  API de extensões do AWS Glue  | 
| Caminho REST |  DELETE /extensions/v1/catalogs/\$1catalog\$1/namespaces/\$1ns\$1/tables/\$1table\$1  | 
| Ação do IAM |  glue:DeleteTable  | 
| Permissões do Lake Formation | ALL, DROP | 
| Evento do CloudTrail |  glue:DeleteTable  | 
| Definição da Open API | https://github.com/apache/iceberg/blob/apache-iceberg-1.6.1/open-api/rest-catalog-open-api.yaml\$1L793 | 

**Considerações**
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).
+ É possível especificar somente um namespace de nível único no parâmetro REST Path. Para obter mais informações, consulte a seção [Parâmetro do caminho do namespace](connect-glu-iceberg-rest.md#ns-path-param).
+ Não há suporte ao `purgeRequest=false`. 
+  A API é assíncrona e retorna um ID de transação que pode ser rastreado via `CheckTransactionStatus`. 

# CheckTransactionStatus
<a name="check-transaction-status"></a>


**Informações gerais**  

|  |  | 
| --- |--- |
| Nome da operação | CheckTransactionStatus | 
| Tipo |  API de extensões do AWS Glue  | 
| Caminho REST |  POST/extensions/v1/transactions/status  | 
| Ação do IAM |  A mesma permissão da ação que inicia a transação  | 
| Permissões do Lake Formation | A mesma permissão da ação que inicia a transação | 
| Definição da Open API | https://github.com/awslabs/glue-extensions-for-iceberg/blob/main/glue-extensions-api.yaml\$1L273 | 

**Considerações**
+ O parâmetro do caminho do catálogo deve seguir o estilo descrito na seção [Parâmetros de prefixo e caminho do catálogo](connect-glu-iceberg-rest.md#prefix-catalog-path-parameters).

# Conectar ao Catálogo de Dados via aplicação Spark autônoma
<a name="connect-gludc-spark"></a>

É possível se conectar ao Catálogo de Dados por meio de uma aplicação autônoma usando um conector do Apache Iceberg. 

1. Crie um perfil do IAM para a aplicação Spark.

1. Conecte-se ao endpoint REST do Iceberg do AWS Glue usando o conector do Iceberg.

   ```
   # configure your application. Refer to https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html for best practices on configuring environment variables.
   export AWS_ACCESS_KEY_ID=$(aws configure get appUser.aws_access_key_id)
   export AWS_SECRET_ACCESS_KEY=$(aws configure get appUser.aws_secret_access_key)
   export AWS_SESSION_TOKEN=$(aws configure get appUser.aws_secret_token)
   
   export AWS_REGION=us-east-1
   export REGION=us-east-1
   export AWS_ACCOUNT_ID = {specify your aws account id here}
   
   ~/spark-3.5.3-bin-hadoop3/bin/spark-shell \
       --packages org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.6.0 \
       --conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
       --conf "spark.sql.defaultCatalog=spark_catalog" \
       --conf "spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkCatalog" \
       --conf "spark.sql.catalog.spark_catalog.type=rest" \
       --conf "spark.sql.catalog.spark_catalog.uri=https://glue.us-east-1.amazonaws.com/iceberg" \
       --conf "spark.sql.catalog.spark_catalog.warehouse = {AWS_ACCOUNT_ID}" \
       --conf "spark.sql.catalog.spark_catalog.rest.sigv4-enabled=true" \
       --conf "spark.sql.catalog.spark_catalog.rest.signing-name=glue" \
       --conf "spark.sql.catalog.spark_catalog.rest.signing-region=us-east-1" \
       --conf "spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO" \
       --conf "spark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.SimpleAWSCredentialProvider"
   ```

1. Consulte os dados no Catálogo de Dados.

   ```
   spark.sql("create database myicebergdb").show()
   spark.sql("""CREATE TABLE myicebergdb.mytbl (name string) USING iceberg location 's3://bucket_name/mytbl'""")
   spark.sql("insert into myicebergdb.mytbl values('demo') ").show()
   ```

# Mapeamento de dados entre o Amazon Redshift e o Amazon Iceberg
<a name="data-mapping-rs-iceberg"></a>

O Redshift e o Iceberg oferecem suporte a vários tipos de dados. A matriz de compatibilidade a seguir descreve o suporte e as limitações ao mapear dados entre esses dois sistemas de dados. Consulte os [Tipos de dados do Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html) e as [Especificações de tabelas do Apache Iceberg](https://iceberg.apache.org/spec/#primitive-types) para obter mais detalhes sobre os tipos de dados compatíveis nos respectivos sistemas de dados.


| Tipo de dados do Redshift | Aliases | Tipo de dados do Iceberg | 
| --- | --- | --- | 
| SMALLINT | INT2 | int | 
| INTEGER | INT, INT4 | int | 
| BIGINT | INT8 | longo | 
| DECIMAL | NUMERIC | decimal | 
| REAL | FLOAT4 | flutuação | 
| REAL | FLOAT4 | flutuação | 
| DOUBLE PRECISION | FLOAT8, FLOAT | double | 
| CHAR | CHARACTER, NCHAR | string | 
| VARCHAR | CHARACTER VARYING, NVARCHAR | string | 
| BPCHAR |  | string | 
| TEXT |  | string | 
| DATE |  | date | 
| TIME | TIME WITHOUT TIMEZONE | horário | 
| TIME | TIME WITH TIMEZONE | não compatível | 
| TIMESTAMP | TIMESTAMP WITHOUT TIMEZONE | TIMESTAMP | 
| TIMESTAMPZ | TIMESTAMP WITH TIMEZONE | TIMESTAMPZ | 
| INTERVALO ENTRE UM ANO E UM MÊS |  | Não compatível | 
| INTERVALO ENTRE UM DIA E UM SEGUNDO |  | Não compatível | 
| BOOLEAN | BOOL | bool | 
| HLLSKETCH |  | Não compatível | 
| SUPER |  | Não compatível | 
| VARBYTE | VARBINARY, BINARY VARYING | binary | 
| GEOMETRY |  | Não compatível | 
| GEOGRAPHY |  | Não compatível | 

# Considerações e limitações ao usar APIs do catálogo REST do Iceberg do AWS Glue
<a name="limitation-glue-iceberg-rest-api"></a>

A seguir estão as considerações e limitações aplicáveis usar o comportamento de operação da linguagem de definição de dados (DDL) do Catálogo de Dados REST do Apache Iceberg.

**Considerações**
+  **Comportamento da API `RenameTable`**: a operação `RenameTable` é válida em tabelas no Amazon Redshift, mas não no Amazon S3. 
+  **Operações de DDL para namespaces e tabelas no Amazon Redshift**: as operações de criação, atualização e exclusão de namespaces e tabelas no Amazon Redshift são operações assíncronas porque dependem de quando o grupo de trabalho gerenciado do Amazon Redshift está disponível e se uma transação conflitante de DDL e DML está em andamento e a operação precisa aguardar o bloqueio e, em seguida, tentar confirmar as alterações. 

**Limitações**
+  As APIs de visualização na especificação REST do Apache Iceberg não são aceitas no catálogo REST do Iceberg do AWS Glue. 

# Práticas recomendadas do Catálogo de Dados do AWS Glue
<a name="best-practice-catalog"></a>

 Esta seção aborda práticas recomendadas para gerenciar e utilizar com eficácia o AWS Glue Data Catalog. Ele enfatiza práticas como uso eficiente de crawlers, organização de metadados, segurança, otimização de performance, automação, governança de dados e integração com outros serviços da AWS. 
+ **Use rastreadores de forma eficaz**: execute crawlers regularmente para manter o Catálogo de Dados atualizado com as alterações em suas fontes de dados. Use crawls incrementais para alterar frequentemente as fontes de dados para melhorar a performance. Configure crawlers para adicionar automaticamente novas partições ou atualizar esquemas quando alterações forem detectadas. 
+ **Organize e nomeie tabelas de metadados**: estabeleça uma convenção de nomenclatura consistente para bancos de dados e tabelas no Catálogo de Dados. Agrupe fontes de dados relacionadas em bancos de dados ou pastas lógicas para alcançar uma melhor organização. Use nomes descritivos que transmitam a finalidade e o conteúdo de cada tabela. 
+ **Gerencie esquemas de forma eficaz**: utilize os recursos de inferência de esquemas dos crawlers do AWS Glue. Revise e atualize alterações no do esquema antes de aplicá-las para evitar a interrupção de aplicações mais à frente. Use os recursos de evolução de esquema para lidar suavemente com alterações no esquema. 
+ **Proteja o Catálogo de Dados**: habilite a criptografia de dados em repouso e em trânsito para o Catálogo de Dados. Implemente políticas de controle de acesso refinadas para restringir o acesso a dados confidenciais. Audite e analise regularmente as permissões e os logs de atividades do Catálogo de Dados. 
+ **Integre com outros serviços da AWS** Use o Catálogo de Dados como uma camada centralizada de metadados para serviços como Amazon Athena, Redshift Spectrum e AWS Lake Formation. Aproveite os trabalhos do AWS Glue ETL para transformar e carregar dados em vários armazenamentos de dados enquanto mantém os metadados no Catálogo de Dados. 
+  **Monitore e otimize a performance** O Catálogo de dados monitora a performance de crawlers e trabalhos de ETL usando métricas do Amazon CloudWatch. Particione grandes conjuntos de dados no Catálogo de Dados para melhorar a performance das consultas. Implemente otimizações de performance para metadados acessados com frequência. 
+  **Mantenha-se em dia com a documentação e as práticas recomendadas do AWS Glue** O Catálogo de dados verifica regularmente a documentação do AWS Glue e os recursos do AWS Glue em busca de atualizações, práticas recomendadas e recomendações mais recentes. Participe de webinars, workshops e outros eventos do AWS Glue para aprender com especialistas e se manter em dia com novos recursos e capacidades. 

# Monitorar métricas de uso do Catálogo de Dados do Amazon CloudWatch
<a name="data-catalog-cloudwatch-metrics"></a>

As métricas de uso do AWS Glue Data Catalog já estão disponíveis no Amazon CloudWatch, simplificando o monitoramento e a compreensão da utilização de recursos em seu Catálogo de Dados. Agora, você tem visibilidade imediata do uso de catálogos, bancos de dados, tabelas, partições e conexões pela API do Glue Catalog, facilitando a supervisão do seu Catálogo de Dados.

## Visão geral das métricas do Catálogo de Dados
<a name="data-catalog-metrics-overview"></a>

O AWS Glue Data Catalog publica automaticamente as métricas de uso no Amazon CloudWatch. Com a integração das métricas do CloudWatch, você pode acompanhar indicadores críticos de desempenho a cada minuto, incluindo:
+ Solicitações de tabela
+ Índices de partição criados
+ Atualizações de conexão
+ Atualizações de estatísticas

Essas métricas ajudam você a identificar gargalos, detectar anomalias e tomar decisões baseadas em dados para melhorar a confiabilidade geral do Catálogo de Dados. Você também pode configurar os alarmes do CloudWatch para receber notificações quando as métricas excederem os limites especificados, permitindo o gerenciamento proativo da implantação. 

## Adicionar métricas ao seu painel do CloudWatch
<a name="glue-data-catalog-metrics-dashboard"></a>

Você pode criar painéis personalizados para monitorar seus recursos do AWS Glue Data Catalog e configurar alarmes para ser notificado sobre qualquer atividade incomum.

Você pode adicionar métricas do Catálogo de Dados ao seu painel do CloudWatch seguindo estas etapas:

1. Abra o console do CloudWatch em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. No painel de navegação, selecione **Métricas**.

1. Escolha **Todas as métricas**.

1. Escolha **Uso > Por recurso do AWS**.

1. Filtre por **Glue** para ver as métricas disponíveis.

1. Selecione as métricas que deseja adicionar ao painel.

1. Adicione métricas de catálogos, bancos de dados, tabelas, partições e conexões ao seu gráfico do CloudWatch.  
![\[Métricas do AWS Glue Data Catalog no painel do CloudWatch\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/glue-cloudwatch-metrics.png)

Você pode configurar alarmes personalizados que são acionados automaticamente quando o uso da API excede os limites definidos por você a fim de identificar anormalidades no uso do seu catálogo de dados.

Para obter instruções detalhadas sobre como definir alarmes, consulte [Criação de um alarme do CloudWatch com o Metrics Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-insights-alarm-create.html).

# Registro de esquemas do AWS Glue
<a name="schema-registry"></a>

**nota**  
O registro de esquemas do AWS Glue não é compatível nas seguintes regiões no console do AWS Glue: Oriente Médio (EAU).

Com o registro de esquemas do AWS Glue, você pode descobrir, controlar e evoluir centralmente esquemas de fluxo de dados. O *esquema* define a estrutura e o formato de um registro de dados. Com o registro de esquemas do AWS Glue, você pode gerenciar e aplicar esquemas em suas aplicações de fluxo de dados usando integrações convenientes com o Apache Kafka, [Amazon Managed Streaming for Apache Kafka](https://aws.amazon.com/msk/), [Amazon Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams/), [Amazon Managed Service for Apache Flink](https://aws.amazon.com/kinesis/data-analytics/) e [AWS Lambda](https://aws.amazon.com/lambda/).

O Schema Registry é compatível com o formato de dados AVRO (v1.11.4), o formato de dados JSON com [formato JSON Schema](https://json-schema.org/) para o esquema (especificações Draft-04, Draft-06 e Draft-07) com validação do esquema JSON usando a [biblioteca do Everit](https://github.com/everit-org/json-schema), Protocol Buffers (Protobuf) versões proto2 e proto3 não compatíveis com `extensions` e `groups`, e compatíveis com a linguagem Java, e outros formatos de dados e linguagens a serem incluídos em breve. Os recursos com suporte incluem compatibilidade, fornecimento de esquema via metadados, registro automático de esquemas, compatibilidade com o IAM e compactação ZLIB opcional para reduzir o armazenamento e a transferência de dados. O registro de esquemas do O registro de esquemas é uma solução sem servidor e de uso gratuito.

O uso de um esquema como um contrato de formato de dados entre produtores e consumidores leva a uma melhor governança e maior qualidade dos dados, e ainda permite que os consumidores de dados sejam resilientes a alterações upstream compatíveis.

O registro de esquemas permite que sistemas diferentes compartilhem um esquema para serialização e desserialização. Por exemplo, suponha que você tenha um produtor e consumidor de dados. O produtor conhece o esquema quando publica os dados. O registro de esquemas fornece um serializador e desserializador para determinados sistemas, como Amazon MSK ou Apache Kafka. 

 Para obter mais informações, consulte [Como o registro de esquemas funciona](schema-registry-works.md).

**Topics**
+ [Esquemas](#schema-registry-schemas)
+ [Registros](#schema-registry-registries)
+ [Versionamento e compatibilidade de esquema](#schema-registry-compatibility)
+ [Bibliotecas Serde de código aberto](#schema-registry-serde-libraries)
+ [Cotas do registro do esquemas](#schema-registry-quotas)
+ [Como o registro de esquemas funciona](schema-registry-works.md)
+ [Conceitos básicos do registro de esquemas](schema-registry-gs.md)

## Esquemas
<a name="schema-registry-schemas"></a>

O *esquema* define a estrutura e o formato de um registro de dados. Um esquema é uma especificação versionada para publicação, consumo ou datastore confiáveis.

Neste esquema de exemplo para Avro, o formato e a estrutura são definidos pelo layout e nomes de campo, e o formato dos nomes de campo é definido pelos tipos de dados (por exemplo,`string`, `int`).

```
{
    "type": "record",
    "namespace": "ABC_Organization",
    "name": "Employee",
    "fields": [
        {
            "name": "Name",
            "type": "string"
        },
        {
            "name": "Age",
            "type": "int"
        },
        {
            "name": "address",
            "type": {
                "type": "record",
                "name": "addressRecord",
                "fields": [
                    {
                        "name": "street",
                        "type": "string"
                    },
                    {
                        "name": "zipcode",
                        "type": "int" 
                    }
                ]
            }
        }
    ]
}
```

Neste exemplo de esquema JSON Draft-07 para JSON, o formato é definido pela [organização do esquema JSON](https://json-schema.org/).

```
{
	"$id": "https://example.com/person.schema.json",
	"$schema": "http://json-schema.org/draft-07/schema#",
	"title": "Person",
	"type": "object",
	"properties": {
		"firstName": {
			"type": "string",
			"description": "The person's first name."
		},
		"lastName": {
			"type": "string",
			"description": "The person's last name."
		},
		"age": {
			"description": "Age in years which must be equal to or greater than zero.",
			"type": "integer",
			"minimum": 0
		}
	}
}
```

Neste exemplo para Protobuf, o formato é definido pela [versão 2 da linguagem Protocol Buffers (proto2)](https://developers.google.com/protocol-buffers/docs/reference/proto2-spec).

```
syntax = "proto2";

package tutorial;

option java_multiple_files = true;
option java_package = "com.example.tutorial.protos";
option java_outer_classname = "AddressBookProtos";

message Person {
  optional string name = 1;
  optional int32 id = 2;
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    optional string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phones = 4;
}

message AddressBook {
  repeated Person people = 1;
}
```

## Registros
<a name="schema-registry-registries"></a>

Um *registro* é um contêiner lógico de esquemas. Os registros permitem que você organize seus esquemas, bem como gerencie o controle de acesso para suas aplicações. Um registro tem um nome do recurso da Amazon (ARN) para permitir que você organize e defina diferentes permissões de acesso para operações de esquema dentro do registro.

Você pode usar o registro padrão ou criar quantos novos registros forem necessários.


**AWS GlueHierarquia do registro de esquemas do**  

|  | 
| --- |
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/schema-registry.html)  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/schema-registry.html)  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/schema-registry.html)  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/schema-registry.html)  | 

## Versionamento e compatibilidade de esquema
<a name="schema-registry-compatibility"></a>

Cada esquema pode ter várias versões. O versionamento é regido por uma regra de compatibilidade aplicada em um esquema. As solicitações para registrar novas versões do esquema são verificadas quanto a essa regra pelo registro de esquemas antes de serem bem-sucedidas. 

Uma versão de esquema que está marcada como um ponto de verificação é usada para determinar a compatibilidade em registrar novas versões de um esquema. Quando um esquema é criado pela primeira vez, o ponto de verificação padrão é a primeira versão. À medida que o esquema evolui com mais versões, você pode usar a CLI/SDK para alterar o ponto de verificação para uma versão de um esquema usando a API `UpdateSchema` que adere a um conjunto de restrições. No console, editar a definição do esquema ou o modo de compatibilidade alterará o ponto de verificação para a versão mais recente por padrão. 

Os modos de compatibilidade permitem controlar como os esquemas podem ou não evoluir ao longo do tempo. Esses modos formam o contrato entre aplicações que produzem e consomem dados. Quando uma nova versão de um esquema é enviada para o registro, a regra de compatibilidade aplicada ao nome do esquema é usada para determinar se a nova versão pode ser aceita. Existem oito modos de compatibilidade: NONE (Nenhum), DISABLED (Desabilitado), BACKWARD (Anterior), BACKWARD\$1ALL (Todas as anteriores), FORWARD (Próxima), FORWARD\$1ALL (Todas as próximas), FULL (Completo), FULL\$1ALL (Completo total).

No formato de dados Avro, os campos podem ser opcionais ou obrigatórios. Um campo opcional é aquele em que o `Type` inclui nulo. Campos obrigatórios não possuem nulo como o `Type`.

No formato de dados Protobuf, os campos podem ser opcionais (inclusive repetidos) ou obrigatórios na sintaxe proto2, enquanto todos os campos são opcionais (inclusive repetidos) na sintaxe proto3. Todas as regras de compatibilidade são determinadas com base no entendimento das especificações de Protocol Buffers, bem como na orientação da [Documentação do Google Protocol Buffers](https://developers.google.com/protocol-buffers/docs/overview#updating).
+ *NONE* (Nenhum): nenhum modo de compatibilidade se aplica. Você pode usar essa opção em cenários de desenvolvimento ou se não souber os modos de compatibilidade que deseja aplicar aos esquemas. Qualquer nova versão adicionada será aceita sem ser submetida a uma verificação de compatibilidade.
+ *DISABLED* (Desabilitado): essa opção de compatibilidade impede o versionamento de um esquema específico. Nenhuma nova versão pode ser adicionada.
+ *BACKWARD* (Anterior): essa opção de compatibilidade é recomendada, pois permite que os consumidores de dados leiam a versão atual e anterior do esquema. Você pode usar essa opção para verificar a compatibilidade com a versão anterior do esquema ao excluir campos ou adicionar campos opcionais. Um caso de uso típico para BACKWARD (Anterior) é quando sua aplicação é criada para o esquema mais recente.

**AVRO**  
Por exemplo, suponha que você tenha um esquema definido pelo nome (obrigatório), sobrenome (obrigatório), e-mail (obrigatório) e número de telefone (opcional).

  Se a próxima versão do esquema removesse o campo de e-mail obrigatório, isso seria registrado com êxito. A compatibilidade BACKWARD (Anterior) requer que os consumidores sejam capazes de ler a versão atual e anterior do esquema. Seus consumidores poderão ler o novo esquema, pois o campo de e-mail extra de mensagens antigas será ignorado.

  Se você tivesse uma nova versão de esquema proposta que adicionasse um campo obrigatório, por exemplo, CEP, isso não seria registrado com êxito com a compatibilidade BACKWARD (Anterior). Seus consumidores na nova versão não conseguiriam ler mensagens antigas antes da alteração do esquema, pois elas não teriam o campo CEP necessário. No entanto, se o campo CEP fosse definido como opcional no novo esquema, a versão proposta seria registrada com sucesso, pois os consumidores poderiam ler o esquema antigo sem o campo de CEP opcional.

**JSON**  
Por exemplo, suponha que você tenha uma versão do esquema definida pelo nome (opcional), sobrenome (opcional), e-mail (opcional) e número de telefone (opcional).

  Se a próxima versão do esquema adicionasse a propriedade de número de telefone opcional, isso seria registrado com êxito, desde que a versão do esquema original não permitisse nenhuma propriedade adicional definindo o campo `additionalProperties` como false. A compatibilidade BACKWARD (Anterior) requer que os consumidores sejam capazes de ler a versão atual e anterior do esquema. Seus consumidores poderão ler dados produzidos com o esquema original onde a propriedade de número de telefone não existe.

  Se você tiver uma nova versão de esquema proposta que adiciona a propriedade de número de telefone opcional, isso não é registrado com êxito com a compatibilidade BACKWARD (Anterior) quando a versão original do esquema define o campo `additionalProperties` como true, ou seja, permitindo qualquer propriedade adicional. Seus consumidores na nova versão não conseguiriam ler mensagens antigas antes da alteração do esquema, pois não podem ler dados com a propriedade número de telefone em um tipo diferente, por exemplo string em vez de número.

**PROTOBUF**  
Por exemplo, suponha que você tenha uma versão do esquema definida por uma Mensagem `Person` com campos `first name` (obrigatório), `last name` (obrigatório), `email` (obrigatório) e `phone number` (opcional) sob sintaxe proto2.

  Semelhante a cenários AVRO, se a próxima versão do esquema removesse o campo de `email` obrigatório, isso seria registrado com êxito. A compatibilidade BACKWARD (Anterior) requer que os consumidores sejam capazes de ler a versão atual e anterior do esquema. Seus consumidores poderão ler o novo esquema, pois o campo de `email` extra de mensagens antigas será ignorado.

  Se você tivesse uma nova versão de esquema proposta que adicionasse um campo obrigatório, por exemplo, `zip code`, isso não seria registrado com êxito com a compatibilidade BACKWARD (Anterior). Seus consumidores na nova versão não conseguiriam ler mensagens antigas antes da alteração do esquema, pois elas não teriam o campo `zip code` necessário. No entanto, se o campo `zip code` fosse definido como opcional no novo esquema, a versão proposta seria registrada com sucesso, pois os consumidores poderiam ler o esquema antigo sem o campo de `zip code` opcional.

  No caso de um caso de uso gRPC, adicionar novo serviço RPC ou método RPC é uma alteração compatível com versões anteriores. Por exemplo, suponha que você tenha uma versão do esquema definida por um serviço RPC `MyService` com dois métodos RPC `Foo` e `Bar`.

  Se a próxima versão do esquema adicionar um novo método RPC chamado `Baz`, isso seria registrado com sucesso. Seus consumidores poderão ler dados produzidos com o esquema original de acordo com a compatibilidade BACKWARD pois o método RPC recém-adicionado `Baz` é opcional. 

  Se você tivesse uma nova versão de esquema proposta que removesse o método PRC existente `Foo`, isso não seria registrado com êxito com a compatibilidade BACKWARD. Seus consumidores na nova versão não conseguiriam ler mensagens antigas antes da alteração do esquema, pois não conseguem entender e ler dados com o método RPC `Foo` inexistente em uma aplicação gRPC.
+ *BACKWARD\$1ALL* (Todas as anteriores): essa opção de compatibilidade é recomendada, pois permite que os consumidores de dados leiam a versão atual e todas as anteriores do esquema. Você pode usar essa opção para verificar a compatibilidade com todas as versões anteriores do esquema ao excluir campos ou adicionar campos opcionais.
+ *FORWARD* (Próxima): essa opção de compatibilidade permite que os receptores de dados leiam a versão atual e as versões subsequentes do esquema, mas não necessariamente versões mais recentes. Você pode usar essa opção para verificar a compatibilidade com a última versão do esquema ao adicionar campos ou excluir campos opcionais. Um caso de uso típico para FORWARD (Próxima) é quando sua aplicação é criada para um esquema anterior e deve ser capaz de processar um esquema mais recente.

**AVRO**  
Por exemplo, suponha que você tenha uma versão do esquema definida pelo nome (obrigatório), sobrenome (obrigatório) e e-mail (opcional).

  Se você tivesse uma nova versão do esquema que adicionasse um campo obrigatório, por exemplo, número de telefone, isso seria registrado com sucesso. A compatibilidade FORWARD (Próxima) requer que os consumidores sejam capazes de ler dados produzidos com o novo esquema usando ainda a versão anterior.

  Se você tivesse uma nova versão de esquema proposta que excluísse o campo de nome obrigatório, isso não seria registrado com êxito com a compatibilidade FORWARD (Posterior). Seus consumidores na versão anterior não seriam capazes de ler os esquemas propostos, pois eles não teriam o campo de nome obrigatório. No entanto, se o campo de nome fosse originalmente opcional, então o novo esquema proposto seria registrado com sucesso, pois os consumidores poderiam ler dados com base no novo esquema que não tem o campo de nome opcional.

**JSON**  
Por exemplo, suponha que você tenha uma versão do esquema definida pelo nome (opcional), sobrenome (opcional), e-mail (opcional) e número de telefone (opcional).

  Se a próxima versão do esquema removesse a propriedade de número de telefone opcional, isso seria registrado com êxito, desde que a versão do esquema original não permitisse nenhuma propriedade adicional definindo o campo `additionalProperties` como false. A compatibilidade FORWARD (Próxima) requer que os consumidores sejam capazes de ler dados produzidos com o novo esquema usando ainda a versão anterior.

  Se você tiver uma versão de esquema proposta que exclui a propriedade número de telefone opcional, isso não é registrado com êxito com a compatibilidade FORWARD (Próxima) quando a nova versão do esquema define o campo `additionalProperties` como true, ou seja, permitindo qualquer propriedade adicional. Seus consumidores na versão anterior não conseguiriam ler mensagens antigas antes da alteração do esquema, pois não poderiam ler dados com a propriedade número de telefone em um tipo diferente, por exemplo string em vez de número.

**PROTOBUF**  
Por exemplo, suponha que você tenha uma versão do esquema definida por uma Mensagem `Person` com campos `first name` (obrigatório), `last name` (obrigatório) e `email` (opcional) sob sintaxe proto2.

  Semelhante a cenários AVRO, se você tivesse uma nova versão do esquema que adicionasse um campo obrigatório, por exemplo, `phone number`, isso seria registrado com sucesso. A compatibilidade FORWARD (Próxima) requer que os consumidores sejam capazes de ler dados produzidos com o novo esquema usando ainda a versão anterior.

  Se você tivesse uma nova versão de esquema proposta que excluísse o campo de `first name`, isso não seria registrado com êxito com a compatibilidade FORWARD. Seus consumidores na versão anterior não seriam capazes de ler os esquemas propostos, pois eles não teriam o campo de `first name` obrigatório. No entanto, se o campo de `first name` fosse originalmente opcional, então o novo esquema proposto seria registrado com sucesso, pois os consumidores poderiam ler dados com base no novo esquema que não tem o campo de `first name` opcional.

  No caso de um caso de uso gRPC, remover um serviço RPC ou método RPC é uma alteração compatível com o encaminhamento. Por exemplo, suponha que você tenha uma versão do esquema definida por um serviço RPC `MyService` com dois métodos RPC `Foo` e `Bar`. 

  Se a próxima versão do esquema excluir o método RPC existente chamado `Foo`, isso seria registrado com sucesso de acordo com a compatibilidade FORWARD, pois os consumidores podem ler dados produzidos com o novo esquema usando a versão anterior. Se você tivesse uma nova versão de esquema proposta que adicionasse o método RPC `Baz`, isso não seria registrado com êxito com a compatibilidade FORWARD. Seus consumidores na versão anterior não seriam capazes de ler os esquemas propostos, pois eles não teriam o método RPC ausente `Baz`.
+ *FORWARD\$1ALL* (Todas as próximas): essa opção de compatibilidade permite que os consumidores leiam dados escritos por produtores de qualquer novo esquema registrado. Você pode usar essa opção quando precisar adicionar campos ou excluir campos opcionais e verificar a compatibilidade com todas as versões anteriores do esquema.
+ *FULL* (Completo): essa opção de compatibilidade permite que os consumidores leiam dados gravados por produtores usando a versão anterior ou seguinte do esquema, mas não versões anteriores ou posteriores. Você pode usar essa opção para verificar a compatibilidade com a última versão do esquema ao adicionar ou remover campos opcionais.
+ *FULL\$1ALL* (Completo total): essa opção de compatibilidade permite que os receptores de dados leiam dados gravados por produtores usando todas as versões de esquema anteriores. Você pode usar essa opção para verificar a compatibilidade com todas as versões anteriores do esquema ao adicionar ou remover campos opcionais.

## Bibliotecas Serde de código aberto
<a name="schema-registry-serde-libraries"></a>

AWSA fornece bibliotecas Serde de código aberto como um framework para serialização e desserialização de dados. O design de código aberto dessas bibliotecas permite que aplicações e frameworks comuns de código aberto ofereçam suporte a elas em seus projetos.

Para obter mais detalhes sobre como as bibliotecas Serde funcionam, consulte [Como o registro de esquemas funciona](schema-registry-works.md).

## Cotas do registro do esquemas
<a name="schema-registry-quotas"></a>

As cotas, também conhecidas como limites na AWS, são os valores máximos para recursos, ações e itens na sua conta da AWS. A seguir estão os limites flexíveis para o registro de esquemas no AWS Glue.

**Pares de chave-valor de metadados de versão de esquema**  
Você pode ter até dez pares de chave-valor por SchemaVersion por região da AWS.

Você pode visualizar ou definir os pares de metadados de chave-valor usando o [Ação QuerySchemaVersionMetadata (Python: query\$1schema\$1version\$1metadata)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-QuerySchemaVersionMetadata) ou APIs do [Ação PutSchemaVersionMetadata (Python: put\$1schema\$1version\$1metadata)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-PutSchemaVersionMetadata).

A seguir estão os limites rígidos para o registro de esquemas no AWS Glue.

**Registros**  
É possível ter até 100 registros por região da AWS para esta conta.

**SchemaVersion**  
É possível ter até 10.000 versões de esquema por região da AWS para esta conta.

Cada novo esquema cria uma nova versão do esquema, portanto você poderá, teoricamente, ter até 10.000 esquemas por conta por região, se cada esquema tiver apenas uma versão.

**Cargas úteis de esquema**  
Há um limite de tamanho de 170 KB para cargas úteis de esquema.

# Como o registro de esquemas funciona
<a name="schema-registry-works"></a>

Esta seção descreve como os processos de serialização e desserialização no registro de esquemas funcionam.

1. Registrar um esquema: se o esquema ainda não existir no registro, ele pode ser registrado com um nome de esquema igual ao nome do destino (por exemplo, test\$1topic, test\$1stream, prod\$1firehose) ou o produtor pode fornecer um nome personalizado para ele. Os produtores também podem adicionar pares de chave-valor ao esquema como metadados, como a fonte: msk\$1kafka\$1topic\$1a ou aplicar tags da AWS para esquemas na criação do esquema. Depois que um esquema é registrado, o registro de esquemas retorna o ID da versão do esquema para o serializador. Se o esquema existir, mas o serializador estiver usando uma nova versão que não existe, o registro de esquemas verificará a referência do esquema a uma regra de compatibilidade, para garantir que a nova versão seja compatível antes de registrá-la como uma nova versão.

   Existem dois métodos de registro de um esquema: manual e automático. Você pode registrar um esquema manualmente por meio do console do AWS Glue ou CLI/SDK.

   Quando o registro automático é ativado nas configurações do serializador, o registro automático do esquema é realizado. Se `REGISTRY_NAME` não for fornecido nas configurações do produtor, o registro automático registrará a nova versão do esquema no registro padrão (default-registry). Consulte [Instalar as bibliotecas SerDe](schema-registry-gs-serde.md) para obter informações sobre como especificar a propriedade de registro automático.

1. O serializador valida registros de dados em relação ao esquema: quando a aplicação que produz os dados registra seu esquema, o serializador do registro de esquemas valida que o registro sendo produzido pela aplicação é estruturado com os campos e os tipos de dados correspondentes a um esquema registrado. Se o esquema do registro não corresponder a um esquema registrado, o serializador retornará uma exceção e a aplicação falhará em entregar o registro ao destino. 

   Se nenhum esquema existir e o nome do esquema não for fornecido por meio das configurações do produtor, o esquema será criado com o mesmo nome que o nome do tópico (se Apache Kafka ou Amazon MSK) ou nome da transmissão (se Kinesis Data Streams).

   Cada registro tem uma definição de esquema e dados. A definição de esquema é consultada em relação aos esquemas e versões existentes no registro de esquemas.

   Por padrão, os produtores armazenam em cache as definições de esquema e IDs de versão de esquemas dos esquemas registrados. Se a definição da versão do esquema de um registro não corresponder ao que está disponível no cache, o produtor tentará validar o esquema com o registro de esquemas. Se a versão do esquema for válida, seu ID de versão e definição serão armazenados em cache localmente no produtor.

   Você pode ajustar o período de cache padrão (24 horas) dentro das propriedades opcionais do produtor na etapa n.º 3 de [Instalar as bibliotecas SerDe](schema-registry-gs-serde.md).

1. Serializar e entregar registros: se o registro estiver em conformidade com o esquema, o serializador decorará cada registro com o ID da versão do esquema, serializará o registro com base no formato de dados selecionado (AVRO, JSON ou Protobuf. Outros formatos em breve), compactará o registro (configuração opcional do produtor) e o entregará ao destino.

1. Os consumidores desserializam os dados: os consumidores que leem esses dados usam a biblioteca de desserialização do registro de esquemas, que analisa o ID da versão do esquema na carga útil do registro.

1. O desserializador pode solicitar o esquema do registro do esquemas: se esta for a primeira vez que o desserializador viu registros com um ID de versão do esquema específico, o desserializador, usando o ID da versão do esquema, solicitará o esquema do registro do esquemas e o armazenará localmente no consumidor. Se o registro de esquemas não puder desserializar o registro, o consumidor poderá registrar em log os dados do registro e seguir em frente, ou interromper a aplicação.

1. O desserializador usa o esquema para desserializar o registro: quando o desserializador recupera o ID da versão do esquema do registro do esquemas, ele descompacta o registro (se o registro enviado pelo produtor for compactado) e usa o esquema para o desserializar. Então, a aplicação processa o registro.

**nota**  
Criptografia: seus clientes se comunicam com o registro de esquemas por meio de chamadas de API que criptografam dados em trânsito usando criptografia TLS em HTTPS. Os esquemas armazenados no registro de esquemas são sempre criptografados em repouso usando uma chave do AWS Key Management Service (AWS KMS) gerenciada por um serviço.

**nota**  
Autorização do usuário: o registro de esquemas é compatível com políticas do IAM baseadas em identidade.

# Conceitos básicos do registro de esquemas
<a name="schema-registry-gs"></a>

As seções a seguir fornecem uma visão geral e orientações sobre como configurar e usar o registro de esquemas. Para obter informações sobre conceitos e componentes do registro de esquemas, consulte [Registro de esquemas do AWS Glue](schema-registry.md).

**Topics**
+ [Instalar as bibliotecas SerDe](schema-registry-gs-serde.md)
+ [Integração com o registro de esquemas do AWS Glue](schema-registry-integrations.md)
+ [Migração de um registro de esquemas de terceiros para o registro de esquemas do AWS Glue](schema-registry-integrations-migration.md)

# Instalar as bibliotecas SerDe
<a name="schema-registry-gs-serde"></a>

As bibliotecas SerDe fornecem um framework para serialização e desserialização de dados. 

Você instalará o serializador de código aberto para suas aplicações que produzem dados (coletivamente os “serializadores”). O serializador manipula serialização, compactação e interação com o registro de esquemas. O serializador extrai automaticamente o esquema de um registro sendo gravado em um destino compatível com o registro de esquemas, como o Amazon MSK. Da mesma forma, você instalará o desserializador de código aberto em suas aplicações que consomem dados.

# Implementação de Java
<a name="schema-registry-gs-serde-java"></a>

**nota**  
Pré-requisitos: antes de concluir as etapas a seguir, é necessário ter um cluster do Amazon Managed Streaming for Apache Kafka (Amazon MSK) ou do Apache Kafka em execução. Seus produtores e consumidores precisam estar em execução em Java 8 ou superior.

Para instalar as bibliotecas em produtores e consumidores:

1. Dentro dos arquivos pom.xml, tanto dos produtores quanto dos consumidores, adicione essa dependência com o código abaixo:

   ```
   <dependency>
       <groupId>software.amazon.glue</groupId>
       <artifactId>schema-registry-serde</artifactId>
       <version>1.1.5</version>
   </dependency>
   ```

   Como alternativa, você pode clonar o [repositório do registro de esquemas do AWS Glue do GitHub](https://github.com/awslabs/aws-glue-schema-registry).

1. Configure seus produtores com estas propriedades obrigatórias:

   ```
   props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); // Can replace StringSerializer.class.getName()) with any other key serializer that you may use
   props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, GlueSchemaRegistryKafkaSerializer.class.getName());
   props.put(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2");
   properties.put(AWSSchemaRegistryConstants.DATA_FORMAT, "JSON"); // OR "AVRO"
   ```

   Se não houver esquemas existentes, o registro automático precisará ser ativado (próxima etapa). Se você tiver um esquema que gostaria de aplicar, substitua “my-schema” (meu esquema) pelo nome do seu esquema. Além disso, o “registry-name” (nome do registro) deve ser fornecido se o registro automático do esquema estiver desativado. Se o esquema é criado sob o “default-registry” (registro padrão), o nome do registro pode ser omitido.

1. (Opcional) defina qualquer uma destas propriedades opcionais do produtor. Para obter descrições detalhadas das propriedades, consulte [o arquivo ReadMe](https://github.com/awslabs/aws-glue-schema-registry/blob/master/README.md).

   ```
   props.put(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, "true"); // If not passed, uses "false"
   props.put(AWSSchemaRegistryConstants.SCHEMA_NAME, "my-schema"); // If not passed, uses transport name (topic name in case of Kafka, or stream name in case of Kinesis Data Streams)
   props.put(AWSSchemaRegistryConstants.REGISTRY_NAME, "my-registry"); // If not passed, uses "default-registry"
   props.put(AWSSchemaRegistryConstants.CACHE_TIME_TO_LIVE_MILLIS, "86400000"); // If not passed, uses 86400000 (24 Hours)
   props.put(AWSSchemaRegistryConstants.CACHE_SIZE, "10"); // default value is 200
   props.put(AWSSchemaRegistryConstants.COMPATIBILITY_SETTING, Compatibility.FULL); // Pass a compatibility mode. If not passed, uses Compatibility.BACKWARD
   props.put(AWSSchemaRegistryConstants.DESCRIPTION, "This registry is used for several purposes."); // If not passed, constructs a description
   props.put(AWSSchemaRegistryConstants.COMPRESSION_TYPE, AWSSchemaRegistryConstants.COMPRESSION.ZLIB); // If not passed, records are sent uncompressed
   ```

   O registro automático registra a versão do esquema no registro padrão (“default-registry”). Se um `SCHEMA_NAME` não for especificado na etapa anterior, então o nome do tópico será inferido como `SCHEMA_NAME`. 

   Consulte [Versionamento e compatibilidade de esquema](schema-registry.md#schema-registry-compatibility), para obter mais informações sobre os modos de compatibilidade.

1. Configure seus consumidores com estas propriedades obrigatórias:

   ```
   props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
   props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, GlueSchemaRegistryKafkaDeserializer.class.getName());
   props.put(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2"); // Pass an Região da AWS
   props.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName()); // Only required for AVRO data format
   ```

1. (Opcional) defina essas propriedades opcionais do consumidor. Para obter descrições detalhadas das propriedades, consulte [o arquivo ReadMe](https://github.com/awslabs/aws-glue-schema-registry/blob/master/README.md).

   ```
   properties.put(AWSSchemaRegistryConstants.CACHE_TIME_TO_LIVE_MILLIS, "86400000"); // If not passed, uses 86400000
   props.put(AWSSchemaRegistryConstants.CACHE_SIZE, "10"); // default value is 200
   props.put(AWSSchemaRegistryConstants.SECONDARY_DESERIALIZER, "com.amazonaws.services.schemaregistry.deserializers.external.ThirdPartyDeserializer"); // For migration fall back scenario
   ```

# Implementação de C\$1
<a name="schema-registry-gs-serde-csharp"></a>

**nota**  
Pré-requisitos: antes de concluir as etapas a seguir, é necessário ter um cluster do Amazon Managed Streaming for Apache Kafka (Amazon MSK) ou do Apache Kafka em execução. Seus produtores e consumidores precisam estar em execução em .NET 8.0 ou superior.

## Instalação
<a name="schema-registry-gs-serde-csharp-install"></a>

Para aplicativos C\$1, instale o pacote AWS Glue Schema Registry SerDe NuGet usando um dos métodos a seguir:

**.NET CLI:**  
Para instalar o pacote, execute o comando a seguir:

```
dotnet add package Aws.Glue.SchemaRegistry --version 1.0.0-<rid>
```

onde `<rid>` poderia ser `1.0.0-linux-x64`, `1.0.0-linux-musl-x64` ou `1.0.0-linux-arm64`

**PackageReference (em seu arquivo .csproj):**  
Adicione o seguinte ao seu arqruivo de projeto:

```
<PackageReference Include="Aws.Glue.SchemaRegistry" Version="1.0.0-<rid>" />
```

onde `<rid>` poderia ser `1.0.0-linux-x64`, `1.0.0-linux-musl-x64` ou `1.0.0-linux-arm64`

## Definição do arquivo de configuração
<a name="schema-registry-gs-serde-csharp-config"></a>

Crie um arquivo de propriedades de configuração (por exemplo, `gsr-config.properties`) com as configurações necessárias:

**Configuração mínima:**  
A seguir você verá um exemplo de configuração mínima:

```
region=us-east-1
registry.name=default-registry
dataFormat=AVRO
schemaAutoRegistrationEnabled=true
```

## Usando a biblioteca cliente C\$1 Glue Schema para Kafka SerDes
<a name="schema-registry-gs-serde-csharp-kafka"></a>

**Uso do serializador de amostra:**  
O exemplo a seguir mostra como usar o serializador:

```
private static readonly string PROTOBUF_CONFIG_PATH = "<PATH_TO_CONFIG_FILE>";
var protobufSerializer = new GlueSchemaRegistryKafkaSerializer(PROTOBUF_CONFIG_PATH);
var serialized = protobufSerializer.Serialize(message, message.Descriptor.FullName);
// send serialized bytes to Kafka using producer.Produce(serialized)
```

**Uso do desserializador de amostra:**  
O exemplo a seguir mostra como usar o desserializador:

```
private static readonly string PROTOBUF_CONFIG_PATH = "<PATH_TO_CONFIG_FILE>";
var dataConfig = new GlueSchemaRegistryDataFormatConfiguration(
    new Dictionary<string, dynamic>
    {
        {
            GlueSchemaRegistryConstants.ProtobufMessageDescriptor, message.Descriptor
        }
    }
);
var protobufDeserializer = new GlueSchemaRegistryKafkaDeserializer(PROTOBUF_CONFIG_PATH, dataConfig);

// read message from Kafka using serialized = consumer.Consume()
var deserializedObject = protobufDeserializer.Deserialize(message.Descriptor.FullName, serialized);
```

## Usando a biblioteca cliente C\$1 Glue Schema para KafkaFlow para SerDes
<a name="schema-registry-gs-serde-csharp-kafkaflow"></a>

**Uso do serializador de amostra:**  
O exemplo a seguir mostra como configurar o KafkaFlow com o serializador:

```
services.AddKafka(kafka => kafka
    .UseConsoleLog()
    .AddCluster(cluster => cluster
        .WithBrokers(new[] { "localhost:9092" })
        .AddProducer<CustomerProducer>(producer => producer
            .DefaultTopic("customer-events")
            .AddMiddlewares(m => m
                .AddSerializer<GlueSchemaRegistryKafkaFlowProtobufSerializer<Customer>>(
                    () => new GlueSchemaRegistryKafkaFlowProtobufSerializer<Customer>("config/gsr-config.properties")
                )
            )
        )
    )
);
```

**Uso do desserializador de amostra:**  
O exemplo a seguir mostra como configurar o KafkaFlow com o desserializador:

```
.AddConsumer(consumer => consumer
    .Topic("customer-events")
    .WithGroupId("customer-group")
    .WithBufferSize(100)
    .WithWorkersCount(10)
    .AddMiddlewares(middlewares => middlewares
        .AddDeserializer<GlueSchemaRegistryKafkaFlowProtobufDeserializer<Customer>>(
            () => new GlueSchemaRegistryKafkaFlowProtobufDeserializer<Customer>("config/gsr-config.properties")
        )
        .AddTypedHandlers(h => h.AddHandler<CustomerHandler>())
    )
)
```

## Propriedades opcionais do produtor
<a name="schema-registry-gs-serde-csharp-optional"></a>

Você pode estender seu arquivo de configuração com propriedades opcionais adicionais:

```
# Auto-registration (if not passed, uses "false")
schemaAutoRegistrationEnabled=true

# Schema name (if not passed, uses topic name)
schema.name=my-schema

# Registry name (if not passed, uses "default-registry")
registry.name=my-registry

# Cache settings
cacheTimeToLiveMillis=86400000
cacheSize=200

# Compatibility mode (if not passed, uses BACKWARD)
compatibility=FULL

# Registry description
description=This registry is used for several purposes.

# Compression (if not passed, records are sent uncompressed)
compressionType=ZLIB
```

## Formatos de dados suportados
<a name="schema-registry-gs-serde-supported-formats"></a>

As implementações Java e C\$1 são compatíveis com os mesmos formatos de dados:
+ *AVRO*: formato binário Apache Avro
+ *JSON*: formato do esquema JSON
+ *PROTOBUF*: formato Protocol Buffers

## Observações
<a name="schema-registry-gs-serde-csharp-notes"></a>
+ Para começar a usar a biblioteca, visite [https://www.nuget.org/packages/AWS.Glue.SchemaRegistry](https://www.nuget.org/packages/AWS.Glue.SchemaRegistry)
+ O código-fonte está disponível em: [https://github.com/awslabs/aws-glue-schema-registry](https://github.com/awslabs/aws-glue-schema-registry)

# Criar um registro
<a name="schema-registry-gs3"></a>

Você pode usar o registro padrão ou criar quantos novos registros forem necessários usando as APIS do AWS Glue ou o console do AWS Glue.

**AWS GlueAPIs do**  
Você pode usar estas etapas para executar essa tarefa usando as APIs do AWS Glue.

Para usar a AWS CLI para APIs do registro de esquemas do AWS Glue, certifique-se de atualizar a AWS CLI para a versão mais recente.

 Para adicionar um novo registro, use a API do [Ação CreateRegistry (Python: create\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-CreateRegistry). Especifique `RegistryName` como o nome do registro a ser criado, com um comprimento máximo de 255, contendo apenas letras, números, hífens, sublinhados, cifrões ou marcas de hash. 

Especifique `Description` como uma string com não mais do que 2.048 bytes de comprimento, correspondente ao [padrão de string com várias linhas de endereço URI](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-common.html#aws-glue-api-common-_string-patterns). 

Como alternativa, especifique um ou mais `Tags` para seu registro, como uma matriz de mapa de pares de chave-valor.

```
aws glue create-registry --registry-name registryName1 --description description
```

Quando seu registro é criado, ele recebe um nome do recurso da Amazon (ARN), que você pode visualizar no `RegistryArn` da resposta da API. Agora que você criou um registro, crie um ou mais esquemas para esse registro.

**AWS GlueConsole do**  
Para adicionar um novo registro no console do AWS Glue:

1. Faça login no Console de gerenciamento da AWS e 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, em **Data catalog** (Catálogo de dados), escolha **Schema registries** (Registros de esquemas).

1. Escolha **Add registry** (Adicionar registro).

1. Digite um **Registry name** (Nome de registro) para o registro composto por letras, números, hifens ou sublinhados. Esse nome não pode ser alterado.

1. Digite uma **Description** (Descrição) (opcional) para o registro.

1. Opcionalmente, aplique uma ou mais tags ao registro. Escolha **Add new tag** (Adicionar nova tag), especifique um **Tag key** (Chave de tag) e, opcionalmente, um **Tag value** (Valor da tag).

1. Escolha **Add registry** (Adicionar registro).

![\[Exemplo de criação de um registro.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/schema_reg_create_registry.png)


Quando seu registro é criado, ele recebe um nome do recurso da Amazon (ARN), que você pode visualizar escolhendo o registro na lista em **Schema registries** (Registros de esquemas). Agora que você criou um registro, crie um ou mais esquemas para esse registro.

# Lidar com um registro específico (JAVA POJO) para JSON
<a name="schema-registry-gs-json-java-pojo"></a>

Você pode usar um plain old Java object (POJO) e transmitir o objeto como um registro. Isso é semelhante à noção de um registro específico no AVRO. O [mbknor-jackson-jsonschema](https://github.com/mbknor/mbknor-jackson-jsonSchema) pode gerar um esquema JSON para o POJO transmitido. Essa biblioteca também pode injetar informações adicionais no esquema JSON.

A biblioteca do registro de esquemas do AWS Glue usa o campo “className” injetado no esquema para fornecer um nome de classe totalmente classificado. O campo “className” é usado pelo desserializador para desserializar em um objeto dessa classe.

```
 Example class :

@JsonSchemaDescription("This is a car")
@JsonSchemaTitle("Simple Car Schema")
@Builder
@AllArgsConstructor
@EqualsAndHashCode
// Fully qualified class name to be added to an additionally injected property
// called className for deserializer to determine which class to deserialize
// the bytes into
@JsonSchemaInject(
        strings = {@JsonSchemaString(path = "className",
                value = "com.amazonaws.services.schemaregistry.integrationtests.generators.Car")}
)
// List of annotations to help infer JSON Schema are defined by https://github.com/mbknor/mbknor-jackson-jsonSchema
public class Car {
    @JsonProperty(required = true)
    private String make;

    @JsonProperty(required = true)
    private String model;

    @JsonSchemaDefault("true")
    @JsonProperty
    public boolean used;

    @JsonSchemaInject(ints = {@JsonSchemaInt(path = "multipleOf", value = 1000)})
    @Max(200000)
    @JsonProperty
    private int miles;

    @Min(2000)
    @JsonProperty
    private int year;

    @JsonProperty
    private Date purchaseDate;

    @JsonProperty
    @JsonFormat(shape = JsonFormat.Shape.NUMBER)
    private Date listedDate;

    @JsonProperty
    private String[] owners;

    @JsonProperty
    private Collection<Float> serviceChecks;

    // Empty constructor is required by Jackson to deserialize bytes
    // into an Object of this class
    public Car() {}
}
```

# Criar um esquema
<a name="schema-registry-gs4"></a>

Você pode criar um esquema usando as APIs do AWS Glue ou o console do AWS Glue. 

**AWS GlueAPIs do**  
Você pode usar estas etapas para executar essa tarefa usando as APIs do AWS Glue.

Para adicionar um novo esquema, use a API [Ação CreateSchema (Python: create\$1esquema)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-CreateSchema).

Especifique uma estrutura `RegistryId` para indicar um registro para o esquema. Ou omita o `RegistryId` para usar o registro padrão.

Especifique um `SchemaName` consistindo em letras, números, hifens ou sublinhados e `DataFormat` como **AVRO** ou **JSON**. O `DataFormat`, uma vez definido em um esquema, não pode ser alterado.

Especifique um modo de `Compatibility`:
+ *Backward (Anterior) (recomendado)*: o consumidor pode ler a versão atual e a anterior.
+ *Backward all (Todas as anteriores)*: o consumidor pode ler a versão atual e todas as anteriores.
+ *Forward (Próxima)*: o consumidor pode ler a versão atual e a subsequente.
+ *Forward all (Todas as próximas)*: o consumidor pode ler a versão atual e todas as subsequentes.
+ *Full (Completo)*: combinação de Backward e Forward.
+ *Full all (Completo total)*: combinação de Backward all e Forward all.
+ *None (Nenhum)*: nenhuma verificação de compatibilidade é realizada.
+ *Disabled (Desabilitado)*: impede qualquer versionamento para esse esquema.

Opcionalmente, especifique `Tags` para seu esquema. 

Especifique uma `SchemaDefinition` para definir o esquema no formato de dados Avro, JSON ou Protobuf. Consulte os exemplos.

Para o formato de dados Avro:

```
aws glue create-schema --registry-id RegistryName="registryName1" --schema-name testschema --compatibility NONE --data-format AVRO --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}"
```

```
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName1" --schema-name testschema --compatibility NONE --data-format AVRO  --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}"
```

Para o formato de dados JSON:

```
aws glue create-schema --registry-id RegistryName="registryName" --schema-name testSchemaJson --compatibility NONE --data-format JSON --schema-definition "{\"$schema\": \"http://json-schema.org/draft-07/schema#\",\"type\":\"object\",\"properties\":{\"f1\":{\"type\":\"string\"}}}"
```

```
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName" --schema-name testSchemaJson --compatibility NONE --data-format JSON --schema-definition "{\"$schema\": \"http://json-schema.org/draft-07/schema#\",\"type\":\"object\",\"properties\":{\"f1\":{\"type\":\"string\"}}}"
```

Para o formato de dados Protobuf:

```
aws glue create-schema --registry-id RegistryName="registryName" --schema-name testSchemaProtobuf --compatibility NONE --data-format PROTOBUF --schema-definition "syntax = \"proto2\";package org.test;message Basic { optional int32 basic = 1;}"
```

```
aws glue create-schema --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName" --schema-name testSchemaProtobuf --compatibility NONE --data-format PROTOBUF --schema-definition "syntax = \"proto2\";package org.test;message Basic { optional int32 basic = 1;}"
```

**AWS GlueConsole do**  
Para adicionar um novo esquema usando o console do AWS Glue:

1. Faça login no Console de Gerenciamento da AWS e 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, em **Data catalog** (Catálogo de dados), escolha **Schema** (Esquema).

1. Escolha **Add schema** (Adicionar esquema).

1. Digite um **Schema name** (Nome do esquema), consistindo em letras, números, hifens, sublinhados, cifrões ou marcas de hash. Esse nome não pode ser alterado.

1. Escolha o **Registry** (Registro) em que o esquema será armazenado no menu suspenso. O registro pai não pode ser alterado após a criação.

1. Deixe **Data format** (Formato de dados) como *Apache Avro* ou *JSON*. Esse formato se aplica a todas as versões desse esquema.

1. Escolha um **Compatibility mode** (Modo de compatibilidade).
   + *Backward (Anterior) (recomendado)*: o receptor pode ler a versão atual e a anterior.
   + *Backward all (Todas as anteriores)*: o receptor pode ler a versão atual e todas as anteriores.
   + *Forward (Próxima)*: o remetente pode gravar a versão atual e a anterior.
   + *Forward all (Todas as próximas)*: o remetente pode gravar a versão atual e todas as anteriores.
   + *Full (Completo)*: combinação de Backward e Forward.
   + *Full all (Completo total)*: combinação de Backward All e Forward All.
   + *None (Nenhum)*: nenhuma verificação de compatibilidade é realizada.
   + *Disabled (Desabilitado)*: impede qualquer versionamento para esse esquema.

1. Insira uma **Description** (Descrição) opcional de até 250 caracteres para o registro.  
![\[Exemplo de criação de um esquema.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/schema_reg_create_schema.png)

1. Opcionalmente, aplique uma ou mais tags ao esquema. Escolha **Add new tag** (Adicionar nova tag), especifique um **Tag key** (Chave de tag) e, opcionalmente, um **Tag value** (Valor da tag).

1. Na caixa **First schema version** (Primeira versão do esquema), insira ou cole o esquema inicial.

   Para o formato Avro, consulte [Trabalhar com o formato de dados Avro](#schema-registry-avro)

   Para o formato JSON, consulte [Trabalhar com o formato de dados JSON](#schema-registry-json)

1. Opcionalmente, escolha **Add metadata** (Adicionar metadados) para adicionar metadados de versão para anotar ou classificar a versão do esquema.

1. Selecione **Create schema and version** (Criar esquema e versão).

![\[Exemplo de criação de um esquema.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/schema_reg_create_schema2.png)


O esquema é criado e aparece na lista em **Schemas** (Esquemas).

## Trabalhar com o formato de dados Avro
<a name="schema-registry-avro"></a>

O Avro fornece serviços de serialização e troca de dados. O Avro armazena a definição de dados no formato JSON facilitando a leitura e interpretação. Os dados em si são armazenados em formato binário.

Para obter informações sobre como definir um esquema do Apache Avro, consulte a [especificação do Apache Avro](http://avro.apache.org/docs/current/spec.html).

## Trabalhar com o formato de dados JSON
<a name="schema-registry-json"></a>

Os dados podem ser serializados com o formato JSON. O [formato do esquema JSON](https://json-schema.org/) define o padrão para o formato de esquema JSON.

# Atualizar um esquema ou registro
<a name="schema-registry-gs5"></a>

Uma vez criados, você pode editar seus esquemas, versões de esquema ou registro.

## Atualizar um registro
<a name="schema-registry-gs5a"></a>

Você pode atualizar um registro usando as APIs do AWS Glue ou o console do AWS Glue. O nome de um registro existente não pode ser editado. Você pode editar a descrição de um registro.

**AWS GlueAPIs do**  
Para atualizar um registro existente, use a API [Ação UpdateRegistry (Python: update\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-UpdateRegistry).

Especifique uma estrutura `RegistryId` para indicar o registro que você deseja atualizar. Informe uma `Description` para alterar a descrição de um registro.

```
aws glue update-registry --description updatedDescription --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName1"
```

**AWS GlueConsole do**  
Para atualizar um registro usando o console do AWS Glue:

1. Faça login no Console de gerenciamento da AWS e 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, em **Data catalog** (Catálogo de dados), escolha **Schema registries** (Registros de esquemas).

1. Escolha um registro na lista de registros, marcando a caixa correspondente.

1. No menu **Action** (Ação), escolha **Edit registry** (Editar registro).

# Atualizar um esquema
<a name="schema-registry-gs5b"></a>

Você pode atualizar a descrição ou a configuração de compatibilidade de um esquema.

Para atualizar um esquema existente, use a API [Ação UpdateSchema (Python: update\$1schema)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-UpdateSchema).

Especifique uma estrutura `SchemaId` para indicar o esquema que você deseja atualizar. Um de `VersionNumber` ou `Compatibility` tem de ser fornecido.

Exemplo de código 11:

```
aws glue update-schema --description testDescription --schema-id SchemaName="testSchema1",RegistryName="registryName1" --schema-version-number LatestVersion=true --compatibility NONE
```

```
aws glue update-schema --description testDescription --schema-id SchemaArn="arn:aws:glue:us-east-2:901234567890:schema/registryName1/testSchema1" --schema-version-number LatestVersion=true --compatibility NONE
```

# Adicionar uma versão de esquema
<a name="schema-registry-gs5c"></a>

Quando você adiciona uma versão de esquema, precisa comparar as versões para se certificar de que o novo esquema será aceito.

Para adicionar uma nova versão a um esquema existente, use a API [Ação RegisterSchemaVersion (Python: register\$1schema\$1version)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-RegisterSchemaVersion).

Especifique um estrutura `SchemaId` para indicar o esquema no qual você deseja adicionar uma versão e uma `SchemaDefinition` para definir o esquema.

Exemplo de código 12:

```
aws glue register-schema-version --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}" --schema-id SchemaArn="arn:aws:glue:us-east-1:901234567890:schema/registryName/testschema"
```

```
aws glue register-schema-version --schema-definition "{\"type\": \"record\", \"name\": \"r1\", \"fields\": [ {\"name\": \"f1\", \"type\": \"int\"}, {\"name\": \"f2\", \"type\": \"string\"} ]}" --schema-id SchemaName="testschema",RegistryName="testregistry"
```

1. Faça login no Console de gerenciamento da AWS e 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, em **Data catalog** (Catálogo de dados), escolha **Schema** (Esquema).

1. Escolha o esquema na lista de esquemas, marcando a caixa correspondente.

1. Escolha um ou mais esquemas na lista, marcando as caixas.

1. No menu **Action** (Ação), escolha **Register new version** (Registrar nova versão).

1. Na caixa **New version** (Nova versão), insira ou cole seu novo esquema.

1. Escolha **Compare with previous version** (Comparar com a versão anterior) para ver as diferenças em relação à versão anterior do esquema.

1. Opcionalmente, escolha **Add metadata** (Adicionar metadados) para adicionar metadados de versão para anotar ou classificar a versão do esquema. Digite a **Key** (Chave) e o **Value** (Valor) opcional.

1. Escolha **Register version** (Registrar versão).

![\[Adicionar uma versão de esquema.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/schema_reg_add_schema_version.png)


As versões dos esquemas aparecem na lista de versões. Se a versão alterou o modo de compatibilidade, ela será marcada como um ponto de verificação.

## Exemplo de comparação de versões de esquema
<a name="schema-registry-gs5c1"></a>

Quando você escolher **Compare with previous version** (Comparar com a versão anterior), você verá a versão nova e a anterior exibidas juntas. As informações alteradas serão destacadas da seguinte forma:
+ *Amarelo*: indica informações alteradas.
+ *Verde*: indica o conteúdo adicionado na versão mais recente.
+ *Vermelho*: indica o conteúdo removido da versão mais recente.

Você também pode comparar com versões anteriores.

![\[Exemplo de comparação de versões de esquema.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/schema_reg_version_comparison.png)


# Excluir um esquema ou registro
<a name="schema-registry-gs7"></a>

Excluir um esquema, uma versão de esquema ou um registro são ações permanentes que não podem ser desfeitas.

## Excluir um esquema
<a name="schema-registry-gs7a"></a>

Você pode querer excluir um esquema quando ele não for mais usado dentro de um registro usando o Console de gerenciamento da AWS ou a API [Ação DeleteSchema (Python: delete\$1schema)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteSchema).

Excluir um ou mais esquemas é uma ação permanente que não pode ser desfeita. Certifique-se de que o esquema ou esquemas não são mais necessários.

Para excluir um esquema do registro, chame a API [Ação DeleteSchema (Python: delete\$1schema)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteSchema), especificando a estrutura `SchemaId` para identificar o esquema.

Por exemplo:

```
aws glue delete-schema --schema-id SchemaArn="arn:aws:glue:us-east-2:901234567890:schema/registryName1/schemaname"
```

```
aws glue delete-schema --schema-id SchemaName="TestSchema6-deleteschemabyname",RegistryName="default-registry"
```

**AWS GlueConsole do**  
Para excluir um esquema com o console do AWS Glue:

1. Faça login no Console de gerenciamento da AWS e 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, em **Data catalog** (Catálogo de dados), escolha **Schema registries** (Registros de esquemas).

1. Escolha o registro que contém o esquema na lista de registros.

1. Escolha um ou mais esquemas na lista, marcando as caixas.

1. No menu **Actions** (Ações), escolha **Delete schema** (Excluir esquema).

1. Insira o texto **Delete** no campo para confirmar a exclusão.

1. Selecione a opção **Excluir**.

Os esquemas especificados são excluídos do registro.

## Excluir uma versão de esquema
<a name="schema-registry-gs7b"></a>

À medida que os esquemas se acumulam no registro, você pode querer excluir versões de esquema indesejadas usando o Console de gerenciamento da AWS ou a API [Ação DeleteSchemaVersions (Python: delete\$1schema\$1versions)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteSchemaVersions). Excluir uma ou mais versões de esquema é uma ação permanente que não pode ser desfeita. Certifique-se de que as versões de esquema não são mais necessárias.

Ao excluir versões de esquema, observe as seguintes restrições:
+ Você não pode excluir uma versão marcada como ponto de verificação.
+ O intervalo de versões contíguas não pode ser superior a 25.
+ A versão mais recente do esquema não deve estar em estado pendente.

Especifique a estrutura `SchemaId` para identificar o esquema e especifique `Versions` como um intervalo de versões a serem excluídas. Para obter mais informações sobre como especificar uma versão ou intervalo de versões, consulte [Ação DeleteRegistry (Python: delete\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteRegistry). As versões de esquema especificadas são excluídas do registro.

Chamar a API [Ação ListSchemaVersions (Python: list\$1schema\$1versions)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-ListSchemaVersions) após essa chamada listará o status das versões excluídas.

Por exemplo:

```
aws glue delete-schema-versions --schema-id SchemaName="TestSchema6",RegistryName="default-registry" --versions "1-1"
```

```
aws glue delete-schema-versions --schema-id SchemaArn="arn:aws:glue:us-east-2:901234567890:schema/default-registry/TestSchema6-NON-Existent" --versions "1-1"
```

1. Faça login no Console de gerenciamento da AWS e 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, em **Data catalog** (Catálogo de dados), escolha **Schema registries** (Registros de esquemas).

1. Escolha o registro que contém o esquema na lista de registros.

1. Escolha um ou mais esquemas na lista, marcando as caixas.

1. No menu **Actions** (Ações), escolha **Delete schema** (Excluir esquema).

1. Insira o texto **Delete** no campo para confirmar a exclusão.

1. Escolha **Excluir**.

As versões de esquema especificadas são excluídas do registro.

# Excluir um registro
<a name="schema-registry-gs7c"></a>

Você pode querer excluir um registro quando os esquemas que ele contém não devem mais ser organizados nele. Você precisará reatribuir esses esquemas a outro registro.

Excluir um ou mais registros é uma ação permanente que não pode ser desfeita. Certifique-se de que o registro ou registros não são mais necessários.

O registro padrão pode ser excluído usando a AWS CLI.

**AWS GlueAPI**  
Para excluir todo o registro, incluindo o esquema e todas as suas versões, chame a API [Ação DeleteRegistry (Python: delete\$1registry)](aws-glue-api-schema-registry-api.md#aws-glue-api-schema-registry-api-DeleteRegistry). Especifique uma estrutura `RegistryId` para identificar o registro.

Por exemplo:

```
aws glue delete-registry --registry-id RegistryArn="arn:aws:glue:us-east-2:901234567890:registry/registryName1"
```

```
aws glue delete-registry --registry-id RegistryName="TestRegistry-deletebyname"
```

Para obter o status da operação de exclusão, é possível chamar a API `GetRegistry` após a chamada assíncrona.

**AWS GlueConsole do**  
Para excluir um registro do console do AWS Glue:

1. Faça login no Console de gerenciamento da AWS e 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, em **Data catalog** (Catálogo de dados), escolha **Schema registries** (Registros de esquemas).

1. Escolha um registro na lista, marcando uma caixa.

1. No menu **Action** (Ação), escolha **Delete registry** (Excluir registro).

1. Insira o texto **Delete** no campo para confirmar a exclusão.

1. Selecione a opção **Excluir**.

Os registros que você selecionou são excluídos do AWS Glue.

## Exemplos do IAM para serializadores
<a name="schema-registry-gs1"></a>

**nota**  
AWSAs políticas gerenciadas pela concedem as permissões necessárias para casos de uso comuns. Para obter informações sobre como usar políticas gerenciadas para gerenciar o registro do esquema, consulte [AWS Políticas gerenciadas pela (predefinidas) para o AWS Glue](security-iam-awsmanpol.md#access-policy-examples-aws-managed). 

Para serializadores, você deve criar uma política mínima semelhante à abaixo, para lhe dar a capacidade de encontrar o `schemaVersionId` para uma determinada definição de esquema. Observe que você deve ter permissões de leitura no registro para ler os esquemas no registro. Você pode limitar os registros que podem ser lidos usando a cláusula `Resource`.

Exemplo de código 13:

```
{
    "Sid" : "GetSchemaByDefinition",
    "Effect" : "Allow",
    "Action" :
	[
        "glue:GetSchemaByDefinition"
    ],
        "Resource" : ["arn:aws:glue:us-east-2:012345678:registry/registryname-1",
                      "arn:aws:glue:us-east-2:012345678:schema/registryname-1/schemaname-1",
                      "arn:aws:glue:us-east-2:012345678:schema/registryname-1/schemaname-2"
                     ]
}
```

Além disso, você também pode permitir que os produtores criem novos esquemas e versões ao incluir os seguintes métodos extras. Observe que você deve ser capaz de inspecionar o registro para adicionar/remover/evoluir os esquemas dentro dele. Você pode limitar os registros que podem ser inspecionados usando a cláusula `Resource`.

Exemplo de código 14:

```
{
    "Sid" : "RegisterSchemaWithMetadata",
    "Effect" : "Allow",
    "Action" :
	[
        "glue:GetSchemaByDefinition",
        "glue:CreateSchema",
        "glue:RegisterSchemaVersion",
        "glue:PutSchemaVersionMetadata",
    ],
    "Resource" : ["arn:aws:glue:aws-region:123456789012:registry/registryname-1",
                  "arn:aws:glue:aws-region:123456789012:schema/registryname-1/schemaname-1",
                  "arn:aws:glue:aws-region:123456789012:schema/registryname-1/schemaname-2"
                 ]
}
```

## Exemplos do IAM para desserializadores
<a name="schema-registry-gs1b"></a>

Para desserializadores (lado do consumidor), você deve criar uma política semelhante à abaixo para permitir que o desserializador busque o esquema do registro de esquemas para desserialização. Observe que você deve ser capaz de inspecionar o registro a fim de buscar os esquemas dentro dele.

Exemplo de código 15:

```
{
    "Sid" : "GetSchemaVersion",
    "Effect" : "Allow",
    "Action" :
	[
        "glue:GetSchemaVersion"
    ],
    "Resource" : ["*"]
}
```

## Conectividade privada usando AWS PrivateLink
<a name="schema-registry-gs-private"></a>

Você pode usar o AWS PrivateLink para conectar a VPC do produtor de dados ao AWS Glue definindo um endpoint da VPC de interface para o AWS Glue. Quando você usa um endpoint da VPC de interface, a comunicação entre sua VPC e o AWS Glue é realizada inteiramente dentro da rede da AWS. Para obter mais informações, consulte [Usar o AWS Glue com endpoints da VPC](https://docs.aws.amazon.com/glue/latest/dg/vpc-endpoint.html).

# Acessar métricas do Amazon CloudWatch
<a name="schema-registry-gs-monitoring"></a>

As métricas do Amazon CloudWatch estão disponíveis como parte do nível gratuito do CloudWatch. Também é possível visualizá-las no console do CloudWatch. As métricas de nível de API incluem CreateSchema (sucesso e latência), GetSchemaByDefinition (sucesso e latência), GetSchemaVersion (sucesso e latência), RegisterSchemaVersion (sucesso e latência) e PutSchemaVersionMetadata (sucesso e latência). As métricas de nível de recurso incluem Registry.ThrottledByLimit, SchemaVersion.ThrottledByLimit e SchemaVersion.Size.

# Exemplo de modelo do CloudFormation para o registro de esquemas
<a name="schema-registry-integrations-cfn"></a>

Veja a seguir um modelo de exemplo para criar recursos do registro de esquemas no CloudFormation. Para criar essa pilha em sua conta, copie o modelo acima em um arquivo `SampleTemplate.yaml` e execute o seguinte comando:

```
aws cloudformation create-stack --stack-name ABCSchemaRegistryStack --template-body "'cat SampleTemplate.yaml'"
```

Este exemplo usa `AWS::Glue::Registry` para criar um registro, `AWS::Glue::Schema` para criar um esquema, `AWS::Glue::SchemaVersion` para criar uma versão de esquema e `AWS::Glue::SchemaVersionMetadata` para preencher os metadados da versão do esquema. 

```
Description: "A sample CloudFormation template for creating Schema Registry resources."
Resources:
  ABCRegistry:
    Type: "AWS::Glue::Registry"
    Properties:
      Name: "ABCSchemaRegistry"
      Description: "ABC Corp. Schema Registry"
      Tags:
        Project: "Foo"
  ABCSchema:
    Type: "AWS::Glue::Schema"
    Properties:
      Registry:
        Arn: !Ref ABCRegistry
      Name: "TestSchema"
      Compatibility: "NONE"
      DataFormat: "AVRO"
      SchemaDefinition: >
        {"namespace":"foo.avro","type":"record","name":"user","fields":[{"name":"name","type":"string"},{"name":"favorite_number","type":"int"}]}
      Tags:
        Project: "Foo"
  SecondSchemaVersion:
    Type: "AWS::Glue::SchemaVersion"
    Properties:
      Schema:
        SchemaArn: !Ref ABCSchema
      SchemaDefinition: >
        {"namespace":"foo.avro","type":"record","name":"user","fields":[{"name":"status","type":"string", "default":"ON"}, {"name":"name","type":"string"},{"name":"favorite_number","type":"int"}]}
  FirstSchemaVersionMetadata:
    Type: "AWS::Glue::SchemaVersionMetadata"
    Properties:
      SchemaVersionId: !GetAtt ABCSchema.InitialSchemaVersionId
      Key: "Application"
      Value: "Kinesis"
  SecondSchemaVersionMetadata:
    Type: "AWS::Glue::SchemaVersionMetadata"
    Properties:
      SchemaVersionId: !Ref SecondSchemaVersion
      Key: "Application"
      Value: "Kinesis"
```

# Integração com o registro de esquemas do AWS Glue
<a name="schema-registry-integrations"></a>

Estas seções descrevem integrações com o registro de esquemas do AWS Glue. Os exemplos nesta seção mostram um esquema com formato de dados AVRO. Para obter mais exemplos, incluindo esquemas com formato de dados JSON, consulte os testes de integração e as informações no arquivo ReadMe no [repositório de código aberto do registro de esquemas do AWS Glue](https://github.com/awslabs/aws-glue-schema-registry).

**Topics**
+ [Caso de uso: conectar registro de esquemas ao Amazon MSK ou Apache Kafka](#schema-registry-integrations-amazon-msk)
+ [Caso de uso: integração do Amazon Kinesis Data Streams ao registro de esquemas do AWS Glue](#schema-registry-integrations-kds)
+ [Caso de uso: Amazon Managed Service for Apache Flink](#schema-registry-integrations-kinesis-data-analytics-apache-flink)
+ [Caso de uso: integração com o AWS Lambda](#schema-registry-integrations-aws-lambda)
+ [Caso de uso: AWS Glue Data Catalog](#schema-registry-integrations-aws-glue-data-catalog)
+ [Caso de uso: transmissão no AWS Glue](#schema-registry-integrations-aws-glue-streaming)
+ [Caso de uso: Apache Kafka Streams](#schema-registry-integrations-apache-kafka-streams)

## Caso de uso: conectar registro de esquemas ao Amazon MSK ou Apache Kafka
<a name="schema-registry-integrations-amazon-msk"></a>

Vamos supor que você está gravando dados em um tópico do Apache Kafka. Você pode seguir estas etapas para começar.

1. Crie um cluster do Amazon Managed Streaming for Apache Kafka (Amazon MSK) ou do Apache Kafka com pelo menos um tópico. Se estiver criando um cluster do Amazon MSK, você pode usar o Console de gerenciamento da AWS. Para obter mais informações: [Conceitos básicos do uso do Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/getting-started.html) no *Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka*.

1. Siga o passo [Instalar as bibliotecas SerDe](schema-registry-gs-serde.md) acima.

1. Para criar registros de esquemas, esquemas ou versões de esquema, siga as instruções na seção [Conceitos básicos do registro de esquemas](schema-registry-gs.md) deste documento.

1. Inicie seus produtores e consumidores para usar o registro de esquemas para gravar e ler registros de/para o tópico do Amazon MSK ou Apache Kafka. Um exemplo de código de produtor e consumidor pode ser encontrado no [arquivo ReadMe](https://github.com/awslabs/aws-glue-schema-registry/blob/master/README.md) das bibliotecas Serde. A biblioteca do registro de esquemas no produtor serializará automaticamente o registro e decorará o registro com um ID de versão do esquema.

1. Se o esquema desse registro tiver sido inserido, ou se o registro automático estiver ativado, o esquema será registrado no registro do esquemas.

1. O consumidor lendo do tópico do Amazon MSK ou Apache Kafka, usando a biblioteca do registro de esquemas do AWS Glue, pesquisará automaticamente o esquema no registro do esquemas.

## Caso de uso: integração do Amazon Kinesis Data Streams ao registro de esquemas do AWS Glue
<a name="schema-registry-integrations-kds"></a>

Essa integração requer que você tenha um fluxo de dados existente do Amazon Kinesis. Para obter mais informações, consulte [Conceitos básicos do Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/getting-started.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.

Há duas maneiras de interagir com os dados em um fluxo de dados do Kinesis.
+ Por meio das bibliotecas do Kinesis Producer Library (KPL) e Kinesis Client Library (KCL) em Java. Suporte a várias linguagens não é fornecido.
+ Por maio das APIs `PutRecords`, `PutRecord` e `GetRecords` do Kinesis Data Streams disponíveis no AWS SDK para Java.

Se você usa atualmente as bibliotecas KPL/KCL, recomendamos continuar usando esse método. Há versões atualizadas da KCL e KPL com o registro de esquemas integrado, como mostrado nos exemplos. Caso contrário, você pode usar o código de exemplo para utilizar o registro do esquemas do AWS Glue se estiver usando as APIs do KDS diretamente.

A integração do registro de esquemas só está disponível com a KPL v0.14.2 ou posterior e com a KCL v2.3 ou posterior. A integração do registro de esquemas com JSON só está disponível com a KPL v0.14.8 ou posterior e com a KCL v2.3.6 ou posterior.

### Interagir com dados usando o Kinesis SDK V2
<a name="schema-registry-integrations-kds-sdk-v2"></a>

Esta seção descreve a interação com o Kinesis usando o Kinesis SDK V2

```
// Example JSON Record, you can construct a AVRO record also
private static final JsonDataWithSchema record = JsonDataWithSchema.builder(schemaString, payloadString);
private static final DataFormat dataFormat = DataFormat.JSON;

//Configurations for Schema Registry
GlueSchemaRegistryConfiguration gsrConfig = new GlueSchemaRegistryConfiguration("us-east-1");

GlueSchemaRegistrySerializer glueSchemaRegistrySerializer =
        new GlueSchemaRegistrySerializerImpl(awsCredentialsProvider, gsrConfig);
GlueSchemaRegistryDataFormatSerializer dataFormatSerializer =
        new GlueSchemaRegistrySerializerFactory().getInstance(dataFormat, gsrConfig);

Schema gsrSchema =
        new Schema(dataFormatSerializer.getSchemaDefinition(record), dataFormat.name(), "MySchema");

byte[] serializedBytes = dataFormatSerializer.serialize(record);

byte[] gsrEncodedBytes = glueSchemaRegistrySerializer.encode(streamName, gsrSchema, serializedBytes);

PutRecordRequest putRecordRequest = PutRecordRequest.builder()
        .streamName(streamName)
        .partitionKey("partitionKey")
        .data(SdkBytes.fromByteArray(gsrEncodedBytes))
        .build();
shardId = kinesisClient.putRecord(putRecordRequest)
        .get()
        .shardId();

GlueSchemaRegistryDeserializer glueSchemaRegistryDeserializer = new GlueSchemaRegistryDeserializerImpl(awsCredentialsProvider, gsrConfig);

GlueSchemaRegistryDataFormatDeserializer gsrDataFormatDeserializer =
        glueSchemaRegistryDeserializerFactory.getInstance(dataFormat, gsrConfig);

GetShardIteratorRequest getShardIteratorRequest = GetShardIteratorRequest.builder()
        .streamName(streamName)
        .shardId(shardId)
        .shardIteratorType(ShardIteratorType.TRIM_HORIZON)
        .build();

String shardIterator = kinesisClient.getShardIterator(getShardIteratorRequest)
        .get()
        .shardIterator();

GetRecordsRequest getRecordRequest = GetRecordsRequest.builder()
        .shardIterator(shardIterator)
        .build();
GetRecordsResponse recordsResponse = kinesisClient.getRecords(getRecordRequest)
        .get();

List<Object> consumerRecords = new ArrayList<>();
List<Record> recordsFromKinesis = recordsResponse.records();

for (int i = 0; i < recordsFromKinesis.size(); i++) {
    byte[] consumedBytes = recordsFromKinesis.get(i)
            .data()
            .asByteArray();

    Schema gsrSchema = glueSchemaRegistryDeserializer.getSchema(consumedBytes);
    Object decodedRecord = gsrDataFormatDeserializer.deserialize(ByteBuffer.wrap(consumedBytes),
                                                                    gsrSchema.getSchemaDefinition());
    consumerRecords.add(decodedRecord);
}
```

### Interagir com dados usando as bibliotecas KPL/KCL
<a name="schema-registry-integrations-kds-libraries"></a>

Esta seção descreve a integração do Kinesis Data Streams com o registro de esquemas usando as bibliotecas KPL/KCL. Para obter mais informações sobre o uso da KPL/KCL, consulte [Desenvolver produtores usando a biblioteca de produtor do Amazon Kinesis](https://docs.aws.amazon.com/streams/latest/dev/developing-producers-with-kpl.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.

#### Configurar o registro de esquemas na KPL
<a name="schema-registry-integrations-kds-libraries-kpl"></a>

1. Configure a definição do esquema para os dados, o formato de dados e o nome do esquema criados no registro de esquemas do AWS Glue.

1. Opcionalmente, configure o objeto `GlueSchemaRegistryConfiguration`.

1. Transmita o objeto de esquema para `addUserRecord API`.

   ```
   private static final String SCHEMA_DEFINITION = "{"namespace": "example.avro",\n"
   + " "type": "record",\n"
   + " "name": "User",\n"
   + " "fields": [\n"
   + " {"name": "name", "type": "string"},\n"
   + " {"name": "favorite_number", "type": ["int", "null"]},\n"
   + " {"name": "favorite_color", "type": ["string", "null"]}\n"
   + " ]\n"
   + "}";
   
   KinesisProducerConfiguration config = new KinesisProducerConfiguration();
   config.setRegion("us-west-1")
   
   //[Optional] configuration for Schema Registry.
   
   GlueSchemaRegistryConfiguration schemaRegistryConfig =
   new GlueSchemaRegistryConfiguration("us-west-1");
   
   schemaRegistryConfig.setCompression(true);
   
   config.setGlueSchemaRegistryConfiguration(schemaRegistryConfig);
   
   ///Optional configuration ends.
   
   final KinesisProducer producer =
         new KinesisProducer(config);
   
   final ByteBuffer data = getDataToSend();
   
   com.amazonaws.services.schemaregistry.common.Schema gsrSchema =
       new Schema(SCHEMA_DEFINITION, DataFormat.AVRO.toString(), "demoSchema");
   
   ListenableFuture<UserRecordResult> f = producer.addUserRecord(
   config.getStreamName(), TIMESTAMP, Utils.randomExplicitHashKey(), data, gsrSchema);
   
   private static ByteBuffer getDataToSend() {
         org.apache.avro.Schema avroSchema =
           new org.apache.avro.Schema.Parser().parse(SCHEMA_DEFINITION);
   
         GenericRecord user = new GenericData.Record(avroSchema);
         user.put("name", "Emily");
         user.put("favorite_number", 32);
         user.put("favorite_color", "green");
   
         ByteArrayOutputStream outBytes = new ByteArrayOutputStream();
         Encoder encoder = EncoderFactory.get().directBinaryEncoder(outBytes, null);
         new GenericDatumWriter<>(avroSchema).write(user, encoder);
         encoder.flush();
         return ByteBuffer.wrap(outBytes.toByteArray());
    }
   ```

#### Configurar a biblioteca do cliente Kinesis
<a name="schema-registry-integrations-kds-libraries-kcl"></a>

Você desenvolverá seu consumidor da biblioteca do cliente Kinesis em Java. Para obter mais informações, consulte [Desenvolver um consumidor da biblioteca do cliente Kinesis em Java](https://docs.aws.amazon.com/streams/latest/dev/kcl2-standard-consumer-java-example.html) no *Guia do desenvolvedor do Amazon Kinesis Data Streams*.

1. Crie uma instância de `GlueSchemaRegistryDeserializer` transmitindo um objeto `GlueSchemaRegistryConfiguration`.

1. Transmita o `GlueSchemaRegistryDeserializer` para `retrievalConfig.glueSchemaRegistryDeserializer`.

1. Acesse o esquema de mensagens recebidas chamando `kinesisClientRecord.getSchema()`.

   ```
   GlueSchemaRegistryConfiguration schemaRegistryConfig =
       new GlueSchemaRegistryConfiguration(this.region.toString());
   
    GlueSchemaRegistryDeserializer glueSchemaRegistryDeserializer =
       new GlueSchemaRegistryDeserializerImpl(DefaultCredentialsProvider.builder().build(), schemaRegistryConfig);
   
    RetrievalConfig retrievalConfig = configsBuilder.retrievalConfig().retrievalSpecificConfig(new PollingConfig(streamName, kinesisClient));
    retrievalConfig.glueSchemaRegistryDeserializer(glueSchemaRegistryDeserializer);
   
     Scheduler scheduler = new Scheduler(
               configsBuilder.checkpointConfig(),
               configsBuilder.coordinatorConfig(),
               configsBuilder.leaseManagementConfig(),
               configsBuilder.lifecycleConfig(),
               configsBuilder.metricsConfig(),
               configsBuilder.processorConfig(),
               retrievalConfig
           );
   
    public void processRecords(ProcessRecordsInput processRecordsInput) {
               MDC.put(SHARD_ID_MDC_KEY, shardId);
               try {
                   log.info("Processing {} record(s)",
                   processRecordsInput.records().size());
                   processRecordsInput.records()
                   .forEach(
                       r ->
                           log.info("Processed record pk: {} -- Seq: {} : data {} with schema: {}",
                           r.partitionKey(), r.sequenceNumber(), recordToAvroObj(r).toString(), r.getSchema()));
               } catch (Throwable t) {
                   log.error("Caught throwable while processing records. Aborting.");
                   Runtime.getRuntime().halt(1);
               } finally {
                   MDC.remove(SHARD_ID_MDC_KEY);
               }
    }
   
    private GenericRecord recordToAvroObj(KinesisClientRecord r) {
       byte[] data = new byte[r.data().remaining()];
       r.data().get(data, 0, data.length);
       org.apache.avro.Schema schema = new org.apache.avro.Schema.Parser().parse(r.schema().getSchemaDefinition());
       DatumReader datumReader = new GenericDatumReader<>(schema);
   
       BinaryDecoder binaryDecoder = DecoderFactory.get().binaryDecoder(data, 0, data.length, null);
       return (GenericRecord) datumReader.read(null, binaryDecoder);
    }
   ```

#### Interagir com dados usando as APIs do Kinesis Data Streams
<a name="schema-registry-integrations-kds-apis"></a>

Esta seção descreve a integração do Kinesis Data Streams com o registro de esquemas usando as APIs do Kinesis Data Streams.

1. Atualize estas dependências do Maven:

   ```
   <dependencyManagement>
           <dependencies>
               <dependency>
                   <groupId>com.amazonaws</groupId>
                   <artifactId>aws-java-sdk-bom</artifactId>
                   <version>1.11.884</version>
                   <type>pom</type>
                   <scope>import</scope>
               </dependency>
           </dependencies>
       </dependencyManagement>
   
       <dependencies>
           <dependency>
               <groupId>com.amazonaws</groupId>
               <artifactId>aws-java-sdk-kinesis</artifactId>
           </dependency>
   
           <dependency>
               <groupId>software.amazon.glue</groupId>
               <artifactId>schema-registry-serde</artifactId>
               <version>1.1.5</version>
           </dependency>
   
           <dependency>
               <groupId>com.fasterxml.jackson.dataformat</groupId>
               <artifactId>jackson-dataformat-cbor</artifactId>
               <version>2.11.3</version>
           </dependency>
       </dependencies>
   ```

1. No produtor, adicione as informações de cabeçalho do esquema usando a API `PutRecords` ou `PutRecord` no Kinesis Data Streams.

   ```
   //The following lines add a Schema Header to the record
           com.amazonaws.services.schemaregistry.common.Schema awsSchema =
               new com.amazonaws.services.schemaregistry.common.Schema(schemaDefinition, DataFormat.AVRO.name(),
                   schemaName);
           GlueSchemaRegistrySerializerImpl glueSchemaRegistrySerializer =
               new GlueSchemaRegistrySerializerImpl(DefaultCredentialsProvider.builder().build(), new GlueSchemaRegistryConfiguration(getConfigs()));
           byte[] recordWithSchemaHeader =
               glueSchemaRegistrySerializer.encode(streamName, awsSchema, recordAsBytes);
   ```

1. No produtor, use a API `PutRecords` ou `PutRecord` para colocar o registro no fluxo de dados.

1. No consumidor, remova o registro do esquema do cabeçalho e serialize um registro do esquema Avro.

   ```
   //The following lines remove Schema Header from record
           GlueSchemaRegistryDeserializerImpl glueSchemaRegistryDeserializer =
               new GlueSchemaRegistryDeserializerImpl(DefaultCredentialsProvider.builder().build(), getConfigs());
           byte[] recordWithSchemaHeaderBytes = new byte[recordWithSchemaHeader.remaining()];
           recordWithSchemaHeader.get(recordWithSchemaHeaderBytes, 0, recordWithSchemaHeaderBytes.length);
           com.amazonaws.services.schemaregistry.common.Schema awsSchema =
               glueSchemaRegistryDeserializer.getSchema(recordWithSchemaHeaderBytes);
           byte[] record = glueSchemaRegistryDeserializer.getData(recordWithSchemaHeaderBytes);
   
           //The following lines serialize an AVRO schema record
           if (DataFormat.AVRO.name().equals(awsSchema.getDataFormat())) {
               Schema avroSchema = new org.apache.avro.Schema.Parser().parse(awsSchema.getSchemaDefinition());
               Object genericRecord = convertBytesToRecord(avroSchema, record);
               System.out.println(genericRecord);
           }
   ```

#### Interagir com dados usando as APIs do Kinesis Data Streams
<a name="schema-registry-integrations-kds-apis-reference"></a>

O código de exemplo a seguir usa as APIs `PutRecords` e `GetRecords`.

```
//Full sample code
import com.amazonaws.services.schemaregistry.deserializers.GlueSchemaRegistryDeserializerImpl;
import com.amazonaws.services.schemaregistry.serializers.GlueSchemaRegistrySerializerImpl;
import com.amazonaws.services.schemaregistry.utils.AVROUtils;
import com.amazonaws.services.schemaregistry.utils.AWSSchemaRegistryConstants;
import org.apache.avro.Schema;
import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericDatumReader;
import org.apache.avro.generic.GenericDatumWriter;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.Decoder;
import org.apache.avro.io.DecoderFactory;
import org.apache.avro.io.Encoder;
import org.apache.avro.io.EncoderFactory;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.services.glue.model.DataFormat;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;


public class PutAndGetExampleWithEncodedData {
    static final String regionName = "us-east-2";
    static final String streamName = "testStream1";
    static final String schemaName = "User-Topic";
    static final String AVRO_USER_SCHEMA_FILE = "src/main/resources/user.avsc";
    KinesisApi kinesisApi = new KinesisApi();

    void runSampleForPutRecord() throws IOException {
        Object testRecord = getTestRecord();
        byte[] recordAsBytes = convertRecordToBytes(testRecord);
        String schemaDefinition = AVROUtils.getInstance().getSchemaDefinition(testRecord);

        //The following lines add a Schema Header to a record
        com.amazonaws.services.schemaregistry.common.Schema awsSchema =
            new com.amazonaws.services.schemaregistry.common.Schema(schemaDefinition, DataFormat.AVRO.name(),
                schemaName);
        GlueSchemaRegistrySerializerImpl glueSchemaRegistrySerializer =
            new GlueSchemaRegistrySerializerImpl(DefaultCredentialsProvider.builder().build(), new GlueSchemaRegistryConfiguration(regionName));
        byte[] recordWithSchemaHeader =
            glueSchemaRegistrySerializer.encode(streamName, awsSchema, recordAsBytes);

        //Use PutRecords api to pass a list of records
        kinesisApi.putRecords(Collections.singletonList(recordWithSchemaHeader), streamName, regionName);

        //OR
        //Use PutRecord api to pass single record
        //kinesisApi.putRecord(recordWithSchemaHeader, streamName, regionName);
    }

    byte[] runSampleForGetRecord() throws IOException {
        ByteBuffer recordWithSchemaHeader = kinesisApi.getRecords(streamName, regionName);

        //The following lines remove the schema registry header
        GlueSchemaRegistryDeserializerImpl glueSchemaRegistryDeserializer =
            new GlueSchemaRegistryDeserializerImpl(DefaultCredentialsProvider.builder().build(), new GlueSchemaRegistryConfiguration(regionName));
        byte[] recordWithSchemaHeaderBytes = new byte[recordWithSchemaHeader.remaining()];
        recordWithSchemaHeader.get(recordWithSchemaHeaderBytes, 0, recordWithSchemaHeaderBytes.length);

        com.amazonaws.services.schemaregistry.common.Schema awsSchema =
            glueSchemaRegistryDeserializer.getSchema(recordWithSchemaHeaderBytes);

        byte[] record = glueSchemaRegistryDeserializer.getData(recordWithSchemaHeaderBytes);

        //The following lines serialize an AVRO schema record
        if (DataFormat.AVRO.name().equals(awsSchema.getDataFormat())) {
            Schema avroSchema = new org.apache.avro.Schema.Parser().parse(awsSchema.getSchemaDefinition());
            Object genericRecord = convertBytesToRecord(avroSchema, record);
            System.out.println(genericRecord);
        }

        return record;
    }

    private byte[] convertRecordToBytes(final Object record) throws IOException {
        ByteArrayOutputStream recordAsBytes = new ByteArrayOutputStream();
        Encoder encoder = EncoderFactory.get().directBinaryEncoder(recordAsBytes, null);
        GenericDatumWriter datumWriter = new GenericDatumWriter<>(AVROUtils.getInstance().getSchema(record));
        datumWriter.write(record, encoder);
        encoder.flush();
        return recordAsBytes.toByteArray();
    }

    private GenericRecord convertBytesToRecord(Schema avroSchema, byte[] record) throws IOException {
        final GenericDatumReader<GenericRecord> datumReader = new GenericDatumReader<>(avroSchema);
        Decoder decoder = DecoderFactory.get().binaryDecoder(record, null);
        GenericRecord genericRecord = datumReader.read(null, decoder);
        return genericRecord;
    }

    private Map<String, String> getMetadata() {
        Map<String, String> metadata = new HashMap<>();
        metadata.put("event-source-1", "topic1");
        metadata.put("event-source-2", "topic2");
        metadata.put("event-source-3", "topic3");
        metadata.put("event-source-4", "topic4");
        metadata.put("event-source-5", "topic5");
        return metadata;
    }

    private GlueSchemaRegistryConfiguration getConfigs() {
        GlueSchemaRegistryConfiguration configs = new GlueSchemaRegistryConfiguration(regionName);
        configs.setSchemaName(schemaName);
        configs.setAutoRegistration(true);
        configs.setMetadata(getMetadata());
        return configs;
    }

    private Object getTestRecord() throws IOException {
        GenericRecord genericRecord;
        Schema.Parser parser = new Schema.Parser();
        Schema avroSchema = parser.parse(new File(AVRO_USER_SCHEMA_FILE));

        genericRecord = new GenericData.Record(avroSchema);
        genericRecord.put("name", "testName");
        genericRecord.put("favorite_number", 99);
        genericRecord.put("favorite_color", "red");

        return genericRecord;
    }
}
```

## Caso de uso: Amazon Managed Service for Apache Flink
<a name="schema-registry-integrations-kinesis-data-analytics-apache-flink"></a>

O Apache Flink é um framework de código aberto popular e mecanismo de processamento distribuído para computações com estado sobre fluxos de dados vinculados e não vinculados. O Amazon Managed Service for Apache Flink é um serviço totalmente gerenciado da AWS que permite a criação e o gerenciamento de aplicações do Apache Flink para processar dados de transmissão.

O Apache Flink de código aberto fornece uma série de fontes e coletores. Por exemplo, origens de dados predefinidas incluem leitura de arquivos, diretórios e soquetes e ingestão de dados de coleções e iteradores. Os conectores Apache Flink DataStream fornecem código para o Apache Flink para realizar a interface com vários sistemas de terceiros, como Apache Kafka ou Kinesis, como fontes e/ou coletores.

Para obter mais informações, consulte o [Guia do desenvolvedor do Amazon Kinesis Data Analytics](https://docs.aws.amazon.com/kinesisanalytics/latest/java/what-is.html).

### Conector Apache Flink Kafka
<a name="schema-registry-integrations-kafka-connector"></a>

O Apache Flink fornece um conector de fluxo de dados Apache Kafka para leitura e gravação de dados em tópicos do Kafka com garantias do tipo exatamente uma. Consumidor Kafka do Flink, `FlinkKafkaConsumer`, fornece acesso à leitura de um ou mais tópicos do Kafka. O produtor Kafka do Apache Flink, `FlinkKafkaProducer`, permite gravar uma transmissão de registros para um ou mais tópicos do Kafka. Para obter mais informações, consulte [Conector do Apache Kafka](https://ci.apache.org/projects/flink/flink-docs-stable/dev/connectors/kafka.html).

### Conector de fluxos do Kinesis do Apache Flink
<a name="schema-registry-integrations-kinesis-connector"></a>

O conector de transmissão de dados do Kinesis fornece acesso aos Amazon Kinesis Data Streams. O `FlinkKinesisConsumer` é uma origem de dados de transmissão paralelo do tipo exatamente uma vez que assina várias transmissões do Kinesis dentro da mesma região de produto da AWS e que pode manipular de forma transparente a refragmentação de transmissões enquanto o trabalho é executado. Cada subtarefa do consumidor é responsável por buscar registros de dados de vários fragmentos do Kinesis. O número de fragmentos obtidos por cada subtarefa será alterado à medida que os fragmentos forem fechados e criados pelo Kinesis. O `FlinkKinesisProducer` usa a Kinesis Producer Library (KPL) para colocar dados de uma transmissão do Apache Flink em uma transmissão do Kinesis. Para obter mais informações, consulte [Conector do Amazon Kinesis Streams](https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/connectors/kinesis.html).

Para obter mais informações, consulte o [repositório do GitHub de registro do AWS Glue](https://github.com/awslabs/aws-glue-schema-registry).

### Integração com o Apache Flink
<a name="schema-registry-integrations-apache-flink-integrate"></a>

A biblioteca SerDes fornecida com o registro de esquemas se integra com o Apache Flink. Para trabalhar com o Apache Flink, é necessário implementar as interfaces [https://github.com/apache/flink/blob/master/flink-streaming-java/src/main/java/org/apache/flink/streaming/util/serialization/SerializationSchema.java](https://github.com/apache/flink/blob/master/flink-streaming-java/src/main/java/org/apache/flink/streaming/util/serialization/SerializationSchema.java) e [https://github.com/apache/flink/blob/8674b69964eae50cad024f2c5caf92a71bf21a09/flink-core/src/main/java/org/apache/flink/api/common/serialization/DeserializationSchema.java](https://github.com/apache/flink/blob/8674b69964eae50cad024f2c5caf92a71bf21a09/flink-core/src/main/java/org/apache/flink/api/common/serialization/DeserializationSchema.java) chamadas `GlueSchemaRegistryAvroSerializationSchema` e `GlueSchemaRegistryAvroDeserializationSchema`, que você pode vincular aos conectores do Apache Flink.

### Adicionar uma dependência do registro do esquemas do AWS Glue na aplicação do Apache Flink
<a name="schema-registry-integrations-kinesis-data-analytics-dependencies"></a>

Para configurar as dependências de integração para o registro de esquemas do AWS Glue na aplicação do Apache Flink:

1. Adicione a dependência ao arquivo `pom.xml`.

   ```
   <dependency>
       <groupId>software.amazon.glue</groupId>
       <artifactId>schema-registry-flink-serde</artifactId>
       <version>1.0.0</version>
   </dependency>
   ```

#### Integração do Kafka ou do Amazon MSK com o Apache Flink
<a name="schema-registry-integrations-kda-integrate-msk"></a>

Você pode usar o Managed Service for Apache Flink, com o Kafka como fonte ou com o Kafka como coletor.

**Kafka como uma fonte**  
O diagrama a seguir mostra a integração do Kinesis Data Streams com o Managed Service for Apache Flink com o Kafka como uma fonte.

![\[Kafka como uma fonte.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/gsr-kafka-source.png)


**Kafka como um coletor**  
O diagrama a seguir mostra a integração do Kinesis Data Streams com o Managed Service for Apache Flink com o Kafka como uma coletor.

![\[Kafka como um coletor.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/gsr-kafka-sink.png)


Para integrar o Kafka (ou o Amazon MSK) com o Managed Service for Apache Flink com o Kafka como uma fonte ou como um coletor, faça as alterações de código abaixo. Adicione os blocos de código em negrito ao seu respectivo código nas seções análogas.

Se o Kafka for a fonte, use o código de desserialização (bloco 2). Se o Kafka for o coletor, use o código serializador (bloco 3).

```
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

String topic = "topic";
Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "localhost:9092");
properties.setProperty("group.id", "test");

// block 1
Map<String, Object> configs = new HashMap<>();
configs.put(AWSSchemaRegistryConstants.AWS_REGION, "aws-region");
configs.put(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, true);
configs.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName());

FlinkKafkaConsumer<GenericRecord> consumer = new FlinkKafkaConsumer<>(
    topic,
    // block 2
    GlueSchemaRegistryAvroDeserializationSchema.forGeneric(schema, configs),
    properties);

FlinkKafkaProducer<GenericRecord> producer = new FlinkKafkaProducer<>(
    topic,
    // block 3
    GlueSchemaRegistryAvroSerializationSchema.forGeneric(schema, topic, configs),
    properties);

DataStream<GenericRecord> stream = env.addSource(consumer);
stream.addSink(producer);
env.execute();
```

#### Integração do Kinesis Data Streams com o Apache Flink
<a name="schema-registry-integrations-integrate-kds"></a>

Você pode usar o Managed Service for Apache Flink com o Kinesis Data Streams como fonte ou como coletor.

**Kinesis Data Streams como uma fonte**  
O diagrama a seguir mostra a integração do Kinesis Data Streams com o Managed Service for Apache Flink com o Kinesis Data Streams como uma fonte.

![\[Kinesis Data Streams como uma fonte.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/gsr-kinesis-source.png)


**Kinesis Data Streams como um coletor**  
O diagrama a seguir mostra a integração do Kinesis Data Streams com o Managed Service for Apache Flink com o Kinesis Data Streams como uma coletor.

![\[Kinesis Data Streams como um coletor.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/gsr-kinesis-sink.png)


Para integrar o Kinesis Data Streams com o Managed Service for Apache Flink com o Kinesis Data Streams como uma origem ou como um coletor, faça as alterações de código abaixo. Adicione os blocos de código em negrito ao seu respectivo código nas seções análogas.

Se o Kinesis Data Streams for a fonte, use o código de desserialização (bloco 2). Se o Kinesis Data Streams for o coletor, use o código de serialização (bloco 3).

```
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

String streamName = "stream";
Properties consumerConfig = new Properties();
consumerConfig.put(AWSConfigConstants.AWS_REGION, "aws-region");
consumerConfig.put(AWSConfigConstants.AWS_ACCESS_KEY_ID, "aws_access_key_id");
consumerConfig.put(AWSConfigConstants.AWS_SECRET_ACCESS_KEY, "aws_secret_access_key");
consumerConfig.put(ConsumerConfigConstants.STREAM_INITIAL_POSITION, "LATEST");

// block 1
Map<String, Object> configs = new HashMap<>();
configs.put(AWSSchemaRegistryConstants.AWS_REGION, "aws-region");
configs.put(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, true);
configs.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName());

FlinkKinesisConsumer<GenericRecord> consumer = new FlinkKinesisConsumer<>(
    streamName,
    // block 2
    GlueSchemaRegistryAvroDeserializationSchema.forGeneric(schema, configs),
    properties);

FlinkKinesisProducer<GenericRecord> producer = new FlinkKinesisProducer<>(
    // block 3
    GlueSchemaRegistryAvroSerializationSchema.forGeneric(schema, topic, configs),
    properties);
producer.setDefaultStream(streamName);
producer.setDefaultPartition("0");

DataStream<GenericRecord> stream = env.addSource(consumer);
stream.addSink(producer);
env.execute();
```

## Caso de uso: integração com o AWS Lambda
<a name="schema-registry-integrations-aws-lambda"></a>

Para usar uma função do AWS Lambda como um consumidor do Apache Kafka/Amazon MSK e desserializar mensagens codificadas em Avro usando o registro de esquemas do AWS Glue, acesse a [página do MSK Labs](https://amazonmsk-labs.workshop.aws/en/msklambda/gsrschemareg.html).

## Caso de uso: AWS Glue Data Catalog
<a name="schema-registry-integrations-aws-glue-data-catalog"></a>

As tabelas do AWS Glue suportam esquemas que você pode especificar manualmente ou por referência aoregistro de esquemas do AWS Glue. O registro de esquemas se integra ao Data Catalog para permitir que você opcionalmente use esquemas armazenados no registro de esquemas ao criar ou atualizar tabelas ou partições do AWS Glue no Data Catalog. Para identificar uma definição de esquema no registro de esquemas, no mínimo, você precisa saber o ARN do esquema do qual ele faz parte. Uma versão de esquema que contém uma definição de esquema pode ser referenciada por seu UUID ou número de versão. Há sempre uma versão de esquema, a versão “mais recente”, que pode ser pesquisada sem saber seu número de versão ou UUID.

Ao chamar as operações `CreateTable` ou `UpdateTable`, você transmitirá uma estrutura `TableInput` que contém um `StorageDescriptor`, que pode ter uma `SchemaReference` para um esquema existente no registro de esquemas. Da mesma forma, quando você chama as APIs `GetTable` ou `GetPartition`, a resposta pode conter o esquema e a `SchemaReference`. Quando uma tabela ou partição é criada usando referências de esquema, o Data Catalog tenta buscar o esquema para essa referência. Caso não seja possível localizar o esquema no registro de esquemas, ele retorna um esquema vazio na reposta de `GetTable`. Caso contrário, a resposta possui o esquema e a referência do esquema.

Também é possível executar as ações no console do AWS Glue.

Para realizar essas operações e criar, atualizar ou exibir informações de esquema, você deve conceder ao usuário que faz a chamada um perfil do IAM que forneça permissões para a API `GetSchemaVersion`.

### Adicionar uma tabela ou atualizar o esquema de uma tabela
<a name="schema-registry-integrations-aws-glue-data-catalog-table"></a>

A adição de uma nova tabela a partir de um esquema existente vincula a tabela a uma versão específica do esquema. Depois que as novas versões de esquema forem registradas, você poderá atualizar essa definição de tabela na página View table (Exibir tabela) no console do AWS Glue ou usando a API [Ação UpdateTable (Python: update\$1table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-UpdateTable).

#### Adicionar uma tabela de um esquema existente
<a name="schema-registry-integrations-aws-glue-data-catalog-table-existing"></a>

É possível criar uma tabela do AWS Glue a partir de uma versão de esquema no registro usando o console do AWS Glue ou a API `CreateTable`.

**AWS GlueAPI**  
Ao chamar a API `CreateTable`, você transmitirá uma `TableInput` que contém um `StorageDescriptor` que, por sua vez, contém uma `SchemaReference` para um esquema existente no registro de esquemas.

**AWS GlueConsole do**  
Para criar uma tabela no console do AWS Glue:

1. Faça login no Console de gerenciamento da AWS e 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, em **Data catalog** (Catálogo de dados), escolha **Tables** (Tabelas).

1. No menu **Add Tables** (Adicionar tabelas), escolha **Add table from existing schema** (Adicionar tabela do esquema existente).

1. Configure as propriedades da tabela e o datastore de acordo com o guia do desenvolvedor do AWS Glue.

1. Na página **Choose a Glue schema** (Escolher um esquema do Glue), selecione o **Registry** (Registro) em que o esquema reside.

1. Escolha o **Schema name** (Nome do esquema) e selecione a **Version** (Versão) do esquema a ser aplicada.

1. Revise a pré-visualização do esquema e escolha **Next** (Próximo).

1. Revise e crie a tabela.

O esquema e a versão aplicada à tabela são exibidos na coluna **Glue schema** (Esquema do Glue) na lista de tabelas. Você pode exibir a tabela para ver mais detalhes.

#### Atualizar o esquema de uma tabela
<a name="schema-registry-integrations-aws-glue-data-catalog-table-updating"></a>

Quando uma nova versão de esquema se torna disponível, você pode querer atualizar o esquema de uma tabela usando a API [Ação UpdateTable (Python: update\$1table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-UpdateTable) ou o console do AWS Glue. 

**Importante**  
Ao atualizar o esquema de uma tabela existente que tenha um esquema do AWS Glue especificado manualmente, o novo esquema referenciado no registro de esquemas pode ser incompatível. Isso pode resultar na falha de seus trabalhos.

**AWS GlueAPI**  
Ao chamar a API `UpdateTable`, você transmitirá uma `TableInput` que contém um `StorageDescriptor` que, por sua vez, contém uma `SchemaReference` para um esquema existente no registro de esquemas.

**AWS GlueConsole do**  
Para atualizar o esquema de uma tabela a partir do console do AWS Glue:

1. Faça login no Console de gerenciamento da AWS e 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, em **Data catalog** (Catálogo de dados), escolha **Tables** (Tabelas).

1. Exiba a tabela na lista de tabelas.

1. Clique em **Update schema** (Atualizar esquema) na caixa que informa sobre uma nova versão.

1. Revise as diferenças entre o esquema atual e o novo.

1. Escolha **Show all schema differences** (Mostrar todas as diferenças do esquema) para ver mais detalhes.

1. Escolha **Save table** (Salvar tabela) para aceitar a nova versão.

## Caso de uso: transmissão no AWS Glue
<a name="schema-registry-integrations-aws-glue-streaming"></a>

AWS GlueA transmissão no consome dados de fontes de transmissão e executa operações de ETL antes de gravar em um coletor de saída. É possível especificar a fonte de entrada da transmissão usando uma tabela de dados ou diretamente, especificando a configuração da fonte.

A transmissão no AWS Glue oferece suporte a uma tabela do tipo Data Catalog para a fonte de transmissão criada com o esquema presente no AWS Glue Schema Registry. Você pode criar um esquema no AWS Glue Schema Registry e criar uma tabela do AWS Glue com uma fonte de transmissão usando esse esquema. Essa tabela do AWS Glue pode ser usada como entrada para um trabalho de transmissão do AWS Glue para desserialização de dados no fluxo de entrada.

É importante ressaltar que quando o esquema no AWS Glue Schema Registry muda, você precisa reiniciar o trabalho de transmissão do AWS Glue para refletir as alterações no esquema.

## Caso de uso: Apache Kafka Streams
<a name="schema-registry-integrations-apache-kafka-streams"></a>

A API Apache Kafka Streams é uma biblioteca cliente para processamento e análise de dados armazenados no Apache Kafka. Esta seção descreve a integração do Apache Kafka Streams com o registro de esquemas do AWS Glue, que permite que você gerencie e imponha esquemas em suas aplicações de transmissão de dados. Para obter mais informações sobre o Apache Kafka Streams, consulte [Apache Kafka Streams](https://kafka.apache.org/documentation/streams/).

### Integração com as bibliotecas SerDes
<a name="schema-registry-integrations-apache-kafka-streams-integrate"></a>

Existe uma classe `GlueSchemaRegistryKafkaStreamsSerde` com a qual você pode configurar uma aplicação do Streams.

#### Código de exemplo da aplicação Kafka Streams
<a name="schema-registry-integrations-apache-kafka-streams-application"></a>

Para usar o registro de esquemas do AWS Glue dentro de uma aplicação Apache Kafka Streams:

1. Configure a aplicação Kafka Streams.

   ```
   final Properties props = new Properties();
       props.put(StreamsConfig.APPLICATION_ID_CONFIG, "avro-streams");
       props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
       props.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0);
       props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
       props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, AWSKafkaAvroSerDe.class.getName());
       props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
   
       props.put(AWSSchemaRegistryConstants.AWS_REGION, "aws-region");
       props.put(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, true);
       props.put(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.GENERIC_RECORD.getName());
   	props.put(AWSSchemaRegistryConstants.DATA_FORMAT, DataFormat.AVRO.name());
   ```

1. Crie uma transmissão a partir do tópico avro-input.

   ```
   StreamsBuilder builder = new StreamsBuilder();
   final KStream<String, GenericRecord> source = builder.stream("avro-input");
   ```

1. Processe os registros de dados (o exemplo filtra aqueles registros cujo valor de favorite\$1color é rosa ou onde o valor de quantidade é 15).

   ```
   final KStream<String, GenericRecord> result = source
       .filter((key, value) -> !"pink".equals(String.valueOf(value.get("favorite_color"))));
       .filter((key, value) -> !"15.0".equals(String.valueOf(value.get("amount"))));
   ```

1. Grave os resultados de volta no tópico avro-output.

   ```
   result.to("avro-output");
   ```

1. Inicie a aplicação Apache Kafka Streams.

   ```
   KafkaStreams streams = new KafkaStreams(builder.build(), props);
   streams.start();
   ```

#### Resultados de implantação
<a name="schema-registry-integrations-apache-kafka-streams-results"></a>

Esses resultados mostram o processo de filtragem de registros que foram filtrados na etapa 3 como um favorite\$1color “rosa” ou o valor “15,0”.

Registros antes da filtragem:

```
{"name": "Sansa", "favorite_number": 99, "favorite_color": "white"}
{"name": "Harry", "favorite_number": 10, "favorite_color": "black"}
{"name": "Hermione", "favorite_number": 1, "favorite_color": "red"}
{"name": "Ron", "favorite_number": 0, "favorite_color": "pink"}
{"name": "Jay", "favorite_number": 0, "favorite_color": "pink"}

{"id": "commute_1","amount": 3.5}
{"id": "grocery_1","amount": 25.5}
{"id": "entertainment_1","amount": 19.2}
{"id": "entertainment_2","amount": 105}
	{"id": "commute_1","amount": 15}
```

Registros após a filtragem:

```
{"name": "Sansa", "favorite_number": 99, "favorite_color": "white"}
{"name": "Harry", "favorite_number": 10, "favorite_color": "black"}
{"name": "Hermione", "favorite_number": 1, "favorite_color": "red"}
{"name": "Ron", "favorite_number": 0, "favorite_color": "pink"}

{"id": "commute_1","amount": 3.5}
{"id": "grocery_1","amount": 25.5}
{"id": "entertainment_1","amount": 19.2}
{"id": "entertainment_2","amount": 105}
```

### Caso de uso: Apache Kafka Connect
<a name="schema-registry-integrations-apache-kafka-connect"></a>

A integração do Apache Kafka Connect com o registro de esquemas do AWS Glue permite que você obtenha informações de esquema dos conectores. Os conversores Apache Kafka especificam o formato dos dados dentro do Apache Kafka e como traduzi-los em dados do Apache Kafka Connect. Cada usuário do Apache Kafka Connect precisará configurar esses conversores com base no formato em que deseja que seus dados sejam carregados do, ou armazenados no, Apache Kafka. Desta forma, você pode definir seus próprios conversores para traduzir os dados do Apache Kafka Connect para o tipo usado no registro de esquemas do AWS Glue (por exemplo: Avro) e utilizar nosso serializador para registrar seu esquema e fazer a serialização. Em seguida, os conversores também são capazes de usar nosso desserializador para desserializar os dados recebidos do Apache Kafka e convertê-los de volta em dados do Apache Kafka Connect. Um exemplo de diagrama de fluxo de trabalho é dado abaixo.

![\[Fluxo de trabalho do Apache Kafka Connect.\]](http://docs.aws.amazon.com/pt_br/glue/latest/dg/images/schema_reg_int_kafka_connect.png)


1. Instale o projeto `aws-glue-schema-registry` clonando o [repositório do Github para o registro de esquemas do AWS Glue](https://github.com/awslabs/aws-glue-schema-registry).

   ```
   git clone git@github.com:awslabs/aws-glue-schema-registry.git
   cd aws-glue-schema-registry
   mvn clean install
   mvn dependency:copy-dependencies
   ```

1. Se você planeja usar o Apache Kafka Connect no modo *autônomo*, atualize **connect-standalone.properties** usando as instruções abaixo para esta etapa. Se você planeja usar o Apache Kafka Connect no modo *distribuído*, atualize **connect-avro-distributed.properties** usando as mesmas instruções.

   1. Adicione essas propriedades também ao arquivo de propriedades de conexão do Apache Kafka:

      ```
      key.converter.region=aws-region
      value.converter.region=aws-region
      key.converter.schemaAutoRegistrationEnabled=true
      value.converter.schemaAutoRegistrationEnabled=true
      key.converter.avroRecordType=GENERIC_RECORD
      value.converter.avroRecordType=GENERIC_RECORD
      ```

   1. Adicione o comando abaixo à seção **Launch mode** (Modo de execução) em **kafka-run-class.sh**:

      ```
      -cp $CLASSPATH:"<your AWS GlueSchema Registry base directory>/target/dependency/*"
      ```

1. Adicione o comando abaixo à seção **Launch mode** (Modo de execução) em **kafka-run-class.sh**

   ```
   -cp $CLASSPATH:"<your AWS GlueSchema Registry base directory>/target/dependency/*" 
   ```

   A aparência deve ser semelhante a esta:

   ```
   # Launch mode
   if [ "x$DAEMON_MODE" = "xtrue" ]; then
     nohup "$JAVA" $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH:"/Users/johndoe/aws-glue-schema-registry/target/dependency/*" $KAFKA_OPTS "$@" > "$CONSOLE_OUTPUT_FILE" 2>&1 < /dev/null &
   else
     exec "$JAVA" $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH:"/Users/johndoe/aws-glue-schema-registry/target/dependency/*" $KAFKA_OPTS "$@"
   fi
   ```

1. Se estiver usando bash, execute os comandos abaixo para configurar seu CLASSPATH em seu bash\$1profile. Para qualquer outro shell, atualize o ambiente de acordo.

   ```
   echo 'export GSR_LIB_BASE_DIR=<>' >>~/.bash_profile
   echo 'export GSR_LIB_VERSION=1.0.0' >>~/.bash_profile
   echo 'export KAFKA_HOME=<your Apache Kafka installation directory>' >>~/.bash_profile
   echo 'export CLASSPATH=$CLASSPATH:$GSR_LIB_BASE_DIR/avro-kafkaconnect-converter/target/schema-registry-kafkaconnect-converter-$GSR_LIB_VERSION.jar:$GSR_LIB_BASE_DIR/common/target/schema-registry-common-$GSR_LIB_VERSION.jar:$GSR_LIB_BASE_DIR/avro-serializer-deserializer/target/schema-registry-serde-$GSR_LIB_VERSION.jar' >>~/.bash_profile
   source ~/.bash_profile
   ```

1. (Opcional) Se você quiser testar com uma fonte de arquivo simples, clone o conector da fonte do arquivo.

   ```
   git clone https://github.com/mmolimar/kafka-connect-fs.git
   cd kafka-connect-fs/
   ```

   1. Na configuração do conector da fonte, edite o formato de dados para Avro, leitor de arquivos para `AvroFileReader` e atualize um objeto Avro de exemplo a partir do caminho do arquivo em que você está lendo. Por exemplo:

      ```
      vim config/kafka-connect-fs.properties
      ```

      ```
      fs.uris=<path to a sample avro object>
      policy.regexp=^.*\.avro$
      file_reader.class=com.github.mmolimar.kafka.connect.fs.file.reader.AvroFileReader
      ```

   1. Instale o conector da fonte.

      ```
      mvn clean package
      echo "export CLASSPATH=\$CLASSPATH:\"\$(find target/ -type f -name '*.jar'| grep '\-package' | tr '\n' ':')\"" >>~/.bash_profile
      source ~/.bash_profile
      ```

   1. Atualize as propriedades do coletor em `<your Apache Kafka installation directory>/config/connect-file-sink.properties`, atualize o nome do tópico e o nome do arquivo de saída.

      ```
      file=<output file full path>
      topics=<my topic>
      ```

1. Inicie o conector da fonte (neste exemplo, é um conector de fonte de arquivo).

   ```
   $KAFKA_HOME/bin/connect-standalone.sh $KAFKA_HOME/config/connect-standalone.properties config/kafka-connect-fs.properties
   ```

1. Execute o conector do coletor (neste exemplo, é um conector de coletor de arquivos).

   ```
   $KAFKA_HOME/bin/connect-standalone.sh $KAFKA_HOME/config/connect-standalone.properties $KAFKA_HOME/config/connect-file-sink.properties
   ```

   Para obter um exemplo de uso do Kafka Connect, veja o script run-local-tests.sh na pasta de testes de integração no [repositório do Github para o registro de esquemas do AWS Glue](https://github.com/awslabs/aws-glue-schema-registry/tree/master/integration-tests).

# Migração de um registro de esquemas de terceiros para o registro de esquemas do AWS Glue
<a name="schema-registry-integrations-migration"></a>

A migração de um registro de esquemas de terceiros para o registro de esquemas do AWS Glue tem uma dependência do registro de esquemas de terceiros existente e atual. Se houver registros em um tópico do Apache Kafka que tenham sido enviados usando um registro de esquemas de terceiros, os consumidores precisarão do registro de esquemas de terceiros para desserializar esses registros. O `AWSKafkaAvroDeserializer` fornece a capacidade de especificar uma classe secundária de desserialização que aponta para o desserializador de terceiros e é usada para desserializar esses registros.

Há dois critérios para desativação de um esquema de terceiros. Primeiro, a desativação pode ocorrer somente depois que os registros nos tópicos do Apache Kafka usando o registro de esquemas de terceiros não são mais exigidos por e para qualquer consumidor. Em segundo lugar, a desativação pode ocorrer com o vencimento dos tópicos do Apache Kafka, dependendo do período de retenção especificado para esses tópicos. Observe que, se você tiver tópicos com retenção infinita, ainda poderá migrar para o registro de esquemas do AWS Glue, mas não poderá desativar o registro de esquemas de terceiros. Como solução alternativa, você pode usar uma aplicação ou Mirror Maker 2 para ler o tópico atual e produzir para um novo tópico com o registro de esquemas do AWS Glue.

Migração de um registro de esquemas de terceiros para o registro de esquemas do AWS Glue:

1. Crie um registro no registro de esquemas do AWS Glue ou use o registro padrão.

1. Interrompa o consumidor. Modifique-o para incluir o registro de esquemas do AWS Glue como o principal desserializador e o registro de esquemas de terceiros como o secundário. 
   + Defina as propriedades do consumidor. Neste exemplo, o secondary\$1deserializer é definido como um desserializador diferente. O comportamento é o seguinte: o consumidor recupera registros do Amazon MSK e primeiro tenta usar o `AWSKafkaAvroDeserializer`. Se não for possível ler o byte mágico que contém o ID do esquema Avro para o esquema do registro do esquemas do AWS Glue, o `AWSKafkaAvroDeserializer` tenta usar a classe do desserializador fornecida no secondary\$1deserializer. As propriedades específicas do desserializador secundário também precisam ser fornecidas nas propriedades do consumidor, como schema\$1registry\$1url\$1config e specific\$1avro\$1reader\$1config, como mostrado abaixo.

     ```
     consumerProps.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
     consumerProps.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, AWSKafkaAvroDeserializer.class.getName());
     consumerProps.setProperty(AWSSchemaRegistryConstants.AWS_REGION, KafkaClickstreamConsumer.gsrRegion);
     consumerProps.setProperty(AWSSchemaRegistryConstants.SECONDARY_DESERIALIZER, KafkaAvroDeserializer.class.getName());
     consumerProps.setProperty(KafkaAvroDeserializerConfig.SCHEMA_REGISTRY_URL_CONFIG, "URL for third-party schema registry");
     consumerProps.setProperty(KafkaAvroDeserializerConfig.SPECIFIC_AVRO_READER_CONFIG, "true");
     ```

1. Reinicie o consumidor.

1. Interrompa o produtor e aponte o produtor para o registro de esquemas do AWS Glue.

   1. Defina as propriedades do produtor. Neste exemplo, o produtor usará as versões de esquema de registro padrão e registro automático.

      ```
      producerProps.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
      producerProps.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, AWSKafkaAvroSerializer.class.getName());
      producerProps.setProperty(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2");
      producerProps.setProperty(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.SPECIFIC_RECORD.getName());
      producerProps.setProperty(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, "true");
      ```

1. (Opcional) Mova manualmente esquemas e versões de esquema existentes do registro de esquemas de terceiros atual para o registro de esquemas do AWS Glue, seja para o registro padrão no registro de esquemas do AWS Glue ou para um registro não padrão específico no registro de esquemas do AWS Glue. Isso pode ser feito exportando esquemas dos registros de esquemas de terceiros no formato JSON e criando novos esquemas no registro de esquemas do AWS Glue usando o Console de gerenciamento da AWS ou a AWS CLI.

    Esta etapa pode ser importante se você precisar habilitar verificações de compatibilidade com versões de esquema anteriores para versões de esquema recém-criadas usando a AWS CLI e o Console de gerenciamento da AWS. Ou quando os produtores enviam mensagens com um novo esquema com registro automático de versões de esquema ativado.

1. Inicie o produtor.