No AWS re:invent 2024, a AWS anunciou o Amazon S3 Tables, que oferece tabelas Apache Iceberg totalmente gerenciadas e otimizadas para workloads analíticos. Essas tabelas têm armazenamento gerenciado em formato Iceberg e podem ser administradas pela API s3tables. Já as operações de dados podem ser feitas via Apache Spark ou pelos serviços analíticos da AWS — Amazon EMR, Amazon Athena, Amazon Redshift, Amazon EMR, Amazon QuickSight e Amazon Data Firehose.

Gerado com o Amazon Bedrock
PerfectScale™ for Kubernetes
Ready to optimize?
Get your free Kubernetes savings analysis

Primeiros passos
Para começar, você precisa criar um table bucket, seja pelo console ou pela AWS CLI. Nesse momento, você tem a opção de habilitar a integração desse table bucket com os serviços analíticos da AWS citados acima.

Console do S3 Table bucket
Depois de criar o table bucket, é hora de criar um namespace (pense nele como um banco de dados lógico que vai abrigar várias tabelas), onde ficarão as nossas tabelas.
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

Tabelas criadas no console do table bucket
O formato da tabela é baseado no framework Apache Iceberg, e o armazenamento subjacente guarda tanto os dados quanto os metadados da tabela. Com o S3 tables, você não precisa se preocupar com a manutenção: o Amazon S3 cuida disso para melhorar o desempenho dos seus S3 tables e table buckets. As opções de manutenção incluem compactação de arquivos, gerenciamento de snapshots e remoção de arquivos não referenciados — todas habilitadas por padrão. Você pode editá-las ou desativá-las pelos arquivos de configuração de manutenção. Também é possível configurar os parâmetros do job de manutenção com os valores que fizerem mais sentido para o seu caso. O status do job pode ser consultado pela 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 o S3 tables aos serviços analíticos, conclua as etapas de pré-requisitos.
Crie um novo catálogo para o 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"} }'
Esse catálogo será registrado no AWS LakeFormation e, da mesma forma, você verá o namespace e a tabela que criamos antes no console do LakeFormation (use o menu suspenso para selecionar o catálogo do S3 table que criamos acima).



Integração com o Amazon EMR
Agora vem a parte legal! É hora de integrar esses S3 tables aos serviços da AWS. Vou começar pelo Amazon EMR e provisionar um cluster EMR habilitado para Iceberg com Apache Spark. Depois, faça login no nó primário do cluster via SSH.
Inicie o 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 no nó primário do EMR
Confira se você seguiu corretamente os pré-requisitos para a integração. No Amazon EMR, é preciso anexar a política AmazonS3TablesFullAccess à EMR_EC2_DefaultRole e também conceder à EMR_EC2_DefaultRole as permissões adequadas no LakeFormation, em nível de catálogo, namespace e tabela.
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()

Crie um novo namespace para o table bucket

Crie uma nova tabela baseada em table bucket dentro do namespace

Consulte a tabela
Se você tiver dados de exemplo em parquet no S3, dá para lê-los, criar um S3 table com base neles e consultá-los.
#Read the parequet file
val data_file = spark.read.parquet("s3://myBucket/prefix1/file.parquet")
#Create a new table
data_file.writeTo("s3tablesbucket.my_first_namespace.my_table").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()
#Query the table we created
spark.sql(""" SELECT * FROM s3tablesbucket.my_first_namespace.my_table """).show()

Your cloud bill shouldn't be a mystery
Optimization, automation, expertise. In one platform.
Integração com o Amazon Athena
Agora vamos integrar essa tabela ao Amazon Athena! Como já criamos um catálogo para o S3 tables, ele aparece em Data sources and catalogs no console do Athena. Basta selecionar a opção no menu suspenso do editor para visualizar os s3 tables.


Pronto, agora você consulta essas tabelas como se fossem tabelas nativas do catálogo Glue no Athena.

Vale lembrar: como os s3 tables são gerenciados pelo S3, você não tem acesso ao local de armazenamento subjacente no S3 e não consegue consultar os arquivos manifest, diferentemente do que ocorre ao consultar metadados de tabelas Iceberg em tabelas baseadas no Amazon Athena.
Referências:
O Amazon S3 tables permite criar tabelas lógicas sobre os seus dados no S3, armazenados em formato parquet para um desempenho de leitura otimizado. Essas tabelas usam o formato Iceberg, que não só dá suporte a transações ACID, como também permite executar updates, deletes e inserts, além de consultas com time-travel nos seus dados. Tudo isso é gerenciado pelo Amazon S3, com os benefícios de durabilidade, escalabilidade e desempenho do S3.
Quer saber mais ou tem interesse nos nossos serviços? Não hesite em entrar em contato. Fale com a gente aqui.