Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Amazon S3 Tables und Table Buckets: Einstieg in nahtlose Analytics

By DoiTFeb 5, 20254 min read

Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.

Auf der AWS re:invent 2024 erfolgte die Ankündigung der Amazon S3 Tables: vollständig verwaltete Apache-Iceberg-Tabellen, die für Analytics-Workloads optimiert sind. Die Tabellen liegen im Iceberg-Format vor und lassen sich über die s3tables-API verwalten. Für Datenoperationen ist eine Integration mit Apache Spark oder mit AWS-Analyse-Diensten möglich – Amazon EMR, Amazon Athena, Amazon Redshift, Amazon EMR, Amazon QuickSight, Amazon Data Firehose.

Zunächst legen Sie einen Table Bucket an – entweder über die Konsole oder per AWS CLI. Dabei können Sie die Integration des Table Buckets mit den oben genannten AWS-Analyse-Diensten direkt aktivieren.

S3 Table Bucket Konsole

Sobald der Table Bucket steht, legen Sie darin einen Namespace an (gedanklich eine logische Datenbank, die mehrere Tabellen aufnimmt), in dem dann Ihre Tabellen liegen.

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

Im Table Bucket angelegte Tabellen in der Konsole

Das Tabellenformat basiert auf dem Apache-Iceberg-Framework; im darunterliegenden Speicher liegen sowohl die Tabellendaten als auch die Metadaten. Um die Tabellenwartung müssen Sie sich nicht selbst kümmern – Amazon S3 übernimmt die Wartung und steigert so die Performance Ihrer S3 Tables und Table Buckets. Zu den Wartungsoptionen gehören File Compaction, Snapshot-Management und das Entfernen nicht referenzierter Dateien. Sie sind standardmäßig aktiviert und lassen sich über Konfigurationsdateien anpassen oder deaktivieren. Bei Bedarf können Sie die Parameter der Wartungsjobs auf die für Sie passenden Werte setzen. Den Job-Status fragen Sie über die s3tables-API ab.

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"

Bevor wir die S3 Tables an Analyse-Dienste anbinden, sind die Voraussetzungen zu erfüllen.

Legen Sie einen neuen Catalog für S3 Tables an:

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"} }'

Der Catalog wird in AWS LakeFormation registriert. In der LakeFormation-Konsole sehen Sie anschließend auch den zuvor angelegten Namespace und die Tabelle (wählen Sie dazu im Dropdown den oben erstellten S3 Table Catalog aus).

Jetzt zum spannenden Teil: Wir binden die S3 Tables an AWS-Dienste an. Den Anfang macht Amazon EMR – ich stelle einen Iceberg-fähigen EMR-Cluster mit Apache Spark bereit und melde mich anschließend per SSH am Primary Node des Clusters an.

Starten Sie die 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 auf dem EMR Primary Node

Achten Sie darauf, die für die Integration genannten Voraussetzungen sauber umzusetzen. Für Amazon EMR hängen Sie die Policy ``AmazonS3TablesFullAccess an die EMR_EC2_DefaultRole an und vergeben für die EMR_EC2_DefaultRole zusätzlich die passenden LakeFormation-Berechtigungen auf Catalog-, Namespace- und Tabellenebene.

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()

Neuen Namespace für den Table Bucket anlegen

Neue Table-Bucket-basierte Tabelle im Namespace anlegen

Tabelle abfragen

Liegen Beispiel-Parquet-Daten in S3 vor, können Sie diese einlesen, daraus eine S3-Tabelle erzeugen und sie abfragen.

#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()

Binden wir die Tabelle nun an Amazon Athena an. Da wir bereits einen Catalog für S3 Tables erstellt haben, taucht dieser in der Athena-Konsole unter "Datenquellen und Kataloge" auf. Über das Dropdown im Editor können Sie die S3 Tables auswählen.

Damit fragen Sie diese Tabellen in Athena genauso komfortabel ab wie native Glue-Catalog-Tabellen.

Wichtig: Da S3 die Tabellen verwaltet, haben Sie keinen Zugriff auf den darunterliegenden S3-Speicherort und können – anders als beim Abfragen der Iceberg-Tabellenmetadaten für Amazon-Athena-basierte Tabellen – die Manifest-Dateien nicht direkt abfragen.

Mit Amazon S3 Tables legen Sie logische Tabellen über Ihren in S3 gespeicherten Daten an. Diese liegen für eine optimierte Lese-Performance im Parquet-Format vor und basieren auf dem Iceberg-Format. Iceberg unterstützt nicht nur ACID-Transaktionen, sondern erlaubt auch Updates, Deletes und Inserts sowie Time-Travel-Abfragen auf Ihren Daten. Den Rest übernimmt Amazon S3 – mit der gewohnten Langlebigkeit, Skalierbarkeit und Performance von S3.

Wenn Sie mehr erfahren möchten oder an unseren Services interessiert sind, sprechen Sie uns gerne an. Sie erreichen uns hier.

[] Arbeiten mit Amazon S3 Tables und Table Buckets