Accès aux tables Amazon S3 avec le catalogue de tables Amazon S3 pour Apache Iceberg - Amazon Simple Storage Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Accès aux tables Amazon S3 avec le catalogue de tables Amazon S3 pour Apache Iceberg

Vous pouvez accéder aux tables S3 à partir de moteurs de requêtes open source tels que Apache Spark en utilisant le catalogue de tables Amazon S3 pour Apache Iceberg catalogue client. Catalogue de tables Amazon S3 pour Apache Iceberg est une bibliothèque open source hébergée par AWS Labs. Cela fonctionne en traduisant Apache Iceberg opérations dans vos moteurs de requêtes (telles que la découverte de tables, les mises à jour de métadonnées et l'ajout ou la suppression de tables) dans les opérations de l'API S3 Tables.

Catalogue de tables Amazon S3 pour Apache Iceberg est distribué sous forme de Maven JAR appelés3-tables-catalog-for-iceberg.jar. Vous pouvez créer le catalogue client JAR à partir du AWS Labs GitHub dépôt ou téléchargez-le depuis Maven. Lors de la connexion à des tables, le catalogue client JAR est utilisé comme dépendance lorsque vous initialisez un Spark séance pour Apache Iceberg.

Utilisation du catalogue de tables Amazon S3 pour Apache Iceberg avec Apache Spark

Vous pouvez utiliser le catalogue de tables Amazon S3 pour Apache Iceberg catalogue client pour se connecter à des tables à partir d'applications open source lorsque vous initialisez un Spark séance. Dans la configuration de votre session, vous spécifiez Iceberg et les dépendances d'Amazon S3, et créez un catalogue personnalisé qui utilise votre compartiment de tables comme entrepôt de métadonnées.

Prérequis
  • Une identité IAM avec accès à votre compartiment de tables et aux actions S3 Tables. Pour de plus amples informations, veuillez consulter Gestion des accès pour S3 Tables.

Pour initialiser un Spark session utilisant le catalogue de tables Amazon S3 pour Apache Iceberg
  • Initialiser Spark à l'aide de la commande suivante. Pour utiliser la commande, remplacez le catalogue de tables Amazon S3 par Apache Iceberg version numberavec la dernière version de AWS Labs GitHub référentiel, et le table bucket ARN avec votre propre ARN de bucket de table.

    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

Interrogation de tables S3 avec Spark SQL

Utilisation Spark, vous pouvez exécuter des opérations DQL, DML et DDL sur des tables S3. Lorsque vous interrogez des tables, vous utilisez le nom complet de la table, y compris le nom du catalogue de sessions, selon le modèle suivant :

CatalogName.NamespaceName.TableName

Les exemples de requêtes suivants montrent plusieurs manières d’interagir avec les tables S3. Pour utiliser ces exemples de requêtes dans votre moteur de requêtes, remplacez les user input placeholder valeurs par les vôtres.

Pour interroger des tables avec Spark
  • Création d’un espace de noms

    spark.sql(" CREATE NAMESPACE IF NOT EXISTS s3tablesbucket.my_namespace")
  • Créer une table

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

    spark.sql(" SELECT * FROM s3tablesbucket.my_namespace.`my_table` ").show()
  • Insérer des données dans un tableau

    spark.sql( """ INSERT INTO s3tablesbucket.my_namespace.my_table VALUES (1, 'ABC', 100), (2, 'XYZ', 200) """)
  • Charger un fichier de données existant dans une table

    1. Lisez les données dans Spark.

      val data_file_location = "Path such as S3 URI to data file" val data_file = spark.read.parquet(data_file_location)
    2. Écrivez les données dans une table Iceberg.

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