

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 direct aux tables Amazon S3 via le catalogue d’Amazon S3 Tables pour Apache Iceberg
<a name="s3-tables-client-catalog"></a>

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. Amazon S3 Tables Catalog for 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](https://github.com/awslabs/s3-tables-catalog) ou le télécharger directement depuis [Maven](https://mvnrepository.com/artifact/software.amazon.s3tables/s3-tables-catalog-for-iceberg). Lorsque vous vous connectez à des tables, le catalogue client JAR est utilisé comme dépendance lorsque vous initialisez une session Spark pour Apache Iceberg.

## Utilisation du catalogue d’Amazon S3 Tables pour Apache Iceberg avec Apache Spark
<a name="s3-tables-integrating-open-source-spark"></a>

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.

****Conditions préalables****
+ Une identité IAM avec accès à votre compartiment de table et aux actions de S3 Tables. Pour de plus amples informations, veuillez consulter [Gestion des accès pour S3 Tables](s3-tables-setting-up.md).

**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 de tables Amazon S3 Apache Iceberg *version number* par la dernière version du [AWS Labs GitHubréférentiel](https://github.com/awslabs/s3-tables-catalog), puis *table bucket ARN* par 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 des tables S3 avec Spark SQL
<a name="query-with-spark"></a>

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êtes, remplacez les *user input placeholder* valeurs par les vôtres.

**Pour interroger les tables avec Spark**
+ Création d’un espace de noms

  ```
  spark.sql(" CREATE NAMESPACE IF NOT EXISTS s3tablesbucket.my_namespace")
  ```
+ Création d’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()
  ```
+ Insertion de données dans une table

  ```
  spark.sql(
  """
      INSERT INTO s3tablesbucket.my_namespace.my_table 
      VALUES 
          (1, 'ABC', 100), 
          (2, 'XYZ', 200)
  """)
  ```
+ Chargement d’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)
     ```

  1. Écrivez les données dans une table Iceberg.

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