

# Criar tabelas do Iceberg
<a name="querying-iceberg-creating-tables"></a>

Para criar uma tabela Iceberg para uso no Athena, você pode usar uma instrução `CREATE TABLE` conforme documentada nesta página, ou pode usar um crawler do AWS Glue.

## Usar uma instrução CREATE TABLE
<a name="querying-iceberg-creating-tables-query-editor"></a>

O Athena 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.

A cláusula `CREATE TABLE` do Athena cria uma tabela Iceberg sem dados. Você poderá consultar uma tabela diretamente de sistemas externos, como o Apache Spark, se a tabela usar o [catálogo do Glue de código aberto do Iceberg](https://iceberg.apache.org/docs/latest/aws/#glue-catalog). Você não precisa criar uma tabela externa.

**Atenção**  
Executar `CREATE EXTERNAL TABLE` resulta na mensagem de erro External keyword not supported for table type ICEBERG (Palavra-chave externa não compatível com o tipo de tabela ICEBERG). 

Para criar uma tabela Iceberg no Athena, defina a propriedade `'table_type'` da tabela como `'ICEBERG'` na cláusula `TBLPROPERTIES`, como no resumo da sintaxe a seguir.

```
CREATE TABLE
  [db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] )
  [PARTITIONED BY (col_name | transform, ... )]
  LOCATION 's3://amzn-s3-demo-bucket/{{your-folder}}/'
  TBLPROPERTIES ( 'table_type' ='ICEBERG' [, {{property_name}}={{property_value}}] )
```

Para obter informações sobre os tipos de dados que você pode consultar em tabelas Iceberg, consulte [Tipos de dados suportados para tabelas Iceberg no Athena](querying-iceberg-supported-data-types.md).

### Usar partições
<a name="querying-iceberg-partitioning"></a>

Para criar tabelas Iceberg com partições, use a sintaxe `PARTITIONED BY`. As colunas usadas para particionamento devem ser especificadas primeiro nas declarações de colunas. O tipo de coluna não deve ser incluído dentro da cláusula `PARTITIONED BY`. Você também pode definir [transformações de partição](https://iceberg.apache.org/spec/#partition-transforms) na sintaxe `CREATE TABLE`. Para especificar várias colunas para particionamento, separe as colunas por vírgula (`,`), como no exemplo a seguir.

```
CREATE TABLE iceberg_table (id bigint, data string, category string)
  PARTITIONED BY (category, bucket(16, id))
  LOCATION 's3://amzn-s3-demo-bucket/{{your-folder}}/'
  TBLPROPERTIES ( 'table_type' = 'ICEBERG' )
```

A tabela a seguir mostra as funções de transformação de partição disponíveis.


****  

| Função | Descrição | Tipos compatíveis | 
| --- | --- | --- | 
| year(ts) | Partição por ano | date, timestamp | 
| month(ts) | Partição por mês | date, timestamp | 
| day(ts)  | Partição por dia | date, timestamp | 
| hour(ts) | Partição por hora | timestamp | 
| bucket({{N}}, col) | Partição por buckets {{N}} de mod de valor por hash. Esse conceito é semelhante ao bucket por hash para tabelas do Hive. | int, long, decimal, date, timestamp, string, binary  | 
| truncate({{L}}, col) | Partição por valor truncada para {{L}} | int, long, decimal, string | 

O Athena suporta o particionamento oculto do Iceberg. Para obter mais informações, consulte [Particionamento oculto do Iceberg](https://iceberg.apache.org/docs/latest/partitioning/#icebergs-hidden-partitioning) na documentação do Apache Iceberg.

### Especificar propriedades das tabelas
<a name="querying-iceberg-table-properties"></a>

Esta seção descreve as propriedades de tabela que você pode especificar como pares de valores-chave na cláusula `TBLPROPERTIES` da instrução `CREATE TABLE`. O Athena permite apenas uma lista predefinida de pares de valores-chave nas propriedades da tabela para criar ou alterar tabelas Iceberg. As tabelas a seguir mostram as propriedades de tabela que você pode especificar. Para obter mais informações sobre essas opções de compactação, consulte [Otimizar tabelas do Iceberg](querying-iceberg-data-optimization.md) mais adiante neste documento. Se você quiser que o Athena suporte uma propriedade específica de configuração de tabela de código aberto, envie comentários para [athena-feedback@amazon.com](mailto:athena-feedback@amazon.com). 

***formato***


****  

|  |  | 
| --- |--- |
| Descrição | Formato de dados do arquivo | 
| Valores de propriedade permitidos | O formato de arquivo compatível e as combinações de compactação variam conforme a versão do mecanismo Athena. Para obter mais informações, consulte [Usar compactação de tabelas do Iceberg](compression-support-iceberg.md). | 
| Valor padrão | parquet | 

***write\_compression***


****  

|  |  | 
| --- |--- |
| Descrição | Codec de compactação de arquivo | 
| Valores de propriedade permitidos | O formato de arquivo compatível e as combinações de compactação variam conforme a versão do mecanismo Athena. Para obter mais informações, consulte [Usar compactação de tabelas do Iceberg](compression-support-iceberg.md). | 
| Valor padrão | A compactação de gravação padrão varia conforme a versão do mecanismo Athena. Para obter mais informações, consulte [Usar compactação de tabelas do Iceberg](compression-support-iceberg.md). | 

***optimize\_rewrite\_data\_file\_threshold***


****  

|  |  | 
| --- |--- |
| Descrição | Configuração específica de otimização de dados. Se houver menos arquivos de dados que exigem otimização do que o limite fornecido, os arquivos não serão regravados. Isso permite acumular mais arquivos de dados para produzir arquivos mais próximos do tamanho de destino e ignorar computação desnecessária para economizar custos. | 
| Valores de propriedade permitidos | Um número positivo. Deve ser menor que 50. | 
| Valor padrão | 5 | 

***optimize\_rewrite\_delete\_file\_threshold***


****  

|  |  | 
| --- |--- |
| Descrição | Configuração específica de otimização de dados. Se houver menos arquivos de exclusão associados a um arquivo de dados do que o limite, o arquivo de dados não será regravado. Isso permite acumular mais arquivos de exclusão para cada arquivo de dados para economizar custos. | 
| Valores de propriedade permitidos | Um número positivo. Deve ser menor que 50. | 
| Valor padrão | 2 | 

***vacuum\_min\_snapshots\_to\_keep***


****  

|  |  | 
| --- |--- |
| Descrição | Número mínimo de snapshots a serem retidos na ramificação principal de uma tabela.<br />Esse valor tem precedência sobre a propriedade `vacuum_max_snapshot_age_seconds`. Se o mínimo restante de snapshots for mais antigo do que a idade especificada por `vacuum_max_snapshot_age_seconds`, os snapshots serão mantidos e o valor de `vacuum_max_snapshot_age_seconds` será ignorado. | 
| Valores de propriedade permitidos | Um número positivo. | 
| Valor padrão | 1 | 

***vacuum\_max\_snapshot\_age\_seconds***


****  

|  |  | 
| --- |--- |
| Descrição | Período máximo para reter os snapshots na ramificação principal. Esse valor será ignorado se o mínimo restante de snapshots especificado por vacuum\_min\_snapshots\_to\_keep for maior que a idade especificada. Essa propriedade de comportamento da tabela corresponde à propriedade history.expire.max-snapshot-age-ms na configuração do Apache Iceberg. | 
| Valores de propriedade permitidos | Um número positivo. | 
| Valor padrão | 432 mil segundos (cinco dias) | 

***vacuum\_max\_metadata\_files\_to\_keep***


****  

|  |  | 
| --- |--- |
| Descrição | O número máximo de arquivos de metadados anteriores a serem retidos na ramificação principal da tabela. | 
| Valores de propriedade permitidos | Um número positivo. | 
| Valor padrão | 100 | 

***write\_data\_path\_enabled***


****  

|  |  | 
| --- |--- |
| Descrição | Quando definida como true, a tabela Iceberg é criada com a propriedade write.data.path em vez da propriedade obsoleta write.object-storage.path. Use essa opção para garantir a compatibilidade com o Iceberg 1.9.0 e versões posteriores, que não oferecem mais suporte à propriedade obsoleta. | 
| Valores de propriedade permitidos | true, false | 
| Valor padrão | false | 

### Exemplo de instrução CREATE TABLE
<a name="querying-iceberg-example-create-table-statement"></a>

O exemplo a seguir cria uma tabela do Iceberg com três colunas.

```
CREATE TABLE iceberg_table (
  id int,
  data string,
  category string) 
PARTITIONED BY (category, bucket(16,id)) 
LOCATION 's3://amzn-s3-demo-bucket/{{iceberg-folder}}' 
TBLPROPERTIES (
  'table_type'='ICEBERG',
  'format'='parquet',
  'write_compression'='snappy',
  'optimize_rewrite_delete_file_threshold'='10'
)
```

## Usar CREATE TABLE AS SELECT (CTAS)
<a name="querying-iceberg-creating-tables-ctas"></a>

Para obter informações sobre a criação de uma tabela do Iceberg usando a instrução `CREATE TABLE AS`, consulte [CREATE TABLE AS](create-table-as.md), com atenção especial à seção [Propriedades da tabela CTAS](create-table-as.md#ctas-table-properties).

## Usar um crawler do AWS Glue
<a name="querying-iceberg-creating-tables-crawler"></a>

Você pode usar um crawler do AWS Glue para registrar automaticamente suas tabelas Iceberg no AWS Glue Data Catalog. Se quiser migrar de outro catálogo do Iceberg, você pode criar e agendar um crawler do AWS Glue e fornecer os caminhos do Amazon S3 onde as tabelas do Iceberg estão localizadas. Você pode especificar a profundidade máxima dos caminhos do Amazon S3 que o crawler do AWS Glue pode percorrer. Depois de agendar um crawler do AWS Glue, ele extrairá as informações do esquema e atualizará o AWS Glue Data Catalog com as alterações do esquema toda vez que for executado. O crawler do AWS Glue é compatível com a mesclagem de esquemas nos snapshots e atualiza o local mais recente do arquivo de metadados no AWS Glue Data Catalog. Para obter mais informações, consulte [Data Catalog and crawlers in AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html). 