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