Utilizar tablas de Apache Iceberg mediante SQL de Amazon Athena - AWS Guía prescriptiva

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Utilizar tablas de Apache Iceberg mediante SQL de Amazon Athena

Amazon Athena ofrece soporte integrado para Apache Iceberg y no requiere pasos ni configuración adicionales. Esta sección proporciona una descripción detallada de las funciones compatibles y una guía de alto nivel para usar Athena para interactuar con las tablas de Iceberg.

Compatibilidad de versiones y funciones

nota

En las siguientes secciones se asume que está utilizando la versión 3 del motor Athena.

Soporte de especificaciones de tablas Iceberg

La especificación de la tabla Iceberg de Apache especifica cómo deben comportarse las tablas Iceberg. Athena admite la versión 2 del formato de tabla, por lo que cualquier tabla Iceberg que cree con la consola, la CLI o el SDK utiliza esa versión de forma inherente.

Si usa una tabla Iceberg que se creó con otro motor, como Apache Spark en Amazon EMR AWS Glue, asegúrese de configurar la versión del formato de la tabla mediante las propiedades de la tabla. Como referencia, consulte la sección Creación y escritura de tablas de iceberg, que aparece anteriormente en esta guía.

Compatibilidad con las funciones de Iceberg

Puedes usar Athena para leer y escribir en las tablas de Iceberg. Al cambiar los datos mediante las DELETE FROM sentencias UPDATEMERGE INTO, y, Athena solo admite el merge-on-read modo. Esta propiedad no se puede cambiar. Para actualizar o eliminar datos con copy-on-write, debe utilizar otros motores como Apache Spark en Amazon EMR o. AWS Glue En la siguiente tabla se resume la compatibilidad con las funciones de Iceberg en Athena.

Soporte DDL Soporte DML AWS Lake Formation por motivos de seguridad (opcional)
Formato de tabla Crear tablas Evolución del esquema Lectura de datos Escritura de datos Control de acceso por filas/columnas
Amazon Athena Versión 2 X C opy-on-write
✓ M erge-on-read
nota

Athena no admite consultas incrementales.

Trabajar con tablas Iceberg

Para empezar rápidamente a utilizar Iceberg en Athena, consulte la sección Introducción a las tablas de Iceberg en Athena SQL, que aparece anteriormente en esta guía.

En la siguiente tabla se enumeran las limitaciones y recomendaciones.

Escenario

Limitación

Recomendación

Tabla: generación de DDL

Las tablas de iceberg creadas con otros motores pueden tener propiedades que no están expuestas en Athena. Para estas tablas, no es posible generar el DDL.

Usa la sentencia equivalente en el motor que creó la tabla (por ejemplo, la SHOW CREATE TABLE sentencia de Spark).

Prefijos aleatorios de Amazon S3 en objetos que se escriben en una tabla de Iceberg

De forma predeterminada, las tablas Iceberg que se crean con Athena tienen write.object-storage.enabled la propiedad habilitada.

Para deshabilitar este comportamiento y obtener el control total sobre las propiedades de la tabla Iceberg, cree una tabla Iceberg con otro motor, como Spark en Amazon EMR o. AWS Glue

Consultas incrementales

Actualmente no es compatible con Athena.

Para usar consultas incrementales para habilitar canalizaciones de ingesta de datos incrementales, usa Spark en Amazon EMR o. AWS Glue

¿Migrar las tablas existentes a Iceberg

Para migrar su Athena o sus AWS Glue tablas actuales (también conocidas como tablas de colmena) al formato Iceberg, puede utilizar la migración de datos local o completa:

  • La migración in situ es el proceso de generar los archivos de metadatos de Iceberg sobre los archivos de datos existentes.

  • La migración completa de datos crea la capa de metadatos de Iceberg y también reescribe los archivos de datos existentes de la tabla original a la nueva tabla de Iceberg.

En las siguientes secciones, se proporciona una descripción general de las API disponibles para migrar, tablas y orientación para elegir una estrategia de migración. Para obtener más información sobre estas dos estrategias, consulte la sección sobre migración de tablas en la documentación de Iceberg.

Migración in situ

La migración in situ elimina la necesidad de volver a escribir todos los archivos de datos. En su lugar, los archivos de metadatos de Iceberg se generan y se vinculan a los archivos de datos existentes. Iceberg ofrece tres opciones para implementar la migración in situ:

Actualmente, el procedimiento de migración no funciona directamente con el metaalmacén de Hive AWS Glue Data Catalog; solo funciona con el metaalmacén de Hive. Si tiene la obligación de utilizar el migrate procedimiento en lugar deadd_files, snapshot o puede utilizar, un clúster de Amazon EMR temporal con el metaalmacén de Hive (HMS). Este enfoque requiere la versión 1.2 o posterior de Iceberg.

Supongamos que desea crear la siguiente tabla de colmenas:

Migración de una tabla de Hive a Amazon Athena

Puede crear esta tabla Hive ejecutando este código en la consola de Athena:

CREATE EXTERNAL TABLE 'hive_table'( 'id' bigint, 'data' string) USING parquet LOCATION 's3://datalake-xxxx/aws_workshop/iceberg_db/hive_table' INSERT INTO iceberg_db.hive_table VALUES (1, 'a')

Si la tabla de Hive está particionada, incluye la sentencia de partición y añade las particiones según los requisitos de Hive.

ALTER TABLE default.placeholder_table_for_migration ADD PARTITION (date = '2023-10-10')

