Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Zugreifen auf Amazon-S3-Tabellen mit dem Amazon-S3-Tables-Katalog für Apache Iceberg
Sie können mit Open-Source-Abfrage-Engines wie Apache Spark auf S3 Tables zugreifen, indem Sie den Katalog von Amazon S3 Tables für den Client-Katalog von Apache Iceberg verwenden. Der Katalog von Amazon S3 Tables für Apache Iceberg ist eine Open-Source-Bibliothek, die von AWS-Übungen gehostet wird. Sie übersetzt Apache Iceberg-Operationen in Ihren Abfrage-Engines (wie etwa das Erkennen von Tabellen, das Aktualisieren von Metadaten oder das Hinzufügen und Entfernen von Tabellen) in API-Operationen für S3 Tables.
Der Katalog von Amazon S3 Tables für Apache Iceberg wird als Maven JAR mit dem Namen s3-tables-catalog-for-iceberg.jar vertrieben. Sie können die JAR des Client-Katalogs selbst aus dem AWS Labs GitHub-Repository
Verwenden des Amazon-S3-Tables-Katalog für Apache Iceberg mit Apache Spark
Sie können den Amazon S3 Tables Catalog für den Apache Iceberg-Client-Katalog verwenden, um eine Verbindung mit Tabellen aus Open-Source-Anwendungen herzustellen, wenn Sie eine Spark-Sitzung initialisieren. In Ihrer Sitzungskonfiguration geben Sie Iceberg und Amazon-S3-Abhängigkeiten an und erstellen einen benutzerdefinierten Katalog, der Ihren Tabellen-Bucket als Metadaten-Warehouse verwendet.
Voraussetzungen
Eine IAM-Identität mit Zugriff auf Ihren Tabellen-Bucket und S3-Tables-Aktionen. Weitere Informationen finden Sie unter Zugriffsverwaltung für S3 Tables.
So initialisieren Sie eine Spark Sitzung mit dem Amazon S3 Tables Catalog für Apache Iceberg
-
Initialisieren Sie Spark mit dem folgenden Befehl. Um den Befehl zu verwenden, ersetzen Sie den Amazon S3 Tables Catalog für die Apache Iceberg-
Versionsnummerdurch die neueste Version aus dem AWS Labs GitHub-Repositoryund den Tabellen-Bucket-ARNdurch Ihren eigenen Tabellen-Bucket-ARN.spark-shell \ --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.6.1,software.amazon.s3tables:s3-tables-catalog-for-iceberg-runtime:0.1.4\ --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/amzn-s3-demo-table-bucket\ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
Abfragen von S3 Tables mit Spark
Mit Spark können Sie DQL-, DML- und DDL-Operationen in S3 Tables ausführen. Wenn Sie Tabellen abfragen, verwenden Sie den vollqualifizierten Tabellennamen, einschließlich des Sitzungskatalognamens, nach diesem Muster:
CatalogName.NamespaceName.TableName
Die folgenden Beispielabfragen zeigen einige Möglichkeiten, wie Sie mit S3 Tables interagieren können. Um diese Beispielabfragen in Ihrer Abfrage-Engine zu verwenden, ersetzen Sie die Platzhalter für Benutzereingaben durch Ihre eigenen Werte:
So fragen Sie Tabellen mit Spark ab
-
Namespaces erstellen
spark.sql(" CREATE NAMESPACE IF NOT EXISTSs3tablesbucket.my_namespace") -
Erstellen einer Tabelle
spark.sql(" CREATE TABLE IF NOT EXISTSs3tablesbucket.my_namespace.`my_table` ( id INT, name STRING, value INT ) USING iceberg ") -
Tabellen abfragen
spark.sql(" SELECT * FROMs3tablesbucket.my_namespace.`my_table` ").show() -
Einfügen von Datenzeilen in eine Tabelle
spark.sql( """ INSERT INTOs3tablesbucket.my_namespace.my_tableVALUES (1, 'ABC', 100), (2, 'XYZ', 200) """) -
So laden Sie Daten aus einer lokalen Datei in eine vorhandene Tabelle
Lesen Sie die Daten in Spark ein.
val data_file_location = "Path such as S3 URI to data file" val data_file = spark.read.parquet(data_file_location)Schreiben Sie die Daten in eine Iceberg-Tabelle.
data_file.writeTo("s3tablesbucket.my_namespace.my_table").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()