Erstellen einer Amazon S3 Table.
Eine Amazon S3 Table ist eine Unterressource eines Tabellen-Buckets. Tabellen werden im Apache Iceberg-Format gespeichert, das die Verwendung von Abfrage-Engines und anderen Anwendungen ermöglicht, die das Format Apache Iceberg unterstützen. Amazon S3 optimiert kontinuierlich Ihre Tabellen, um die Speicherkosten zu senken und die Leistung von Analytikabfragen zu verbessern.
Beim Erstellen einer Tabelle wird in Amazon S3 automatisch ein Warehouse-Speicherort für die Tabelle erstellt. Ein Warehouse-speicherort ist ein eindeutiger S3-Speicherort, an dem Sie die mit der Tabelle verknüpften Objekte lesen und schreiben können. Folgendes Beispiel zeigt das Format eines Warehouse-Speicherorts:
s3://63a8e430-6e0b-46f5-k833abtwr6s8tmtsycedn8s4yc3xhuse1b--table-s3
Tabellen haben das folgende Format für Amazon-Ressourcennamen (ARN):
arn:aws:s3tables:region:owner-account-id:bucket/bucket-name/table/table-id
Standardmäßig können Sie bis zu 10,000 Tabellen in einem Tabellen-Bucket erstellen. Wenn Sie eine Erhöhung des Kontingents für Tabellen-Buckets oder Tabellen beantragen möchten, wenden Sie sich an Support
Sie können eine Tabelle mithilfe der Amazon-S3-Konsole, der Amazon S3-REST-API, AWS SDKs, AWS Command Line Interface (AWS CLI) oder Abfrage-Engines erstellen, die mit Ihren Tabellen-Buckets verbunden sind.
Wenn Sie eine Tabelle erstellen, können Sie die Verschlüsselungseinstellungen für diese Tabelle angeben, es sei denn, Sie erstellen die Tabelle mit Athena. Wenn Sie keine Verschlüsselungseinstellungen angeben, wird die Tabelle mit den Standardeinstellungen für den Tabellen-Bucket verschlüsselt. Weitere Informationen finden Sie unter Verschlüsselung für Tabellen angeben.
Voraussetzungen für das Erstellen von Tabellen
Zum Erstellen einer Tabelle müssen Sie Folgendes ausführen:
Namespaces erstellen in Ihrem Tabellen-Bucket.
Stellen Sie sicher, dass Sie AWS Identity and Access Management-(IAM)-Berechtigungen für
s3tables:CreateTableunds3tables:PutTableDatahaben.Anmerkung
Wenn Sie die SSE-KMS-Verschlüsselung für Ihre Tabelle verwenden, benötigen Sie Berechtigungen für
s3tables:PutTableEncryption- undDescribeKey-Berechtigungen für den ausgewählten AWS KMS-Schlüssel. Darüber hinaus muss der AWS KMS-Schlüssel, den Sie verwenden, S3 Tables die Berechtigung zur automatischen Tabellenverwaltung gewähren. Weitere Informationen finden Sie unter . Berechtigungsanforderungen für die SSE-KMS-Verschlüsselung von S3 Tables
Informationen zu gültigen Tabellennamen finden Sie unter Benennungsregeln für Tabellen und Namespaces.
Wichtig
Achten Sie beim Erstellen von Tabellen darauf, dass Sie in Ihren Tabellennamen und Tabellendefinitionen ausschließlich Kleinbuchstaben verwenden. Stellen Sie beispielsweise sicher, dass Ihre Spaltennamen ausschließlich in Kleinbuchstaben geschrieben sind. Wenn Ihr Tabellenname oder Ihre Tabellendefinition Großbuchstaben enthält, wird die Tabelle von AWS Lake Formation oder der AWS Glue Data Catalog nicht unterstützt. In diesem Fall ist Ihre Tabelle für AWS-Analytikservices wie Amazon Athena nicht sichtbar, auch wenn Ihre Tabellen-Buckets in AWS-Analytikservices integriert sind.
Wenn Ihre Tabellendefinition Großbuchstaben enthält, erhalten Sie beim Ausführen einer SELECT-Abfrage in Athena die folgende Fehlermeldung: „GENERIC_INTERNAL_ERROR: Get table request failed: com.amazonaws.services.glue.model.ValidationException: Unsupported Federation Resource - Invalid table or column names.“
Das folgende Verfahren erstellt mithilfe der Amazon-S3-Konsole eine Tabelle mit Amazon Athena. Wenn Sie noch keinen Namespace in Ihrem Tabellen-Bucket erstellt haben, können Sie dies im Rahmen dieses Prozesses tun. Bevor Sie die folgenden Schritte ausführen, stellen Sie sicher, dass Sie Ihre Tabellen-Buckets in die AWS-Analytikservices in dieser Region integriert haben. Weitere Informationen finden Sie unter Integrieren von Amazon S3 Tables mit AWS-Analytikservices.
Anmerkung
Wenn Sie eine Tabelle mit Athena erstellen, erbt diese Tabelle die Standardverschlüsselungseinstellungen aus dem Tabellen-Bucket. Wenn Sie einen anderen Verschlüsselungstyp verwenden wollen, müssen Sie die Tabelle mit einer anderen Methode erstellen.
Eine Tabelle erstellen
Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon-S3-Konsole unter https://console.aws.amazon.com/s3/
. -
Wählen Sie im linken Navigationsbereich Tabellen-Buckets aus.
-
Wählen Sie auf der Seite Tabellen-Buckets den Bucket aus, in dem Sie eine Tabelle erstellen wollen.
-
Wählen Sie auf der Seite mit den Bucket-Details die Option Tabelle mit Athena erstellen aus.
-
Führen Sie im Dialogfeld Tabelle erstellen mit Athena einen der folgenden Schritte aus:
-
Erstellen Sie einen Namespace. Wählen Sie „Namespace erstellen“ und geben Sie dann einen Namen in das Feld Namespace-Name ein. Namespace-Namen müssen 1 bis 255 Zeichen lang sein und innerhalb des Tabellen-Buckets eindeutig sein. Gültige Zeichen sind a–z, 0–9 und Unterstriche (
_). Unterstriche sind am Anfang von Namespace-Namen nicht zulässig. -
Wählen Sie Create namespace (Namespace erstellen) aus.
-
Geben Sie einen vorhandenen Namespace an. Wählen Sie Geben Sie einen vorhandenen Namespace in diesem Tabellen-Bucket an. Wählen Sie dann entweder Aus vorhandenen Namespaces auswählen oder Einen vorhandenen Namespace-Namen eingeben. Wenn Sie mehr als 1.000 Namespaces in Ihrem Bucket haben, müssen Sie den Namespace-Namen eingeben, falls er nicht in der Liste erscheint.
-
-
Wählen Sie Tabelle mit Athena erstellen.
-
Die Amazon-Athena-Athena-Konsole wird geöffnet und der Athena-Abfrage-Editor wird angezeigt. Das Feld Catalog sollte mit s3tablescatalog/ gefüllt werden, gefolgt vom Namen Ihres Tabellen-Buckets, zum Beispiel s3tablescatalog/
amzn-s3-demo-bucket. Das Datenbankfeld sollte mit dem Namespace gefüllt werden, den Sie zuvor erstellt oder ausgewählt haben.Anmerkung
Wenn Sie diese Werte in den Feldern Katalog und Datenbank nicht sehen, stellen Sie sicher, dass Sie Ihre Tabellen-Buckets in die AWS-Analytikservices in dieser Region integriert haben. Weitere Informationen finden Sie unter Integrieren von Amazon S3 Tables mit AWS-Analytikservices.
-
Der Abfrage-Editor enthält eine Beispielabfrage, mit der Sie eine Tabelle erstellen können. Ändern Sie die Abfrage, um den Tabellennamen und die Spalten anzugeben, die Ihre Tabelle haben soll.
-
Wenn Sie mit dem Ändern der Abfrage fertig sind, wählen Sie Ausführen, um Ihre Tabelle zu erstellen.
Anmerkung
-
Wenn Sie folgende Fehlermeldung erhalten:
„Unzureichende Berechtigungen zum Ausführen der Abfrage. Prinzipal hat keine Rechte für die angegebene Ressource.“wenn Sie versuchen, eine Abfrage in Athena auszuführen, müssen Ihnen die erforderlichen Lake-Formation-Berechtigungen für die Tabelle erteilt werden. Weitere Informationen finden Sie unter Erteilen der Lake Formation-Berechtigung für eine Tabelle oder Datenbank. -
Wenn Sie beim Versuch, eine Abfrage in Athena auszuführen, die Fehlermeldung
„Iceberg kann nicht auf die angeforderte Ressource zugreifen“erhalten, rufen Sie die AWS Lake Formation-Konsole auf und vergewissern Sie sich, dass Sie sich selbst Berechtigungen für den Tabellen-Bucket-Katalog und die Datenbank (Namespace) erteilt haben, die Sie erstellt haben. Geben Sie bei der Gewährung dieser Berechtigungen keine Tabelle an. Weitere Informationen finden Sie unter Erteilen der Lake Formation-Berechtigung für eine Tabelle oder Datenbank. -
Wenn Sie beim Ausführen einer
SELECT-Abfrage in Athena die folgende Fehlermeldung erhalten, wird diese Meldung dadurch verursacht, dass Ihr Tabellenname oder Ihre Spaltennamen in Ihrer Tabellendefinition Großbuchstaben enthalten:„GENERIC_INTERNAL_ERROR: Get table request failed: com.amazonaws.services.glue.model.ValidationException: Unsupported Federation Resource - Invalid table or column names.“Stellen Sie sicher, dass Ihre Tabellen- und Spaltennamen alle in Kleinbuchstaben geschrieben sind.
-
Wenn Ihre Tabellenerstellung erfolgreich war, erscheint der Name Ihrer neuen Tabelle in der Tabellenliste in Athena. Wenn Sie zurück zur Amazon-S3-Konsole navigieren, erscheint Ihre neue Tabelle in der Tabellenliste auf der Bucket-Detailseite für Ihren Tabellen-Bucket, nachdem Sie die Liste aktualisiert haben.
Dieses Beispiel veranschaulicht, wie Sie eine Tabelle mit einem Schema erstellen, indem Sie die AWS CLI verwenden und die Tabellenmetadaten mit JSON angeben. Wenn Sie dieses Beispiel verwenden möchten, ersetzen Sie die (Platzhalter für Benutzereingaben) durch Ihre Informationen.user
input placeholders
aws s3tables create-table --cli-input-json file://mytabledefinition.json
Verwenden Sie für die mytabledefinition.json-Datei die folgende Beispieltabellendefinition. Wenn Sie dieses Beispiel verwenden möchten, ersetzen Sie die (Platzhalter für Benutzereingaben) durch Ihre Informationen. user input
placeholders
{ "tableBucketARN": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket", "namespace": "your_namespace", "name": "example_table", "format": "ICEBERG", "metadata": { "iceberg": { "schema": { "fields": [ {"name": "id", "type": "int","required": true}, {"name": "name", "type": "string"}, {"name": "value", "type": "int"} ] } } } }
Sie können eine Tabelle in einer unterstützten Abfrage-Engine erstellen, die mit Ihren Tabellen-Buckets verbunden ist, z. B. in einer Apache Spark-Sitzung auf Amazon EMR.
Das folgende Beispiel zeigt, wie Sie mithilfe Spark von CREATE-Anweisungen eine Tabelle erstellen und Tabellendaten mithilfe von INSERT-Anweisungen oder durch Lesen von Daten aus einer vorhandenen Datei hinzufügen. Wenn Sie dieses Beispiel verwenden möchten, ersetzen Sie die (Platzhalter für Benutzereingaben) durch Ihre Informationen.user input
placeholders
spark.sql( " CREATE TABLE IF NOT EXISTS s3tablesbucket.example_namespace.`example_table` ( id INT, name STRING, value INT ) USING iceberg " )
Nachdem Sie die Tabelle erstellt haben, können Sie Daten in die Tabelle laden. Wählen Sie dazu eine der folgenden Methoden aus:
Nutzen Sie die
INSERT-Anweisung, um Ihrer Tabelle Daten hinzuzufügen.spark.sql( """ INSERT INTO s3tablesbucket.my_namespace.my_tableVALUES (1, 'ABC', 100), (2, 'XYZ', 200) """)Laden Sie eine vorhandene Datendatei.
Daten in Spark einlesen:
val data_file_location = "Path such as S3 URI to data file" val data_file = spark.read.parquet(data_file_location)Daten in eine Iceberg-Tabelle schreiben:
data_file.writeTo("s3tablesbucket.my_namespace.my_table").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()