Criar tabelas Iceberg - Amazon Athena

Criar tabelas Iceberg

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

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 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. 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://DOC-EXAMPLE-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.

Particionamento

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 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://DOC-EXAMPLE-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 na documentação do Apache Iceberg.

Propriedade das tabelas

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 Iceberg 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.

format

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 ter mais informações, consulte Suporte à compressão de tabelas do Iceberg por formato de arquivo.
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 ter mais informações, consulte Suporte à compressão de tabelas do Iceberg por formato de arquivo.
Valor padrão

A compactação de gravação padrão varia conforme a versão do mecanismo Athena. Para ter mais informações, consulte Suporte à compressão de tabelas do Iceberg por formato de arquivo.

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.

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

Exemplo de instrução CREATE TABLE

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://DOC-EXAMPLE-BUCKET/iceberg-folder' TBLPROPERTIES ( 'table_type'='ICEBERG', 'format'='parquet', 'write_compression'='snappy', 'optimize_rewrite_delete_file_threshold'='10' )

CREATE TABLE AS SELECT (CTAS)

Para obter informações sobre a criação de uma tabela do Iceberg usando a instrução CREATE TABLE AS, consulte CREATE TABLE AS, com atenção especial à seção Propriedades da tabela CTAS.

Usar um crawler do AWS Glue

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.