Creación de tablas de Iceberg - Amazon Athena

Creación de tablas de Iceberg

Para crear una tabla de Iceberg a fin de utilizarla en Athena, puede utilizar una instrucción CREATE TABLE como se documenta en esta página, o puede utilizar un rastreador de AWS Glue.

Uso de la instrucción CREATE TABLE

Athena crea tablas de 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 de 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 de Iceberg en Athena, establezca la propiedad de tabla 'table_type' como 'ICEBERG' en la cláusula TBLPROPERTIES, 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] )

Para obtener información sobre los tipos de datos que puede consultar en las tablas de Iceberg, consulte Tipos de datos compatibles con las tablas de Iceberg en Athena.

Particiones

Para crear tablas de 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 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 de 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 de 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 Las combinaciones de formato de archivo y compresión compatibles varían en función de la versión del motor de Athena. Para obtener más información, consulte Compatibilidad de compresión de tablas de Iceberg por formato de archivo.
Valor predeterminado parquet

write_compression

Descripción Códec de compresión de archivos
Valores de propiedad permitidos Las combinaciones de formato de archivo y compresión compatibles varían en función de la versión del motor de Athena. Para obtener más información, consulte Compatibilidad de compresión de tablas de Iceberg por formato de archivo.
Valor predeterminado

La compresión de escritura predeterminada varía en función de la versión del motor de Athena. Para obtener más información, consulte Compatibilidad de compresión de tablas de Iceberg por formato de archivo.

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.

Este valor tiene prioridad sobre la propiedad vacuum_max_snapshot_age_seconds. Si el mínimo de instantáneas restantes tiene una antigüedad superior a la especificada por vacuum_max_snapshot_age_seconds, se conservan las instantáneas y se omite el valor de vacuum_max_snapshot_age_seconds.

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. Este valor se omite si el número mínimo restante de instantáneas especificado por vacuum_min_snapshots_to_keep es superior a la antigüedad especificada. Esta propiedad de comportamiento de la tabla corresponde a la propiedad history.expire.max-snapshot-age-ms de la configuración de Apache Iceberg.
Valores de propiedad permitidos Un número positivo.
Valor predeterminado 432 000 segundos (5 días)

vacuum_max_metadata_files_to_keep

Descripción Cantidad máxima de archivos de metadatos anteriores que se deben retener en la ramificación principal de la tabla.
Valores de propiedad permitidos Un número positivo.
Valor predeterminado 100

Ejemplo de instrucción CREATE TABLE

En el siguiente ejemplo, se crea una tabla de 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_compression'='snappy', 'optimize_rewrite_delete_file_threshold'='10' )

CREATE TABLE AS SELECT (CTAS)

Para obtener información sobre la creación de una tabla de Iceberg mediante la instrucción CREATE TABLE AS, consulte CREATE TABLE AS, con especial atención a la sección Propiedades de la tabla CTAS.

Uso de un rastreador de AWS Glue

Puede utilizar un rastreador de AWS Glue para registrar de forma automática sus tablas de Iceberg en AWS Glue Data Catalog. Si desea migrar desde otro catálogo de Iceberg, puede crear y programar un rastreador de AWS Glue y proporcionar las rutas de Amazon S3 en las que se encuentran las tablas de Iceberg. Puede especificar la profundidad máxima de las rutas de Amazon S3 que puede recorrer el rastreador de AWS Glue. Tras programar un rastreador de AWS Glue, este extrae la información del esquema y actualiza AWS Glue Data Catalog con los cambios del esquema cada vez que se ejecuta. El rastreador de AWS Glue admite la fusión de esquemas en todas las instantáneas y actualiza la ubicación más reciente del archivo de metadatos en AWS Glue Data Catalog. Para obtener más información, consulte Catálogo de datos y rastreadores en AWS Glue.