Accès direct aux tables Amazon S3 via le catalogue d’Amazon S3 Tables pour Apache Iceberg
Vous pouvez accéder aux tables S3 à partir de moteurs de requête open source comme Apache Spark en utilisant le catalogue d’Amazon S3 Tables pour le catalogue client Apache Iceberg. Le catalogue d’Amazon S3 Tables pour Apache Iceberg est une bibliothèque open source hébergée par AWS Labs. Elle fonctionne en traduisant les opérations Apache Iceberg de vos moteurs de requête (telles que la découverte de tables, les mises à jour des métadonnées et l’ajout ou la suppression de tables) en opérations de l’API S3 Tables.
Le catalogue d’Amazon S3 Tables pour Apache Iceberg est distribué sous la forme d’un Maven JAR appelé s3-tables-catalog-for-iceberg.jar. Vous pouvez créer le catalogue client JAR à partir du référentiel AWS Labs GitHub
Utilisation du catalogue d’Amazon S3 Tables pour Apache Iceberg avec Apache Spark
Vous pouvez utiliser le catalogue d’Amazon S3 Tables pour le catalogue client Apache Iceberg afin de vous connecter aux tables à partir d’applications open source lorsque vous initialisez une session Spark. Dans la configuration de votre session, vous spécifiez Iceberg et les dépendances Amazon S3 et vous créez un catalogue personnalisé qui utilise votre compartiment de table comme entrepôt de métadonnées.
Prérequis
Une identité IAM avec accès à votre compartiment de table et aux actions de S3 Tables. Pour plus d’informations, consultez Gestion des accès pour S3 Tables.
Pour initialiser une session Spark à l’aide du catalogue d’Amazon S3 Tables pour Apache Iceberg
-
Initialisez Spark à l’aide de la commande suivante. Pour utiliser la commande, remplacez le catalogue d’Amazon S3 Tables pour Apache Iceberg
numéro de versionpar la dernière version à partir du référentiel AWS Labs GitHub, et l’ ARN du compartiment de tablepar votre propre ARN de compartiment 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 des tables S3 avec Spark SQL
Spark vous permet d’exécuter des opérations DQL, DML et DDL sur les 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ête, remplacez les espaces réservés à la saisie utilisateur par vos propres valeurs.
Pour interroger les tables avec Spark
-
Création d’un espace de noms
spark.sql(" CREATE NAMESPACE IF NOT EXISTSs3tablesbucket.my_namespace") -
Création d’une table
spark.sql(" CREATE TABLE IF NOT EXISTSs3tablesbucket.my_namespace.`my_table` ( id INT, name STRING, value INT ) USING iceberg ") -
Interroger une table
spark.sql(" SELECT * FROMs3tablesbucket.my_namespace.`my_table` ").show() -
Insertion de données dans une table
spark.sql( """ INSERT INTOs3tablesbucket.my_namespace.my_tableVALUES (1, 'ABC', 100), (2, 'XYZ', 200) """) -
Chargement d’un fichier de données existant dans une table
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)Écrivez les données dans une table Iceberg.
data_file.writeTo("s3tablesbucket.my_namespace.my_table").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()