Creación de tablas Iceberg - Amazon Athena

Creación de tablas Iceberg

Athena crea tablas Iceberg v2. Para conocer la diferencia entre las tablas v1 y v2, consulta los cambios de versión de formato en la documentación de Apache Iceberg.

El comando CREATE TABLE de Athena crea una tabla Iceberg sin datos. Puede consultar una tabla desde sistemas externos como Apache Spark directamente si la tabla utiliza el catálogo de Glue de código abierto de Iceberg. No es necesario crear una tabla externa.

aviso

La ejecución del comando CREATE EXTERNAL TABLE da como resultado el mensaje de error External keyword not supported for table type ICEBERG(Palabra clave externa no admitida para el tipo de tabla ICEBERG).

Para crear una tabla Iceberg en Athena, establezca la propiedad de tabla 'table_type' como 'ICEBERG' en la cláusula TBL_PROPERTIES, como en el siguiente resumen de sintaxis.

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

Particiones

Para crear tablas Iceberg con particiones, use la sintaxis PARTITIONED BY. Las columnas que se usan para la partición deben especificarse primero en las instrucciones de las columnas. Dentro de la cláusula PARTITIONED BY, no se debe incluir el tipo de columna. También puede definir transformaciones de partición en la sintaxis CREATE TABLE. Para especificar varias columnas para la partición, sepárelas con el carácter coma (,), como en el siguiente ejemplo:

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

En la siguiente tabla, se muestran las funciones de transformación de particiones disponibles.

Función Descripción Tipos admitidos
year(ts) Partición por año date, timestamp
month(ts) Partición por mes date, timestamp
day(ts) Partición por día date, timestamp
hour(ts) Partición por hora timestamp
bucket(N, col) Partición por valor de hash mod N buckets. Este es el mismo concepto que el bucket de hash para tablas de Hive. int, long, decimal, date, timestamp, string, binary
truncate(L, col) Partición por valor truncado a L int, long, decimal, string

Athena admite el particionamiento oculto de Iceberg. Para más información, consulte Iceberg's hidden partitioning (Partición oculta de Iceberg) en la documentación de Apache Iceberg.

Propiedades de la tabla

Esta sección describe las propiedades de la tabla que puedes especificar como pares valor de clave en la cláusula TBLPROPERTIES de la instrucción CREATE TABLE. Athena solo permite una lista predefinida de pares valor de clave en las propiedades de la tabla para crear o alterar tablas Iceberg. En las siguientes tablas, se muestran las propiedades de la tabla que se pueden especificar. Para más información sobre las opciones de compactación, consulte Optimización de las tablas Iceberg en este documento. Si desea que Athena incluya compatibilidad con una propiedad de configuración de tabla específica de código abierto, envíe sus comentarios a athena-feedback@amazon.com.

Formato

Descripción Formato de datos del archivo
Valores de propiedad permitidos parquet
Valor predeterminado parquet

write_compression

Descripción Códec de compresión de archivos
Valores de propiedad permitidos gzip, snappy, zstd
Valor predeterminado gzip

write_target_data_file_size_bytes

Descripción Especifica el tamaño objetivo en bytes de los archivos generados por Athena.
Valores de propiedad permitidos Un número positivo
Valor predeterminado 536870912 (512 MB)

optimize_rewrite_min_data_file_size_bytes

Descripción Configuración específica de optimización de datos. Los archivos más pequeños que el valor especificado se incluyen para la optimización.
Valores de propiedad permitidos Un número no negativo. Debe ser inferior a 10 GB e inferior al valor de write_target_data_file_size_bytes.
Valor predeterminado 0,75 veces el valor de write_target_data_file_size_bytes.

optimize_rewrite_max_data_file_size_bytes

Descripción Configuración específica de optimización de datos. Los archivos más grandes que el valor especificado se incluyen para la optimización.
Valores de propiedad permitidos Un número positivo. Debe ser inferior a 10 GB y superior al valor de write_target_data_file_size_bytes.
Valor predeterminado 1,8 veces el valor de write_target_data_file_size_bytes.

optimize_rewrite_data_file_threshold

Descripción Configuración específica de optimización de datos. Si los archivos de datos que requieren optimización son menores que el límite determinado, los archivos no se reescriben. Esto permite acumular más archivos de datos para producir archivos más cercanos al tamaño objetivo y omitir cálculos innecesarios para ahorrar costos.
Valores de propiedad permitidos Un número positivo. Debe ser menos de 50.
Valor predeterminado 5

optimize_rewrite_delete_file_threshold

Descripción Configuración específica de optimización de datos. Si los archivos de eliminación asociados a un archivo de datos son menores que el límite, el archivo de datos no se reescribe. Esto permite acumular más archivos de eliminación para cada archivo de datos para ahorrar costos.
Valores de propiedad permitidos Un número positivo. Debe ser menos de 50.
Valor predeterminado 2

vacuum_min_snapshots_to_keep

Descripción Cantidad mínima de instantáneas que se deben retener en la rama principal de una tabla.
Valores de propiedad permitidos Un número positivo.
Valor predeterminado 1

vacuum_max_snapshot_age_seconds

Descripción Antigüedad máxima de las instantáneas que se deben retener en la rama principal.
Valores de propiedad permitidos Un número positivo.
Valor predeterminado 432 000 segundos (5 días)

Ejemplo de instrucción CREATE TABLE

En el siguiente ejemplo, se crea una tabla Iceberg que tiene tres columnas.

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_target_data_file_size_bytes'='536870912', 'optimize_rewrite_delete_file_threshold'='10' )