Pasos:

  1. Cree un clúster de Amazon EMR sin habilitar la AWS Glue Data Catalog integración, es decir, no active las casillas de verificación de los metadatos de las tablas de Hive o Spark. Esto se debe a que utilizará el metaalmacén de Hive (HMS) nativo que está disponible en el clúster para esta solución alternativa.

    AWS Glue Data Catalog ajustes sin metadatos de Hive o Spark
  2. Configure la sesión de Spark para usar la implementación del catálogo de Iceberg Hive.

    "spark.sql.extensions":"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions", "spark.sql.catalog.spark_catalog": "org.apache.iceberg.spark.SparkSessionCatalog", "spark.sql.catalog.spark_catalog.type": "hive",
  3. Valide que su clúster de Amazon EMR no esté conectado al AWS Glue Data Catalog ejecutando show databases o. show tables

    Validar que el clúster de Amazon EMR no está conectado al AWS Glue Data Catalog
  4. Registre la tabla Hive en el metaalmacén de Hive de su clúster de Amazon EMR y, a continuación, utilice el procedimiento Iceberg. migrate

    Procedimiento de migración de iceberg

    Este procedimiento crea los archivos de metadatos de Iceberg en la misma ubicación que la tabla Hive.

  5. Registre la tabla Iceberg migrada en. AWS Glue Data Catalog

  6. Vuelva a un clúster de Amazon EMR que tenga la AWS Glue Data Catalog integración habilitada.

    AWS Glue Data Catalog configuración con metadatos de Spark
  7. Usa la siguiente configuración de Iceberg en la sesión de Spark.

    "spark.sql.extensions":"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions", "spark.sql.catalog.glue_catalog": "org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.glue_catalog.warehouse": "s3://datalake-xxxx/aws_workshop", "spark.sql.catalog.glue_catalog.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog", "spark.sql.catalog.glue_catalog.io-impl": "org.apache.iceberg.aws.s3.S3FileIO",

Ahora puede consultar esta tabla desde Amazon EMR o AWS Glue Athena.

Comando Mostrar tablas para la tabla Iceberg

Migración completa de datos

La migración de datos completa recrea los archivos de datos y los metadatos. Este enfoque lleva más tiempo y requiere recursos informáticos adicionales en comparación con la migración in situ. Sin embargo, esta opción ayuda a mejorar la calidad de las tablas: puede validar los datos, realizar cambios en el esquema y la partición, reorganizar los datos, etc. Para implementar una migración de datos completa, utilice una de las siguientes opciones:

  • Usa la declaración CREATE TABLE ... AS SELECT (CTAS) en Spark AWS Glue, Amazon EMR o Athena.  Puede establecer la especificación de la partición y las propiedades de la tabla nueva de Iceberg mediante las cláusulas y. PARTITIONED BY TBLPROPERTIES Puede ajustar el esquema y las particiones de la nueva tabla según sus necesidades, en lugar de simplemente heredarlos de la tabla de origen.

  • Lee la tabla de origen y escribe los datos como una nueva tabla de Iceberg mediante Spark en Amazon EMR AWS Glue o (consulta Crear una tabla en la documentación de Iceberg).

Elección de una estrategia de migración

Para elegir la mejor estrategia de migración, considera las preguntas de la siguiente tabla.

Pregunta

Recomendación

¿Qué formato tiene el archivo de datos (por ejemplo, CSV o Apache Parquet)?

  • Considere la posibilidad de migrar in situ si el formato de su archivo de tabla es Parquet, ORC o Avro.

  • Para otros formatos, como CSV, JSON, etc., utilice la migración de datos completa.

¿Desea actualizar o consolidar el esquema de la tabla?

  • Si desea evolucionar el esquema de la tabla mediante las capacidades nativas de Iceberg, considere la posibilidad de migrar in situ. Por ejemplo, puede cambiar el nombre de las columnas después de la migración. (El esquema se puede cambiar en la capa de metadatos de Iceberg).

  • Si desea eliminar columnas enteras de los archivos de datos, le recomendamos que utilice la migración de datos completa.

¿Se beneficiaría la tabla de cambiar la estrategia de partición?

  • Si el enfoque de particionamiento de Iceberg cumple con sus requisitos (por ejemplo, los datos nuevos se almacenan utilizando el nuevo diseño de particiones mientras que las particiones existentes permanecen como están), considere la posibilidad de migrar in situ.

  • Si desea utilizar particiones ocultas en la tabla, considere la posibilidad de migrar todos los datos. Para obtener más información sobre las particiones ocultas, consulte la sección de prácticas recomendadas.

¿Sería beneficioso para la tabla añadir o cambiar la estrategia de ordenación?

  • Para añadir o cambiar el orden de clasificación de los datos, es necesario volver a escribir el conjunto de datos. En este caso, considere la posibilidad de utilizar la migración de datos completa.

  • En el caso de tablas grandes en las que resulta prohibitivo reescribir todas las particiones de la tabla, considere la posibilidad de migrar in situ y ejecutar la compactación (con la clasificación habilitada) para las particiones a las que se accede con más frecuencia.

¿La tabla tiene muchos archivos pequeños?

  • La combinación de archivos pequeños en archivos más grandes requiere volver a escribir el conjunto de datos. En este caso, considere la posibilidad de utilizar la migración de datos completa.

  • En el caso de tablas grandes en las que resulta prohibitivo reescribir todas las particiones de la tabla, considere la posibilidad de migrar in situ y ejecutar la compactación (con la clasificación habilitada) para las particiones a las que se accede con más frecuencia.