

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