Zugreifen auf Amazon-S3-Tabellen mit dem Amazon-S3-Tables-Katalog für Apache Iceberg - Amazon Simple Storage Service

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 erstellen oder sie direkt aus Maven herunterladen. Wenn Sie eine Verbindung zu Tabellen herstellen, wird der Client-Katalog JAR als Abhängigkeit verwendet, wenn Sie eine Spark-Sitzung für Apache Iceberg initialisieren.

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
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-Versionsnummer durch die neueste Version aus dem AWS Labs GitHub-Repository und den Tabellen-Bucket-ARN durch 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 EXISTS s3tablesbucket.my_namespace")
  • Erstellen einer Tabelle

    spark.sql(" CREATE TABLE IF NOT EXISTS s3tablesbucket.my_namespace.`my_table` ( id INT, name STRING, value INT ) USING iceberg ")
  • Tabellen abfragen

    spark.sql(" SELECT * FROM s3tablesbucket.my_namespace.`my_table` ").show()
  • Einfügen von Datenzeilen in eine Tabelle

    spark.sql( """ INSERT INTO s3tablesbucket.my_namespace.my_table VALUES (1, 'ABC', 100), (2, 'XYZ', 200) """)
  • So laden Sie Daten aus einer lokalen Datei in eine vorhandene Tabelle

    1. 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)
    2. Schreiben Sie die Daten in eine Iceberg-Tabelle.

      data_file.writeTo("s3tablesbucket.my_namespace.my_table").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()