Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Amazon S3 Tables y Table Buckets: analítica sin fricciones

By DoiTFeb 5, 20254 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

Durante el reciente AWS re:invent 2024 se hizo el anuncio de Amazon S3 Tables, que ofrece tablas Apache Iceberg totalmente administradas y optimizadas para workloads analíticos. Estas tablas cuentan con almacenamiento administrado en formato Iceberg, que se gestiona mediante la API s3tables, y para las operaciones de datos se integran con Apache Spark o con servicios analíticos de AWS: Amazon EMR, Amazon Athena, Amazon Redshift, Amazon EMR, Amazon QuickSight y Amazon Data Firehose.

Lo primero es crear un table bucket, ya sea desde la consola o con AWS CLI. En este paso puedes habilitar la integración del table bucket con los servicios analíticos de AWS mencionados arriba.

Consola de S3 Table bucket

Una vez creado el table bucket, hay que crear un namespace (piénsalo como una base de datos lógica que contendrá varias tablas) dentro del cual estarán nuestras tablas.

aws s3tables create-namespace \
--table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/my-s3-table-bucket \
--namespace my_first_namespace
aws s3tables create-table \
--table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/my-s3-table-bucket \
--namespace my_first_namespace \
--name my_first_table --format ICEBERG

Tablas creadas en la consola del table bucket

El formato de la tabla se basa en el framework Apache Iceberg, y el almacenamiento subyacente contiene tanto los datos como los metadatos de la tabla. Con S3 tables te olvidas del mantenimiento: Amazon S3 se encarga de las tareas de mantenimiento para mejorar el rendimiento de tus S3 tables o table buckets. Estas tareas incluyen la compactación de archivos, la gestión de snapshots y la eliminación de archivos sin referencia. Vienen habilitadas por defecto. Puedes editarlas o deshabilitarlas mediante archivos de configuración de mantenimiento. También puedes configurar los parámetros del job de mantenimiento con los valores que mejor se ajusten a tu caso. Para revisar el estado del job, usa la API s3tables.

aws s3tables get-table-maintenance-job-status \
--table-bucket-arn="arn:aws:s3tables:us-east-1:111122223333:bucket/my-s3-table-bucket" \
--namespace="mynamespace" \
--name="testtable"

Antes de integrar las S3 tables con servicios analíticos, hay que completar los pasos previos.

Crea un nuevo catálogo para las S3 tables:

aws glue create-catalog --region us-east-1 --name s3tablescatalog --catalog-input '{ "CreateDatabaseDefaultPermissions":[], "CreateTableDefaultPermissions":[], "FederatedCatalog":{ "Identifier":"arn:aws:s3tables:us-east-1:111122223333:bucket/*", "ConnectionName":"aws:s3tables"} }'

El catálogo queda registrado en AWS LakeFormation y, del mismo modo, podrás ver el namespace y la tabla que creamos antes desde la consola de LakeFormation (tendrás que abrir el menú desplegable y seleccionar el catálogo de S3 tables que creamos).

¡Y ahora viene lo bueno! Vamos a integrar estas S3 tables con los servicios de AWS. Empecemos con Amazon EMR y vamos a aprovisionar un cluster de EMR habilitado para Iceberg con Apache Spark. Después nos conectamos al nodo primario del cluster por SSH.

Inicia el spark-shell:

spark-shell \
--packages software.amazon.s3tables:s3-tables-catalog-for-iceberg-runtime:0.1.3 \
--conf spark.sql.catalog.s3tablesbucket=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.s3tablesbucket.catalog-impl=software.amazon.s3tables.iceberg.S3TablesCatalog \
--conf spark.sql.catalog.s3tablesbucket.warehouse=arn:aws:s3tables:us-east-1:111122223333:bucket/my-s3-table-bucket \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

Spark-shell en el nodo primario de EMR

Verifica que hayas seguido al pie de la letra los pasos previos de la integración. Para Amazon EMR, debes adjuntar la política ``AmazonS3TablesFullAccess al rol EMR_EC2_DefaultRole y otorgarle también los permisos correspondientes a nivel de catálogo, namespace y tabla en LakeFormation.

spark.sql("CREATE NAMESPACE IF NOT EXISTS s3tablesbucket.my_first_namespace")
spark.sql(
""" CREATE TABLE IF NOT EXISTS s3tablesbucket.my_first_namespace.`example_table` (
id INT,
name STRING,
value INT
)
USING iceberg """
)
spark.sql(
"""
INSERT INTO s3tablesbucket.my_first_namespace.example_table
VALUES
(1, 'ABC', 100),
(2, 'XYZ', 200)
""")
spark.sql(""" SELECT * FROM s3tablesbucket.my_first_namespace.example_table """).show()

Crear un nuevo namespace para el table bucket

Crear una nueva tabla basada en el table bucket dentro del namespace

Consultar la tabla

Si tienes datos parquet de muestra en S3, puedes leerlos, crear una S3 table a partir de ellos y consultarlos.

#Leer el archivo parquet
val data_file = spark.read.parquet("s3://myBucket/prefix1/file.parquet")
#Crear una nueva tabla
data_file.writeTo("s3tablesbucket.my_first_namespace.my_table").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()
#Consultar la tabla que creamos
spark.sql(""" SELECT * FROM s3tablesbucket.my_first_namespace.my_table """).show()

¡Ahora vamos a integrar esta tabla con Amazon Athena! Como ya creamos un catálogo para las S3 tables, lo verás en la sección de fuentes de datos y catálogos de la consola de Athena, y desde el editor podrás elegirlo en el menú desplegable para visualizar las s3 tables.

Ya puedes consultar estas tablas con la misma facilidad que las tablas nativas del catálogo de Glue en Athena.

Ten en cuenta que, al estar las s3 tables administradas por S3, no tienes acceso a la ubicación subyacente de los datos en S3 ni puedes consultar los archivos manifest, a diferencia de lo que ocurre al consultar los metadatos de tablas Iceberg en tablas basadas en Amazon Athena.

Amazon S3 tables te permite crear tablas lógicas sobre tus datos en S3, almacenados en formato parquet para un mejor rendimiento de lectura. Estas tablas se basan en el formato Iceberg, que no solo soporta transacciones ACID, sino que también te permite hacer updates, deletes e inserts, además de consultas de time-travel sobre tus datos. Todo esto corre por cuenta de Amazon S3, con las ventajas extra de la durabilidad, la escalabilidad y el rendimiento de S3.

Si quieres saber más o te interesan nuestros servicios, escríbenos sin dudarlo. Puedes contactarnos aquí.

[] Trabajar con Amazon S3 Tables y table buckets