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
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
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ónCREATE 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( |
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( |
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
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' )