

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 données des tables
<a name="s3-tables-access"></a>

Il existe plusieurs manières d'accéder aux tables dans les compartiments de tables Amazon S3. Vous pouvez intégrer des tables à des services AWS d'analyse en utilisant AWS Glue Data Catalog ou accéder à des tables directement à l'aide du point de Iceberg REST terminaison Amazon S3 Tables ou du catalogue de tables Amazon S3 pourApache Iceberg. La méthode d’accès que vous utilisez dépend de la configuration du catalogue, du modèle de gouvernance et de vos besoins en matière de contrôle d’accès. Voici un aperçu de ces méthodes d’accès.

**AWS Glue Data Catalog intégration**  
Il s’agit de la méthode d’accès recommandée pour utiliser des tables dans des compartiments de table S3. Cette intégration vous donne une vue unifiée de votre parc de données sur plusieurs services AWS d'analyse via le AWS Glue Data Catalog. Après l'intégration, vous pouvez interroger des tables à l'aide de services tels qu'Athena et Amazon Redshift. L'accès aux tables est géré à l'aide des autorisations IAM. Pour accéder aux tables à l'aide de cette intégration, l'identité IAM que vous utilisez doit accéder aux ressources et actions de vos tables S3, aux AWS Glue Data Catalog objets et au moteur de requêtes que vous utilisez. Pour de plus amples informations, veuillez consulter [Gestion des accès pour S3 Tables](s3-tables-setting-up.md).

**Accès direct**  
Utilisez cette méthode si vous devez travailler avec des implémentations de catalogues AWS Partner Network (APN), des implémentations de catalogues personnalisés ou si vous devez uniquement effectuer des read/write opérations de base sur des tables au sein d'un même compartiment de tables. L'accès aux tables est géré à l'aide des autorisations IAM. Pour accéder aux tables, l'identité IAM que vous utilisez doit accéder aux ressources de vos tables 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).

## Accès aux tables via l' AWS Glue Data Catalog intégration
<a name="table-access-gdc-integration"></a>

Vous pouvez intégrer des compartiments de tables S3 AWS Glue Data Catalog pour accéder aux tables à partir de services AWS d'analyse tels qu'Amazon Athena, Amazon Redshift et Quick. L'intégration les renseigne AWS Glue Data Catalog avec les ressources de votre table et fédère l'accès à ces ressources. Pour plus d’informations sur l’intégration, consultez [Intégration des tables Amazon S3 aux services AWS d'analyse](s3-tables-integrating-aws.md).

Les services AWS d'analyse suivants peuvent accéder aux tables via cette intégration :
+ [Amazon Athena](s3-tables-integrating-athena.md)
+ [Amazon Redshift](s3-tables-integrating-redshift.md)
+ [Amazon EMR](s3-tables-integrating-emr.md)
+ [Quick](s3-tables-integrating-quicksight.md)
+ [Amazon Data Firehose](s3-tables-integrating-firehose.md)
+ [AWS Glue ETL](s3-tables-integrating-glue.md)
+ [Interrogation de tables S3 avec SageMaker Unified Studio](s3-tables-integrating-sagemaker.md)

### Accès aux tables à l’aide du point de terminaison AWS Glue Iceberg REST
<a name="table-access-glue-irc"></a>

Une fois vos compartiments de tables S3 intégrés AWS Glue Data Catalog, vous pouvez également utiliser le AWS GlueIceberg REST point de terminaison pour vous connecter aux tables S3 à partir de moteurs de requêtes tiers compatiblesIceberg. Pour de plus amples informations, veuillez consulter [Accès à Amazon S3 Tables à l’aide du point de terminaison AWS Glue Iceberg REST](s3-tables-integrating-glue-endpoint.md).

Nous vous recommandons d’utiliser le point de terminaison AWS Glue Iceberg REST lorsque vous souhaitez accéder à des tables à partir de Spark, PyIceberg ou d’autres clients compatibles avec Iceberg.

Les clients suivants peuvent accéder aux tables directement via le point de terminaison AWS Glue Iceberg REST :
+ N’importe quel client Iceberg, y compris Spark, PyIceberg, etc.

## Accès direct aux tables
<a name="table-access-direct"></a>

 Vous pouvez accéder aux tables directement à partir de moteurs de requêtes open source grâce à des méthodes qui relient les opérations de gestion de S3 Tables à vos applications d’analytique Apache Iceberg. Il existe deux méthodes d’accès direct : le point de terminaison Iceberg REST d’Amazon S3 Tables ou le catalogue d’Amazon S3 Tables pour Apache Iceberg. Le point de terminaison REST est recommandé. 

Nous recommandons un accès direct si vous accédez aux tables dans le cadre d'implémentations de catalogues autogérées ou si vous devez uniquement effectuer des read/write opérations de base sur les tables d'un seul compartiment de tables. Pour les autres scénarios d'accès, nous recommandons l' AWS Glue Data Catalog intégration.

L’accès direct aux tables est géré par le biais de politiques basées sur l’identité IAM ou de politiques basées sur les ressources associées aux tables et aux compartiments de table.

### Accès aux tables via le point de terminaison Iceberg REST d’Amazon S3 Tables
<a name="access-tables-irc"></a>

Vous pouvez utiliser le point de terminaison Iceberg REST d’Amazon S3 Tables pour accéder à vos tables directement depuis n’importe quel client compatible Iceberg REST via des points de terminaison HTTP. Pour plus d’informations, consultez [Accès aux tables à l’aide du point de terminaison Iceberg REST d’Amazon S3 Tables](s3-tables-integrating-open-source.md). 

Les services AWS d'analyse et moteurs de requêtes suivants peuvent accéder aux tables directement via le point de Iceberg REST terminaison Amazon S3 Tables :

**Moteurs de requête pris en charge**
+ N’importe quel client Iceberg, y compris Spark, PyIceberg, etc.
+ [Amazon EMR](s3-tables-integrating-emr.md)
+ [AWS Glue ETL](s3-tables-integrating-glue.md)

### Accès direct aux tables via le catalogue d’Amazon S3 Tables pour Apache Iceberg
<a name="access-client-catalog"></a>

Vous pouvez également accéder directement aux tables à partir des moteurs de requête comme Apache Spark en utilisant le catalogue client de S3 Tables. Pour plus d’informations, consultez [Accès direct aux tables Amazon S3 via le catalogue d’Amazon S3 Tables pour Apache Iceberg](s3-tables-client-catalog.md). S3 recommande toutefois d’utiliser le point de terminaison Iceberg REST d’Amazon S3 Tables pour un accès direct, car il prend en charge un plus grand nombre d’applications, sans nécessiter de langage ou de code spécifique au moteur.

Les moteurs de requête suivants peuvent accéder aux tables directement à l’aide du catalogue client :
+ [Apache Spark](s3-tables-client-catalog.md#s3-tables-integrating-open-source-spark)

# Présentation de l'intégration d'Amazon S3 Tables aux services d' AWS analyse
<a name="s3-tables-integration-overview"></a>

Pour rendre les tables de votre compte accessibles par les services AWS d'analyse, vous devez intégrer vos compartiments de tables Amazon S3 à AWS Glue Data Catalog. Cette intégration permet aux services AWS d'analyse de découvrir et d'accéder automatiquement aux données de votre table. Vous pouvez employer cette intégration pour utiliser vos tables dans les services suivants :
+ [Amazon Athena](s3-tables-integrating-athena.md) 
+  [Amazon Redshift](s3-tables-integrating-redshift.md)
+  [Amazon EMR](s3-tables-integrating-emr.md)
+  [Quick](s3-tables-integrating-quicksight.md)
+  [Amazon Data Firehose](s3-tables-integrating-firehose.md)

**Note**  
Cette intégration utilise des AWS Lake Formation services AWS Glue et peut entraîner des coûts de AWS Glue demande et de stockage. Pour plus d’informations, consultez [Tarification d’AWS Glue](https://aws.amazon.com/glue/pricing/).  
Une tarification supplémentaire s’applique à l’exécution de requêtes sur vos tables S3. Pour plus d’informations, consultez les informations de tarification du moteur de requêtes que vous utilisez.

## Fonctionnement de l’intégration
<a name="how-table-integration-works"></a>

Lorsque vous intégrez les tables S3 aux services AWS d'analyse, Amazon S3 ajoute le catalogue nommé `s3tablescatalog` AWS Glue Data Catalog dans la région actuelle. L'ajout de `s3tablescatalog` permet à tous vos compartiments de tables, espaces de noms et tables d'être renseignés dans le catalogue de données.

**Note**  
Ces actions sont automatisées via la console Amazon S3. Si vous effectuez cette intégration par programmation, vous devez effectuer ces actions manuellement.

Vous intégrez vos compartiments de table une fois par AWS région. Une fois l'intégration terminée, tous les compartiments de tables, espaces de noms et tables actuels et futurs sont ajoutés AWS Glue Data Catalog dans cette région.

L’illustration suivante montre comment le catalogue `s3tablescatalog` remplit automatiquement les compartiments de table, les espaces de noms et les tables dans la région actuelle en tant qu’objets correspondants dans le catalogue de données. Les compartiments de table sont remplis en tant que sous-catalogues. Les espaces de noms figurant dans un compartiment de table sont renseignés en tant que bases de données dans leurs sous-catalogues respectifs. Les tables sont renseignées en tant que tables dans leurs bases de données respectives.

![\[Les manières dont les ressources des tables sont représentées AWS Glue Data Catalog.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/S3Tables-glue-catalog.png)


Après l'intégration à Data Catalog, vous pouvez créer des Apache Iceberg tables dans des compartiments de tables et y accéder via des moteurs AWS d'analyse tels qu'Amazon Athena, Amazon EMR, ainsi que des moteurs d'analyse tiers.

**Fonctionnement des autorisations**  
Nous vous recommandons d'intégrer vos compartiments de tables aux services AWS d'analyse afin de pouvoir utiliser les données de vos tables dans tous les services qui les utilisent AWS Glue Data Catalog comme magasin de métadonnées. Une fois l'intégration activée, vous pouvez utiliser les autorisations Gestion des identités et des accès AWS (IAM) pour accorder l'accès aux ressources des tables S3 et aux objets du catalogue de données associés.

Assurez-vous de suivre les étapes décrites [Intégration des tables S3 aux services AWS d'analyse](s3-tables-integrating-aws.md) afin de disposer des autorisations appropriées pour accéder aux ressources AWS Glue Data Catalog et à vos tables, et pour utiliser les services d' AWS analyse.

## Régions prises en charge
<a name="regions-supported-integration-overview"></a>

L'intégration de S3 Tables aux services AWS d'analyse utilise AWS Glue Data Catalog les contrôles d'accès basés sur IAM dans les régions suivantes. Dans toutes les autres régions, l'intégration nécessite également AWS Lake Formation.
+ USA Est (Virginie du Nord)
+ USA Est (Ohio)
+ USA Ouest (Californie du Nord)
+ USA Ouest (Oregon)
+ Afrique (Le Cap)
+ Asie-Pacifique (Hong Kong)
+ Asie-Pacifique (Taipei)
+ Asie-Pacifique (Tokyo)
+ Asie-Pacifique (Séoul)
+ Asie-Pacifique (Osaka)
+ Asie-Pacifique (Mumbai)
+ Asie-Pacifique (Hyderabad)
+ Asie-Pacifique (Singapour)
+ Asie-Pacifique (Sydney)
+ Asie-Pacifique (Jakarta)
+ Asie-Pacifique (Melbourne)
+ Asie-Pacifique (Malaisie)
+ Asie-Pacifique (Nouvelle Zélande)
+ Asie-Pacifique (Thaïlande)
+ Canada (Centre)
+ Canada-Ouest (Calgary)
+ Europe (Francfort)
+ Europe (Zurich)
+ Europe (Stockholm)
+ Europe (Milan)
+ Europe (Espagne)
+ Europe (Irlande)
+ Europe (Londres)
+ Europe (Paris)
+ Israël (Tel Aviv)
+ Mexique (Centre)
+ Amérique du Sud (São Paulo)

## Étapes suivantes
<a name="next-steps-integration-overview"></a>
+ [Intégration des tables S3 aux services AWS d'analyse](s3-tables-integrating-aws.md)
+ [Création d’un espace de noms](s3-tables-namespace-create.md)
+ [Création d’une table](s3-tables-create.md)

# Intégration des tables Amazon S3 aux services AWS d'analyse
<a name="s3-tables-integrating-aws"></a>

Cette rubrique décrit les prérequis et les procédures nécessaires pour intégrer vos compartiments de table Amazon S3 aux services AWS d'analyse. Pour un aperçu du fonctionnement de l’intégration, consultez [Présentation de l’intégration de S3 Tables](s3-tables-integration-overview.md).

**Note**  
Cette intégration utilise le AWS Glue Data Catalog et peut entraîner des coûts de AWS Glue demande et de stockage. Pour plus d’informations, consultez [Tarification d’AWS Glue](https://aws.amazon.com/glue/pricing/).  
Des tarifs supplémentaires s'appliquent à l'exécution de requêtes sur des tables S3. Pour plus d’informations, consultez les informations de tarification du moteur de requêtes que vous utilisez.

## Conditions préalables à l’intégration
<a name="table-integration-prerequisites"></a>

Les conditions préalables suivantes sont requises pour intégrer des compartiments de tables aux services d' AWS analyse :
+ [Créez un compartiment de tables.](s3-tables-buckets-create.md)
+ Ajoutez les AWS Glue autorisations suivantes à votre principal Gestion des identités et des accès AWS (IAM) :
  + `glue:CreateCatalog`qui est nécessaire pour créer un catalogue `s3tablescatalog` fédéré dans le catalogue de données
  + `glue:PassConnection`accorde au principal appelant le droit de déléguer la création de `aws:s3tables` connexion au service Amazon S3.
+ [Effectuez une mise à jour vers la dernière version de AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions).

**Important**  
Lorsque vous créez des tables, assurez-vous d’utiliser toutes les lettres minuscules dans les noms et les définitions de tables. Par exemple, assurez-vous que les noms des tables et des colonnes sont tous en minuscules. Si le nom ou la définition de votre table contient des majuscules, le tableau n'est pas pris en charge par AWS Lake Formation ou par le AWS Glue Data Catalog. Dans ce cas, votre table ne sera pas visible par les services d' AWS analyse tels qu'Amazon Athena, même si vos compartiments de tables sont intégrés aux AWS services d'analyse.   
Si la définition de votre table contient des majuscules, le message d'erreur suivant s'affiche lorsque vous exécutez une `SELECT` requête dans Athena : « GENERIC\$1INTERNAL\$1ERROR : Get table request failed : com.amazonaws.services.glue.model. ValidationException: ressource de fédération non prise en charge - Noms de table ou de colonne non valides. »

## Intégration de compartiments de tables aux services d' AWS analyse
<a name="table-integration-procedures"></a>

Vous pouvez intégrer des compartiments de tables au catalogue de données et aux services AWS d'analyse à l'aide des contrôles d'accès IAM par défaut, ou éventuellement utiliser les contrôles d'accès de Lake Formation.

Lorsque vous effectuez une intégration à l'aide des contrôles d'accès IAM, vous avez besoin de privilèges IAM pour accéder aux compartiments de tables et aux tables Amazon S3, aux objets du catalogue de données et au moteur de requêtes que vous utilisez. Si vous choisissez d'intégrer à l'aide de Lake Formation, les contrôles d'accès IAM et les autorisations de Lake Formation déterminent l'accès aux ressources du catalogue de données. Reportez-vous au [https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html) pour en savoir plus sur l'intégration de Lake Formation.

Les sections suivantes décrivent comment utiliser la console de gestion Amazon S3 ou comment AWS CLI configurer l'intégration avec les contrôles d'accès IAM.

### Utilisation de la console S3
<a name="integrate-console"></a>

1. Ouvrez la console Amazon S3 à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Dans le volet de navigation de gauche, choisissez **Compartiments de tables**.

1. Choisissez **Créer un compartiment de tables**.

   La page **Créer un compartiment de tables** s’ouvre.

1. Saisissez un **Nom du compartiment de table** et veillez à ce que la case **Activer l’intégration** soit cochée.

1. Choisissez **Créer un compartiment de tables**. Amazon S3 essaiera d’intégrer automatiquement vos compartiments de tables dans cette région.

### En utilisant le AWS CLI
<a name="integrate-cli"></a>

**Pour intégrer des compartiments de table aux contrôles d'accès IAM à l'aide du AWS CLI**

Les étapes suivantes montrent comment utiliser le AWS CLI pour intégrer des compartiments de table. Pour utiliser ces étapes, remplacez les `user input placeholders` par vos propres informations.

1. Créez un compartiment de tables.

   ```
   aws s3tables create-table-bucket \
   --region us-east-1 \
   --name amzn-s3-demo-table-bucket
   ```

1. Créez un fichier `catalog.json` contenant le catalogue qui suit :

   ```
   {
      "Name": "s3tablescatalog",
      "CatalogInput": {
         "FederatedCatalog": {
             "Identifier": "arn:aws:s3tables:us-east-1:111122223333:bucket/*",
             "ConnectionName": "aws:s3tables"
          },
          "CreateDatabaseDefaultPermissions":[
          {
                   "Principal": {
                       "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
                   },
                   "Permissions": ["ALL"]
               }
          ],
          "CreateTableDefaultPermissions":[
          {
                   "Principal": {
                       "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
                   },
                   "Permissions": ["ALL"]
               }
          ],
          "AllowFullTableExternalDataAccess": "True"
      }
   }
   ```

   Créez le catalogue `s3tablescatalog` à l’aide de la ligne de commande suivante. La création de ce catalogue remplit le AWS Glue Data Catalog avec des objets correspondant à des compartiments de tables, à des espaces de noms et à des tables.

   ```
   aws glue create-catalog \
   --region us-east-1 \
   --cli-input-json file://catalog.json
   ```

1. Vérifiez que le `s3tablescatalog` catalogue a été ajouté à AWS Glue l'aide de la commande suivante :

   ```
   aws glue get-catalog --catalog-id s3tablescatalog
   ```

### Migration vers le processus d’intégration mis à jour
<a name="migrate-integrate-console"></a>

Le processus d'intégration des services d' AWS analyse a été mis à jour pour utiliser les autorisations IAM par défaut. Si vous avez déjà configuré l'intégration, vous pouvez continuer à utiliser votre intégration actuelle. Toutefois, si vous souhaitez modifier votre intégration existante pour utiliser les autorisations IAM à la place, consultez le [https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html). Vous pouvez également rétablir l'intégration pour supprimer votre configuration existante dans AWS Glue Data Catalog AWS Lake Formation et réexécuter l'intégration. Cela supprimera toutes les subventions existantes de Lake Formation et les autorisations d'accès associées au`s3tablescatalog`.

1. Ouvrez la AWS Lake Formation console sur [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) et connectez-vous en tant qu'administrateur du lac de données. Pour plus d’informations sur la manière de créer un administrateur de lac de données, consultez [Création d’un administrateur de lac de données](https://docs.aws.amazon.com/lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin) dans le *Guide du développeur AWS Lake Formation *.

1. Supprimez le catalogue `s3tablescatalog` en procédant comme suit : 
   + Dans le volet de navigation de gauche, choisissez **Catalogues**. 
   + Sélectionnez le bouton d’option situé à côté du catalogue `s3tablescatalog` dans la liste **Catalogues**. Dans le menu **Actions**, sélectionnez **Delete (Supprimer)**.

1. Désenregistrez l’emplacement des données du catalogue `s3tablescatalog` en procédant comme suit :
   + Dans le volet de navigation de gauche, accédez à la section **Administration**, puis choisissez **Emplacements de lac de données**. 
   + Choisissez le bouton d’option en regard de l’emplacement du lac de données `s3tablescatalog`, par exemple `s3://tables:region:account-id:bucket/*`. 
   + Dans le menu **Actions**, choisissez **Supprimer**. 
   + Dans la boîte de dialogue de confirmation qui s’affiche, choisissez **Supprimer**. 

1. Maintenant que vous avez supprimé l'emplacement de votre `s3tablescatalog` catalogue et de votre lac de données, vous pouvez suivre les étapes pour [intégrer vos compartiments de tables aux services AWS d'analyse](#table-integration-procedures) en utilisant le processus d'intégration mis à jour. 

**Note**  
Si vous souhaitez utiliser des tables chiffrées SSE-KMS dans des services AWS d'analyse intégrés, le rôle que vous utilisez doit être autorisé à utiliser votre AWS KMS clé pour les opérations de chiffrement. Pour de plus amples informations, veuillez consulter [Octroi aux principaux IAM des autorisations leur permettant de travailler avec des tables chiffrées dans les services d'analyse intégrés AWS](s3-tables-kms-permissions.md#tables-kms-integration-permissions).

**Étapes suivantes**
+ [Création d’un espace de noms](s3-tables-namespace-create.md).
+ [Création d’une table](s3-tables-create.md).

# Accès à Amazon S3 Tables à l’aide du point de terminaison AWS Glue Iceberg REST
<a name="s3-tables-integrating-glue-endpoint"></a>

Une fois que vos compartiments de tables S3 sont intégrés au, AWS Glue Data Catalog vous pouvez utiliser le AWS GlueIceberg REST point de terminaison pour vous connecter à vos tables S3 à partir de clients Apache Iceberg compatibles, tels que PyIceberg ou. Spark Le AWS Glue Iceberg REST point de terminaison implémente la [spécification Iceberg REST Catalog Open API](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml) qui fournit une interface standardisée pour interagir avec Iceberg les tables. Pour accéder aux tables S3 à l'aide du point de terminaison, vous devez configurer les autorisations via une combinaison de politiques et d' AWS Lake Formation autorisations IAM. Les sections suivantes expliquent comment configurer l’accès, notamment en créant le rôle IAM nécessaire, en définissant les politiques requises et en établissant les autorisations Lake Formation pour l’accès à la base de données et au niveau de la table. 

Pour une description détaillée de l’utilisation de bout en bout avec PyIceberg, consultez [Accès aux données dans Amazon S3 Tables avec PyIceberg via le point de terminaison AWS Glue Iceberg REST](https://aws.amazon.com/blogs/storage/access-data-in-amazon-s3-tables-using-pyiceberg-through-the-aws-glue-iceberg-rest-endpoint/).

**Conditions préalables**
+ [Intégrez vos compartiments de table aux services d' AWS analyse](s3-tables-integrating-aws.md)
+ [Créer un espace de noms de table](s3-tables-namespace-create.md)
+ [Avoir accès à un compte d’administrateur de lac de données](https://docs.aws.amazon.com//lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)

## Création d’un rôle IAM pour votre client
<a name="glue-endpoint-create-iam-role"></a>

Pour accéder aux tables via des AWS Glue points de terminaison, vous devez créer un rôle IAM avec des autorisations AWS Glue et des actions sur Lake Formation. Cette procédure explique comment créer ce rôle et configurer ses autorisations.

1. Ouvrez la console IAM à l’adresse [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Dans le volet de navigation de gauche, choisissez **Politiques**.

1. Choisissez **Créer une politique**, puis **JSON** dans l’éditeur de politique.

1. Ajoutez la politique en ligne suivante qui accorde des autorisations d'accès AWS Glue et des actions relatives à Lake Formation :

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "glue:GetCatalog",
                   "glue:GetDatabase",
                   "glue:GetDatabases",
                   "glue:GetTable",
                   "glue:GetTables",
                   "glue:CreateTable",
                   "glue:UpdateTable"
               ],
               "Resource": [
                   "arn:aws:glue:us-east-1:111122223333:catalog",
                   "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog",
                   "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog/amzn-s3-demo-table-bucket",
                   "arn:aws:glue:us-east-1:111122223333:table/s3tablescatalog/amzn-s3-demo-table-bucket/<namespace>/*",
                   "arn:aws:glue:us-east-1:111122223333:database/s3tablescatalog/amzn-s3-demo-table-bucket/<namespace>"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lakeformation:GetDataAccess"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Une fois que vous avez créé cette politique, créez un rôle IAM et choisissez **Politique d’approbation personnalisée** comme **Type d’entité approuvée**.

1. Entrez ce qui suit pour la **Politique d’approbation personnalisée**.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/Admin_role"
               },
               "Action": "sts:AssumeRole",
               "Condition": {}
           }
       ]
   }
   ```

------

## Définition de l’accès dans Lake Formation
<a name="define-access-lakeformation"></a>

Lake Formation fournit un contrôle précis des accès pour vos tables de lac de données. Lorsque vous avez intégré votre compartiment S3 au AWS Glue Data Catalog, vos tables ont été automatiquement enregistrées en tant que ressources dans Lake Formation. Pour accéder à ces tables, vous devez accorder des autorisations spécifiques à Lake Formation pour votre identité IAM, en plus de ses autorisations de politique IAM.

Les étapes suivantes expliquent comment appliquer les contrôles d’accès Lake Formation pour permettre à votre client Iceberg de se connecter à vos tables. Vous devez vous connecter en tant qu’administrateur du lac de données pour appliquer ces autorisations.

### Autorisation des moteurs externes à accéder aux données des tables
<a name="allow-external-engines"></a>

Dans Lake Formation, vous devez activer l’accès complet aux tables pour que les moteurs externes puissent accéder aux données. Cela permet aux applications tierces d’obtenir des informations d’identification temporaires auprès de Lake Formation lorsqu’elles utilisent un rôle IAM disposant d’autorisations complètes sur la table demandée.

Ouvrez la console Lake Formation à l'adresse [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/).

1. Ouvrez la console Lake Formation à l'[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)adresse et connectez-vous en tant qu'administrateur de lac de données.

1. Dans le panneau de navigation, sous **Administration**, choisissez **Paramètres d’intégration des applications**.

1. Sélectionnez **Autoriser les moteurs externes à accéder aux données dans les emplacements Amazon S3 avec un accès complet aux tables**. Ensuite, choisissez **Save** (Enregistrer).

### Octroi des autorisations Lake Formation sur vos ressources de table
<a name="grant-lakeformation-permissions"></a>

Accordez ensuite des autorisations Lake Formation pour le rôle IAM que vous avez créé pour votre client compatible avec Iceberg. Ces autorisations permettront au rôle de créer et de gérer des tables dans votre espace de noms. Vous devez fournir des autorisations au niveau de la base de données et au niveau de la table. Pour de plus amples informations, veuillez consulter [Octroi de l’autorisation Lake Formation sur une table ou une base de données](grant-permissions-tables.md#grant-lf-table).

## Configuration de votre environnement pour utiliser le point de terminaison
<a name="setup-client-glue-irc"></a>

Après avoir configuré le rôle IAM avec les autorisations requises pour accéder aux tables, vous pouvez l'utiliser pour exécuter des Iceberg clients depuis votre machine locale en le configurant AWS CLI avec votre rôle, à l'aide de la commande suivante :

```
aws sts assume-role --role-arn "arn:aws:iam::<accountid>:role/<glue-irc-role>" --role-session-name <glue-irc-role>
```

Pour accéder aux tables via le AWS Glue REST point de terminaison, vous devez initialiser un catalogue dans votre client Iceberg compatible. Cette initialisation nécessite de spécifier des propriétés personnalisées, notamment les propriétés sigv4, l’URI du point de terminaison et l’emplacement de l’entrepôt. Spécifiez ces propriétés comme suit :
+ Propriétés Sigv4 : Sigv4 doit être activé, le nom de signature est `glue`
+ Emplacement de l’entrepôt : il s’agit de votre compartiment de table, spécifié dans ce format : `<accountid>:s3tablescatalog/<table-bucket-name>`
+ URI du point de terminaison : reportez-vous au guide de référence des points AWS Glue de terminaison de service pour le point de terminaison spécifique à la région

L’exemple suivant montre comment initialiser un catalogue pyIceberg.

```
rest_catalog = load_catalog(
        s3tablescatalog,
**{
"type": "rest",
"warehouse": "<accountid>:s3tablescatalog/<table-bucket-name>",
"uri": "https://glue.<region>.amazonaws.com/iceberg",
"rest.sigv4-enabled": "true",
"rest.signing-name": "glue",
"rest.signing-region": region
        }
)
```

Pour plus d’informations sur l’implémentation du point de terminaison AWS Glue Iceberg REST, consultez [Connexion au catalogue de données à l’aide du point de terminaison AWS Glue Iceberg REST](https://docs.aws.amazon.com/glue/latest/dg/connect-glu-iceberg-rest.html) dans le *Guide de l’utilisateur AWS Glue *.

# Accès aux tables à l’aide du point de terminaison Iceberg REST d’Amazon S3 Tables
<a name="s3-tables-integrating-open-source"></a>

Vous pouvez connecter votre Iceberg REST client au point de terminaison Iceberg REST d’Amazon S3 Tables et passer des appels REST API pour créer, mettre à jour ou interroger des tables dans des compartiments de table S3. Le point de terminaison implémente un ensemble de Iceberg REST APIs normes spécifiées dans la [spécification de l'API Apache Iceberg REST Catalog Open](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml). Le point de terminaison fonctionne en traduisant les opérations de l’Iceberg REST API en opérations de S3 Tables correspondantes.

**Note**  
Le point de Iceberg REST terminaison Amazon S3 Tables peut être utilisé pour accéder aux tables dans les implémentations de catalogues AWS Partner Network (APN) ou dans les implémentations de catalogues personnalisés. Il peut également être utilisé si vous n'avez besoin que d'un read/write accès de base à un seul compartiment de table. Pour les autres scénarios d'accès, nous recommandons d'utiliser le AWS Glue Iceberg REST point de terminaison pour se connecter aux tables, ce qui permet une gestion unifiée des tables, une gouvernance centralisée et un contrôle d'accès précis. Pour de plus amples informations, consultez [Accès à Amazon S3 Tables à l’aide du point de terminaison AWS Glue Iceberg REST](s3-tables-integrating-glue-endpoint.md).

## Configuration du point de terminaison
<a name="configure-endpoint"></a>

Vous vous connectez au point de terminaison Iceberg REST d’Amazon S3 Tables à l’aide du point de terminaison du service. Les points de terminaison Iceberg REST de S3 Tables ont le format suivant :

```
https://s3tables.<REGION>.amazonaws.com/iceberg
```

Reportez-vous à [Tables Régions AWS et points de terminaison S3](s3-tables-regions-quotas.md#s3-tables-regions) pour les points de terminaison spécifiques à une région.

**Propriétés de configuration du catalogue**

Lorsque vous utilisez un client Iceberg pour connecter un moteur d’analytique au point de terminaison du service, vous devez spécifier les propriétés de configuration suivantes lors de l’initialisation du catalogue. Remplacez le *placeholder values* par les informations relatives à votre région et à votre compartiment de tables.
+ Le point de terminaison spécifique à la région en tant qu’URI du point de terminaison : `https://s3tables.<REGION>.amazonaws.com/iceberg`
+ L’ARN de votre compartiment de table comme emplacement de l’entrepôt : `arn:aws:s3tables:<region>:<accountID>:bucket/<bucketname>`
+ Propriétés Sigv4 pour l’authentification. Le nom de signature SigV4 pour les demandes de point de terminaison de service est le suivant : `s3tables`

Les exemples suivants vous montrent comment configurer différents clients pour utiliser le point de terminaison Iceberg REST d’Amazon S3 Tables.

------
#### [ PyIceberg ]

Pour utiliser le point de terminaison Iceberg REST d’Amazon S3 Tables avec PyIceberg, spécifiez les propriétés de configuration d’application suivantes :

```
rest_catalog = load_catalog(
  catalog_name,
  **{
    "type": "rest",    
    "warehouse":"arn:aws:s3tables:<Region>:<accountID>:bucket/<bucketname>",
    "uri": "https://s3tables.<Region>.amazonaws.com/iceberg",
    "rest.sigv4-enabled": "true",
    "rest.signing-name": "s3tables",
    "rest.signing-region": "<Region>"
  }
)
```

------
#### [ Apache Spark ]

Pour utiliser le point de Iceberg REST terminaison Amazon S3 Tables avecSpark, spécifiez les propriétés de configuration de l'application suivantes, en les *placeholder values* remplaçant par les informations relatives à votre région et à votre compartiment de tables.

```
spark-shell \
  --packages "org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,software.amazon.awssdk:bundle:2.20.160,software.amazon.awssdk:url-connection-client:2.20.160" \
  --master "local[*]" \
  --conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
  --conf "spark.sql.defaultCatalog=spark_catalog" \
   --conf "spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkCatalog" \
  --conf "spark.sql.catalog.spark_catalog.type=rest" \
  --conf "spark.sql.catalog.spark_catalog.uri=https://s3tables.<Region>.amazonaws.com/iceberg" \
  --conf "spark.sql.catalog.spark_catalog.warehouse=arn:aws:s3tables:<Region>:<accountID>:bucket/<bucketname>" \
  --conf "spark.sql.catalog.spark_catalog.rest.sigv4-enabled=true" \
  --conf "spark.sql.catalog.spark_catalog.rest.signing-name=s3tables" \
  --conf "spark.sql.catalog.spark_catalog.rest.signing-region=<Region>" \
  --conf "spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO" \
  --conf "spark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.SimpleAWSCredentialProvider" \
  --conf "spark.sql.catalog.spark_catalog.rest-metrics-reporting-enabled=false"
```

------

## Authentification et autorisation d’accès au point de terminaison
<a name="tables-endpoint-auth"></a>

Les demandes d'API adressées aux points de terminaison du service S3 Tables sont authentifiées à l'aide de AWS Signature Version 4 (SigV4). Consultez [AWS la version 4 de Signature pour les demandes d'API](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) afin d'en savoir plus sur AWS SigV4.

Le nom de signature SigV4 pour les demandes de point de terminaison Iceberg REST d’Amazon S3 Tables est le suivant : `s3tables`

Les demandes adressées au point de terminaison Iceberg REST d’Amazon S3 Tables sont autorisées à l’aide d’actions `s3tables` IAM correspondant aux opérations d’API REST. Ces autorisations peuvent être définies dans les stratégies IAM basées sur l’identité ou les politiques basées sur les ressources associées aux tables et aux compartiments de table. Pour de plus amples informations, veuillez consulter [Gestion des accès pour S3 Tables](s3-tables-setting-up.md).

 Vous pouvez suivre les demandes adressées à vos tables via le point de terminaison REST avec AWS CloudTrail. Les demandes seront journalisées en tant qu’action IAM S3 correspondante. Par exemple, une API `LoadTable` génère un événement de gestion pour l’opération `GetTableMetadataLocation` et un événement de données pour l’opération `GetTableData`. Pour de plus amples informations, veuillez consulter [Journalisation avec AWS CloudTrail pour les tables S3](s3-tables-logging.md). 

## Paramètres de chemin et de préfixe
<a name="endpoint-parameter"></a>

 Iceberg REST APIs les catalogues ont un préfixe de forme libre dans leur demande. URLs Par exemple, l’appel d’API `ListNamespaces` utilise le format d’URL `GET/v1/{prefix}/namespaces`. Pour S3 Tables, le `{prefix}` de chemin REST est toujours l’ARN de votre compartiment de table codé en URL. 

Par exemple, pour l’ARN du compartiment de table suivant : `arn:aws:s3tables:us-east-1:111122223333:bucket/bucketname` le préfixe serait : `arn%3Aaws%3As3tables%3Aus-east-1%3A111122223333%3Abucket%2Fbucketname` 

### Paramètre de chemin d’accès à l’espace de noms
<a name="endpoint-parameter-namespace"></a>

 Les espaces de noms du chemin des API du catalogue Iceberg REST peuvent comporter plusieurs niveaux. Toutefois, S3 Tables ne prend en charge que les espaces de noms à un seul niveau. Pour accéder à un espace de noms dans une hiérarchie de catalogue à plusieurs niveaux, vous pouvez vous connecter à un catalogue à plusieurs niveaux situé au-dessus de l’espace de noms pour référencer l’espace de noms. Cela permet à tout moteur de requête qui prend en charge la notation en trois parties de `catalog.namespace.table` d’accéder aux objets de la hiérarchie du catalogue S3 Tables sans problèmes de compatibilité par rapport à l’utilisation de l’espace de noms à plusieurs niveaux. 

## Opérations d’API Iceberg REST prises en charge
<a name="endpoint-supported-api"></a>

Le tableau suivant présente les REST Iceberg pris en charge APIs et indique comment ils correspondent aux actions S3 Tables. 


| Opération REST Iceberg | Chemin REST | Action IAM de S3 Tables | CloudTrail EventName | 
| --- | --- | --- | --- | 
|  `getConfig`  |  `GET /v1/config`  |  `s3tables:GetTableBucket`  |  `s3tables:GetTableBucket`  | 
|  `listNamespaces`  |  `GET /v1/{prefix}/namespaces`  |  `s3tables:ListNamespaces`  |  `s3tables:ListNamespaces`  | 
|  `createNamespace`  |  `POST /v1/{prefix}/namespaces`  |  `s3tables:CreateNamespace`  |  `s3tables:CreateNamespace`  | 
|  `loadNamespaceMetadata`  |  `GET /v1/{prefix}/namespaces/{namespace}`  |  `s3tables:GetNamespace`  |  `s3tables:GetNamespace`  | 
|  `dropNamespace`  |  `DELETE /v1/{prefix}/namespaces/{namespace}`  |  `s3tables:DeleteNamespace`  |  `s3tables:DeleteNamespace`  | 
|  `listTables`  |  `GET /v1/{prefix}/namespaces/{namespace}/tables`  |  `s3tables:ListTables`  |  `s3tables:ListTables`  | 
|  `createTable`  |  `POST /v1/{prefix}/namespaces/{namespace}/tables`  |  `s3tables:CreateTable`, `s3tables:PutTableData`  |  `s3tables:CreateTable`, `s3tables:PutObject`  | 
|  `loadTable`  |  `GET /v1/{prefix}/namespaces/{namespace}/tables/{table}`  |  `s3tables:GetTableMetadataLocation`, `s3tables:GetTableData`  |  `s3tables:GetTableMetadataLocation`, `s3tables:GetObject`  | 
|  `updateTable`  |  `POST /v1/{prefix}/namespaces/{namespace}/tables/{table}`  |  `s3tables:UpdateTableMetadataLocation`, `s3tables:PutTableData`, `s3tables:GetTableData`  |  `s3tables:UpdateTableMetadataLocation`, `s3tables:PutObject`, `s3tables:GetObject`  | 
|  `dropTable`  |  `DELETE /v1/{prefix}/namespaces/{namespace}/tables/{table}`  |  `s3tables:DeleteTable`  |  `s3tables:DeleteTable`  | 
|  `renameTable`  |  `POST /v1/{prefix}/tables/rename`  |  `s3tables:RenameTable`  |  `s3tables:RenameTable`  | 
|  `tableExists`  |  `HEAD /v1/{prefix}/namespaces/{namespace}/tables/{table}`  |  `s3tables:GetTable`  |  `s3tables:GetTable`  | 
|  `namespaceExists`  |  `HEAD /v1/{prefix}/namespaces/{namespace}`  |  `s3tables:GetNamespace`  |  `s3tables:GetNamespace`  | 

## Considérations et restrictions
<a name="endpoint-considerations"></a>

Vous trouverez ci-dessous les considérations et les limites relatives à l’utilisation du point de terminaison Iceberg REST d’Amazon S3 Tables.

****Considérations****
+ **CreateTable Comportement de l'API** — L'`stage-create`option n'est pas prise en charge pour cette opération et entraîne une `400 Bad Request` erreur. Cela signifie que vous ne pouvez pas créer de table à partir des résultats d’une requête à l’aide de `CREATE TABLE AS SELECT` (CTAS).
+ **DeleteTable Comportement de l'API** : vous ne pouvez supprimer des tables que lorsque la purge est activée. La suppression de tables avec `purge=false` n’est pas prise en charge et entraîne une erreur `400 Bad Request`. Certaines versions de Spark attribuent toujours à cet indicateur la valeur false, même lors de l’exécution de commandes `DROP TABLE PURGE`. Vous pouvez essayer `DROP TABLE PURGE` ou utiliser l'[DeleteTable](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3TableBuckets_DeleteTable.html)opération S3 Tables pour supprimer une table.
+  Le point de terminaison prend uniquement en charge les opérations de métadonnées de table standard. Pour la maintenance des tables, par exemple la gestion des instantanés et le compactage, utilisez les opérations de l’API de maintenance de S3 Tables. Pour de plus amples informations, veuillez consulter [Maintenance de S3 Tables](s3-tables-maintenance-overview.md). 

****Limites****
+ Les espaces de noms multiniveaux ne sont pas pris en charge.
+ OAuthl'authentification basée n'est pas prise en charge.
+ Seule la propriété `owner` est prise en charge pour les espaces de noms.
+ Les paramètres liés à la vue APIs définis dans la [spécification Apache Iceberg REST Open API](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml) ne sont pas pris en charge.
+ L'exécution d'opérations sur une table contenant un `metadata.json` fichier de plus de 50 Mo n'est pas prise en charge et renverra une `400 Bad Request` erreur. Pour contrôler la taille de vos fichiers `metadata.json`, utilisez les opérations de maintenance des tables. Pour de plus amples informations, veuillez consulter [Maintenance de S3 Tables](s3-tables-maintenance-overview.md).

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

# Interrogation des tables Amazon S3 avec Athena
<a name="s3-tables-integrating-athena"></a>

Amazon Athena est un service de requête interactif qui permet d’analyser les données directement dans Amazon S3 à l’aide du langage SQL standard. Pour de plus amples informations, veuillez consulter [Qu'est-ce que Amazon Athena ?](https://docs.aws.amazon.com//athena/latest/ug/what-is.html) dans le *Guide de l'utilisateur d'Amazon Athena*.

Après avoir intégré vos compartiments de tables aux services AWS d'analyse, vous pouvez exécuter des requêtes en langage de définition de données (DDL), en langage de manipulation de données (DML) et en langage de requête de données (DQL) sur des tables S3 à l'aide d'Athena. Pour plus d’informations sur la manière d’interroger des tables dans un compartiment de table, consultez [Enregistrement des catalogues de compartiments de table S3](https://docs.aws.amazon.com//athena/latest/ug/gdc-register-s3-table-bucket-cat.html) dans le *Guide de l’utilisateur Amazon Athena*.

Vous pouvez également exécuter des requêtes dans Athena à partir de la console Amazon S3. 

**Important**  
Lorsque vous créez des tables, assurez-vous d’utiliser toutes les lettres minuscules dans les noms et les définitions de tables. Par exemple, assurez-vous que les noms des tables et des colonnes sont tous en minuscules. Si le nom ou la définition de votre table contient des majuscules, le tableau n'est pas pris en charge par AWS Lake Formation ou par le AWS Glue Data Catalog. Dans ce cas, votre table ne sera pas visible par les services d' AWS analyse tels qu'Amazon Athena, même si vos compartiments de tables sont intégrés aux AWS services d'analyse.   
Si la définition de votre table contient des majuscules, le message d'erreur suivant s'affiche lorsque vous exécutez une `SELECT` requête dans Athena : « GENERIC\$1INTERNAL\$1ERROR : Get table request failed : com.amazonaws.services.glue.model. ValidationException: ressource de fédération non prise en charge - Noms de table ou de colonne non valides. »

## Utilisation de la console S3 et d’Amazon Athena
<a name="query-table-console"></a>

La procédure suivante utilise la console Amazon S3 pour accéder à l’éditeur de requêtes Athena afin que vous puissiez interroger une table avec Amazon Athena. 

**Note**  
Avant d’effectuer les étapes suivantes, assurez-vous d’avoir intégré vos compartiments de table aux services d’analytique AWS de cette région. Pour de plus amples informations, veuillez consulter [Intégration des tables Amazon S3 aux services AWS d'analyse](s3-tables-integrating-aws.md).

**Pour interroger une table**

1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Dans le volet de navigation de gauche, choisissez **Compartiments de tables**.

1. Sur la page **Compartiments de table**, choisissez le compartiment qui contient la table que vous souhaitez interroger.

1. Dans la page des détails du compartiment, choisissez le bouton radio en regard du nom de la table que vous souhaitez interroger. 

1. Choisissez **Interroger une table avec Athena**.

1. La console Amazon Athena s’ouvre et l’éditeur de requêtes Athena apparaît avec un exemple de requête `SELECT` chargé pour vous. Modifiez cette requête en fonction de votre cas d’utilisation.

   Dans l’éditeur de requêtes, le champ **Catalogue** doit être renseigné avec **s3tablescatalog/** suivi du nom de votre compartiment de table, par exemple **s3tablescatalog/*amzn-s3-demo-bucket***. Le champ **Base de données** doit être renseigné avec l’espace de noms dans lequel votre table est stocké. 
**Note**  
Si vous ne voyez pas ces valeurs dans les champs **Catalogue** et **Base de données**, assurez-vous d’avoir intégré vos compartiments de table aux services d’analytique AWS de cette région. Pour de plus amples informations, veuillez consulter [Intégration des tables Amazon S3 aux services AWS d'analyse](s3-tables-integrating-aws.md). 

1. Pour exécuter la requête, choisissez ensuite **Run** (Exécuter).
**Note**  
Si vous recevez le message d’erreur « Autorisations insuffisantes pour exécuter la requête. Le principal ne dispose d’aucun privilège sur la ressource spécifiée. » lorsque vous essayez d’exécuter une requête dans Athena, vous devez disposer des autorisations Lake Formation nécessaires sur la table. Pour de plus amples informations, veuillez consulter [Octroi de l’autorisation Lake Formation sur une table ou une base de données](grant-permissions-tables.md#grant-lf-table).
Si le message d'erreur « Iceberg ne peut pas accéder à la ressource demandée » s'affiche lorsque vous essayez d'exécuter la requête, accédez à la AWS Lake Formation console et assurez-vous que vous vous êtes accordé des autorisations sur le catalogue de compartiments de tables et la base de données (espace de noms) que vous avez créés. Ne spécifiez pas de table lorsque vous accordez ces autorisations. Pour de plus amples informations, veuillez consulter [Octroi de l’autorisation Lake Formation sur une table ou une base de données](grant-permissions-tables.md#grant-lf-table). 
Si vous recevez le message d'erreur suivant lorsque vous exécutez une `SELECT` requête dans Athena, cela est dû à la présence de lettres majuscules dans le nom de votre table ou dans le nom de vos colonnes dans la définition de votre table : « GENERIC\$1INTERNAL\$1ERROR : Get table request failed : com.amazonaws.services.glue.model. ValidationException: ressource de fédération non prise en charge - Noms de table ou de colonne non valides. » Assurez-vous que les noms des tables et des colonnes sont tous en minuscules.

# Accès aux tables Amazon S3 avec Amazon Redshift
<a name="s3-tables-integrating-redshift"></a>

Amazon Redshift est un service d’entrepôt de données rapide, entièrement géré et doté d’une capacité de plusieurs pétaoctets. Il permet d’analyser de manière efficace, simple et économique toutes vos données grâce à vos outils d’informatique décisionnelle existants. Redshift sans serveur vous permet d’accéder aux données et de les analyser sans toutes les configurations d’un entrepôt de données mis en service. Pour plus d’informations, consultez [Commencer avec les entrepôts de données sans serveur](https://docs.aws.amazon.com//redshift/latest/gsg/new-user-serverless.html) dans le *Guide de démarrage d’Amazon Redshift*.

## Interrogation de tables Amazon S3 dans Amazon Redshift
<a name="rs-query-table"></a>

**Conditions préalables**
+ [Intégrez vos compartiments de tables avec les services d’analytique AWS](s3-tables-integrating-aws.md).
  + [Création d’un espace de noms](s3-tables-namespace-create.md).
  + [Création d’une table](s3-tables-create.md).
+ [Gestion de l’accès à une table ou à une base de données avec Lake Formation](grant-permissions-tables.md).

Une fois les prérequis satisfaits, vous pouvez commencer à utiliser Amazon Redshift pour interroger les tables de l’une des manières suivantes :
+ [En utilisant Amazon Redshift Query Editor v2](https://docs.aws.amazon.com//redshift/latest/mgmt/query-editor-v2.html)
+ [En vous connectant à un entrepôt de données Amazon Redshift à l’aide des outils client SQL](https://docs.aws.amazon.com//redshift/latest/mgmt/connecting-to-cluster.html)
+ [En utilisant l’API de données Amazon Redshift](https://docs.aws.amazon.com//redshift/latest/mgmt/data-api.html)

# Accès aux tables Amazon S3 avec Amazon EMR
<a name="s3-tables-integrating-emr"></a>

Amazon EMR (anciennement Amazon Elastic MapReduce) est une plateforme de clusters gérés qui simplifie l'exécution de frameworks de mégadonnées, tels que le AWS traitement Apache Hadoop et Apache Spark l'analyse de grandes quantités de données. Grâce à ces infrastructures et des projets open source connexes, vous pouvez traiter des données à des fins d’analyse et pour des charges de travail business intelligence. Amazon EMR vous permet également de transformer et de transférer de grandes quantités de données vers et depuis d'autres banques de données et bases de AWS données.

Vous pouvez utiliser des clusters Apache Iceberg dans Amazon EMR pour travailler avec les tables S3 en vous connectant à des compartiments de tables au cours d’une session Spark. Pour vous connecter aux compartiments de tables dans Amazon EMR, vous pouvez utiliser AWS l'intégration des services d'analyse AWS Glue Data Catalog via ou utiliser le catalogue de tables Amazon S3 open source Apache Iceberg pour le catalogue client.

**Note**  
S3 Tables est pris en charge sur [Amazon EMR version 7.5](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html) ou supérieure.

## Connexion à des compartiments de tables S3 avec Spark sur un cluster Amazon EMR Iceberg
<a name="emr-setup-cluster-spark"></a>

Dans cette procédure, vous configurez un cluster Amazon EMR configuré pour Apache Iceberg, puis vous lancez une session Spark qui se connecte à vos compartiments de table. Vous pouvez le configurer à l'aide de l'intégration des services d' AWS analyse AWS Glue, ou vous pouvez utiliser le catalogue de tables Amazon S3 open source pour Apache Iceberg le catalogue client. Pour obtenir des informations sur le catalogue client, consultez [Accès aux tables à l’aide du point de terminaison Iceberg REST d’Amazon S3 Tables](s3-tables-integrating-open-source.md). 

Choisissez votre méthode d’utilisation des tables avec Amazon EMR parmi les options suivantes.

------
#### [ Amazon S3 Tables Catalog for Apache Iceberg ]

Les prérequis suivants sont nécessaires pour interroger des tables avec Spark sur Amazon EMR en utilisant le catalogue d’Amazon S3 Tables pour Apache Iceberg.

Pour obtenir la dernière version du fichier JAR du catalogue client, consultez le référentiel [ GitHub s3-tables-catalog](https://github.com/awslabs/s3-tables-catalog).

**Conditions préalables**
+ Attachez la politique `AmazonS3TablesFullAccess` au rôle IAM que vous utilisez pour Amazon EMR.

**Pour configurer un cluster Amazon EMR afin d’interroger les tables avec Spark**

1. Créez un cluster avec la configuration suivante. Pour utiliser cet exemple, remplacez les `user input placeholders` par vos propres informations.

   ```
   aws emr create-cluster --release-label emr-7.5.0 \
   --applications Name=Spark \
   --configurations file://configurations.json \
   --region us-east-1 \
   --name My_Spark_Iceberg_Cluster \
   --log-uri s3://amzn-s3-demo-bucket/ \
   --instance-type m5.xlarge \
   --instance-count 2 \
   --service-role EMR_DefaultRole \
   --ec2-attributes \
   
   InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0,KeyName=my-key-pair
   ```

   `configurations.json`:

   ```
   [{
   "Classification":"iceberg-defaults",
   "Properties":{"iceberg.enabled":"true"}
   }]
   ```

1. [Connectez-vous au nœud primaire Spark à l’aide de SSH.](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-connect-master-node-ssh.html#emr-connect-cli)

1. Pour initialiser une session Spark pour Iceberg qui se connecte à votre compartiment de tables, entrez la commande suivante. Remplacez les `user input placeholders` par l’ARN de votre compartiment de table.

   ```
   spark-shell \
   --packages software.amazon.s3tables:s3-tables-catalog-for-iceberg-runtime:0.1.8 \
   --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-bucket1 \
   --conf spark.sql.defaultCatalog=s3tablesbucket \
   --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
   ```

1. Interrogez vos tables avec Spark SQL. Pour voir des exemples de requêtes, consultez [Interrogation des tables S3 avec Spark SQL](s3-tables-client-catalog.md#query-with-spark).

------
#### [ AWS analytics services integration ]

Les conditions préalables suivantes sont requises pour interroger des tables Spark sur Amazon EMR à l'aide de AWS l'intégration des services d'analyse.

**Conditions préalables**
+ [Intégrez vos compartiments de table aux services AWS d'analyse](s3-tables-integrating-aws.md).
+ Créez le rôle de service par défaut pour Amazon EMR (`EMR_DefaultRole_V2`). Pour plus de détails, consultez [Rôle de service pour Amazon EMR (rôle EMR)](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-iam-role.html).
+ Créez un profil d’instance Amazon EC2 pour Amazon EMR (`EMR_EC2_DefaultRole`). Pour plus de détails, consultez [Rôle de service pour les instances EC2 de cluster (profil d’instance EC2)](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-iam-role-ec2.html). 
  + Attachez la politique `AmazonS3TablesFullAccess` à `EMR_EC2_DefaultRole`.

**Pour configurer un cluster Amazon EMR afin d’interroger les tables avec Spark**

1. Créez un cluster avec la configuration suivante. Pour utiliser cet exemple, remplacez les `user input placeholder` par vos propres informations.

   ```
   aws emr create-cluster --release-label emr-7.5.0 \
   --applications Name=Spark \
   --configurations file://configurations.json \
   --region us-east-1 \
   --name My_Spark_Iceberg_Cluster \
   --log-uri s3://amzn-s3-demo-bucket/ \
   --instance-type m5.xlarge \
   --instance-count 2 \
   --service-role EMR_DefaultRole \
   --ec2-attributes \
   
   InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0,KeyName=my-key-pair
   ```

   `configurations.json`:

   ```
   [{
   "Classification":"iceberg-defaults",
   "Properties":{"iceberg.enabled":"true"}
   }]
   ```

1. [Connectez-vous au nœud primaire Spark à l’aide de SSH.](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-connect-master-node-ssh.html#emr-connect-cli)

1. Entrez la commande suivante pour initialiser une session Spark pour Iceberg qui se connecte à vos tables. Remplacez les `user input placeholders` pour Région, et ID du compte et le nom du compartiment de table par vos propres informations.

   ```
   spark-shell \
   --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
   --conf spark.sql.defaultCatalog=s3tables \
   --conf spark.sql.catalog.s3tables=org.apache.iceberg.spark.SparkCatalog \
   --conf spark.sql.catalog.s3tables.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog \
   --conf spark.sql.catalog.s3tables.client.region=us-east-1 \
   --conf spark.sql.catalog.s3tables.glue.id=111122223333:s3tablescatalog/amzn-s3-demo-table-bucket
   ```

1. Interrogez vos tables avec Spark SQL. Pour voir des exemples de requêtes, consultez [Interrogation des tables S3 avec Spark SQL](s3-tables-client-catalog.md#query-with-spark).

------

**Note**  
Si vous utilisez la commande `DROP TABLE PURGE` avec Amazon EMR :  
Amazon EMR version 7.5  
Définissez la configuration Spark `spark.sql.catalog.your-catalog-name.cache-enabled` sur `false`. Si cette configuration est définie sur `true`, exécutez la commande dans une nouvelle session ou application pour que le cache de table ne soit pas activé.
Amazon EMR versions supérieures à 7.5  
`DROP TABLE` n’est pas pris en charge. Vous pouvez utiliser l’API REST `DeleteTable` de S3 Tables pour supprimer une table.

# Visualisation des données d'un tableau avec Quick
<a name="s3-tables-integrating-quicksight"></a>

Quick est un service d'analyse commerciale rapide permettant de créer des visualisations, d'effectuer des analyses ad hoc et d'obtenir rapidement des informations commerciales à partir de vos données. Quick découvre facilement AWS les sources de données, permet aux entreprises de s'adapter à des centaines de milliers d'utilisateurs et fournit des performances de requête rapides et réactives grâce au moteur de calcul rapide, parallèle, en mémoire (SPICE). Pour plus d'informations, voir [Qu'est-ce que Quick ?](https://docs.aws.amazon.com//quicksight/latest/user/welcome.html) dans le *guide d'utilisation rapide*.

Après avoir [intégré vos compartiments de tables aux services AWS d'analyse](s3-tables-integrating-aws.md), vous pouvez créer des ensembles de données à partir de vos tables et les utiliser dans Quick à l'aide de SPICE ou des requêtes SQL directes à partir de votre moteur de requêtes. Quick prend en charge Athena en tant que source de données pour les tables S3.

## Configuration des autorisations pour les tables d'accès rapide
<a name="quicksight-permissions-tables"></a>

Avant de travailler avec les données des tables S3 dans Quick, vous devez accorder des autorisations au rôle Quick service et à l'utilisateur Quick admin sur les tables auxquelles vous souhaitez accéder. En outre, si vous l'utilisez AWS Lake Formation, vous devez également accorder des autorisations Lake Formation à votre utilisateur Quick admin sur les tables auxquelles vous souhaitez accéder.

**Accorder des autorisations au rôle de service rapide**

Lorsque vous configurez Quick pour la première fois dans votre compte, vous AWS créez un rôle de service qui permet à Quick d'accéder aux sources de données d'autres AWS services, tels qu'Athena ou Amazon Redshift. Le nom de rôle par défaut est `aws-quicksight-service-role-v0`.

1. Ouvrez la console IAM à l’adresse [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Choisissez **Rôles**, puis sélectionnez le rôle de service rapide. Le nom par défaut est `aws-quicksight-service-role-v0`

1. Choisissez **Ajouter des autorisations**, puis **Créer une politique en ligne**.

1. Sélectionnez **JSON** pour ouvrir l’éditeur de politique JSON, puis ajoutez la politique suivante.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": "glue:GetCatalog",
         "Resource": "*"
       }
     ]
   }
   ```

------

1. Choisissez **Suivant**, saisissez un **Nom de politique**, puis choisissez **Créer une politique**.

**Pour configurer les autorisations de Lake Formation pour l'utilisateur Quick admin**

1. Exécutez la AWS CLI commande suivante pour trouver l'ARN de votre utilisateur Quick admin.

   ```
   aws quicksight list-users --aws-account-id 111122223333 --namespace default --region region
   ```

1. Accordez des autorisations Lake Formation à cet ARN. Pour en savoir plus, consultez [Gestion de l’accès à une table ou à une base de données avec Lake Formation](grant-permissions-tables.md).

## Utilisation des données d'un tableau dans Quick
<a name="quicksight-connect-tables"></a>

Vous pouvez vous connecter aux données de table en utilisant Athena comme source de données.

**Conditions préalables**
+ [Intégrez vos compartiments de tables avec les services d’analytique AWS](s3-tables-integrating-aws.md).
  + [Création d’un espace de noms](s3-tables-namespace-create.md).
  + [Création d’une table](s3-tables-create.md).
  + [Configuration des autorisations pour les tables d'accès rapide](#quicksight-permissions-tables).
+ [Inscrivez-vous à Quick](https://docs.aws.amazon.com/quicksight/latest/user/signing-up.html).

1. Connectez-vous à votre compte Quick à l'adresse [ https://quicksight.aws.amazon.com/](https://quicksight.aws.amazon.com/.)

1. Dans le tableau de bord, Choisissez **Nouvelle analyse**.

1. Choisissez **Nouveau jeu de données**.

1. Sélectionnez **Athena**.

1. Saisissez un **Nom de la source de données**, puis choisissez **Créer une source de données**.

1. Choisissez Utiliser un SQL personnalisé. Vous ne pouvez pas sélectionner votre table dans le volet **Sélectionner votre table**. 

1. Saisissez une requête SQL Athena qui capture les colonnes que vous souhaitez visualiser, puis choisissez **Confirmer la requête**. Par exemple, utilisez la requête suivante pour sélectionner toutes les colonnes :

   ```
   SELECT * FROM "s3tablescatalog/table-bucket-name".namespace.table-name
   ```

1. Choisissez **Visualiser** pour analyser les données et commencer à créer des tableaux de bord. Pour plus d'informations, voir [Visualisation des données dans Quick](https://docs.aws.amazon.com//quicksight/latest/user/working-with-visuals.html) et [Exploration de tableaux de bord interactifs](https://docs.aws.amazon.com//quicksight/latest/user/using-dashboards.html) dans Quick

# Diffusion de données vers des tables avec Amazon Data Firehose
<a name="s3-tables-integrating-firehose"></a>

Amazon Data Firehose est un service entièrement géré qui fournit des [données de streaming](https://aws.amazon.com//streaming-data/) en temps réel vers des destinations telles qu'Amazon S3, Amazon Redshift, OpenSearch Amazon Splunk ServiceApache Iceberg, des tables et des points de terminaison HTTP personnalisés ou des points de terminaison HTTP détenus par des fournisseurs de services tiers pris en charge. Avec Amazon Data Firehose, vous n’avez pas besoin d’écrire d’applications ni de gérer de ressources. Vous configurez vos producteurs de données pour envoyer les données à Firehose, qui remet automatiquement les données à la destination que vous avez spécifiée. Vous pouvez également configurer Firehose pour transformer vos données avant de les remettre. Pour en savoir plus sur Amazon Data Firehose, consultez [Qu’est-ce qu’Amazon Data Firehose ?](https://docs.aws.amazon.com//firehose/latest/dev/what-is-this-service.html)

Procédez comme suit pour configurer le streaming Firehose vers des tables situées dans des compartiments de table S3 :

1.  [Intégrez vos compartiments de tables avec les services d’analytique AWS](s3-tables-integrating-aws.md). 

1. Configurez Firehose pour fournir des données dans vos tables S3. Pour ce faire, vous [créez un rôle de service Gestion des identités et des accès AWS (IAM) qui permet à Firehose d'accéder à](#firehose-role-s3tables) vos tables.

1. Accordez des autorisations explicites de rôle de service Firehose sur votre table ou l’espace de noms de votre table. Pour plus d'informations, consultez la section [Accorder les autorisations nécessaires](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-prereq.html#s3-tables-prerequisites).

1. [Créez un flux Firehose qui achemine les données vers votre table.](#firehose-stream-tables)

## Création d’un rôle permettant à Firehose d’utiliser les tables S3 comme destination
<a name="firehose-role-s3tables"></a>

Firehose a besoin d'un [rôle de service](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-service.html) IAM avec des autorisations spécifiques pour accéder aux AWS Glue tables et écrire des données dans les tables S3. Vous devez fournir ce rôle IAM lorsque vous créez un flux Firehose.

1. Ouvrez la console IAM à l’adresse [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Dans le volet de navigation de gauche, choisissez **Politiques**.

1. Choisissez **Créer une politique**, puis **JSON** dans l’éditeur de politique.

1. Ajoutez la politique en ligne suivante qui accorde des autorisations à toutes les bases de données et tables de votre catalogue de données. Si vous le souhaitez, vous pouvez accorder des autorisations à des tables et à des bases de données spécifiques uniquement. Pour utiliser cette stratégie, remplacez `user input placeholders` par vos propres informations.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "S3TableAccessViaGlueFederation",
               "Effect": "Allow",
               "Action": [
                   "glue:GetTable",
                   "glue:GetDatabase",
                   "glue:UpdateTable"
               ],
               "Resource": [
                   "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog/*",
                   "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog",
                   "arn:aws:glue:us-east-1:111122223333:catalog",
                   "arn:aws:glue:us-east-1:111122223333:database/*",
                   "arn:aws:glue:us-east-1:111122223333:table/*/*"
               ]
           },
           {
               "Sid": "S3DeliveryErrorBucketPermission",
               "Effect": "Allow",
               "Action": [
                   "s3:AbortMultipartUpload",
                   "s3:GetBucketLocation",
                   "s3:GetObject",
                   "s3:ListBucket",
                   "s3:ListBucketMultipartUploads",
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::error delivery bucket",
                   "arn:aws:s3:::error delivery bucket/*"
               ]
           },
           {
               "Sid": "RequiredWhenUsingKinesisDataStreamsAsSource",
               "Effect": "Allow",
               "Action": [
                   "kinesis:DescribeStream",
                   "kinesis:GetShardIterator",
                   "kinesis:GetRecords",
                   "kinesis:ListShards"
               ],
               "Resource": "arn:aws:kinesis:us-east-1:111122223333:stream/stream-name"
           },
           {
               "Sid": "RequiredWhenDoingMetadataReadsANDDataAndMetadataWriteViaLakeformation",
               "Effect": "Allow",
               "Action": [
                   "lakeformation:GetDataAccess"
               ],
               "Resource": "*"
           },
           {
               "Sid": "RequiredWhenUsingKMSEncryptionForS3ErrorBucketDelivery",
               "Effect": "Allow",
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": [
                   "arn:aws:kms:us-east-1:111122223333:key/KMS-key-id"
               ],
               "Condition": {
                   "StringEquals": {
                       "kms:ViaService": "s3.us-east-1.amazonaws.com"
                   },
                   "StringLike": {
                       "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::error delivery bucket/prefix*"
                   }
               }
           },
           {
               "Sid": "LoggingInCloudWatch",
               "Effect": "Allow",
               "Action": [
                   "logs:PutLogEvents"
               ],
               "Resource": [
                   "arn:aws:logs:us-east-1:111122223333:log-group:log-group-name:log-stream:log-stream-name"
               ]
           },
           {
               "Sid": "RequiredWhenAttachingLambdaToFirehose",
               "Effect": "Allow",
               "Action": [
                   "lambda:InvokeFunction",
                   "lambda:GetFunctionConfiguration"
               ],
               "Resource": [
                   "arn:aws:lambda:us-east-1:111122223333:function:function-name:function-version"
               ]
           }
       ]
   }
   ```

------

   Cette politique contient des déclarations qui autorisent l'accès à Kinesis Data Streams, l'invocation des fonctions Lambda et l'accès aux clés. AWS KMS Si vous n’utilisez aucune de ces ressources, vous pouvez supprimer les instructions correspondantes.

   Si la journalisation des erreurs est activée, Firehose envoie également des erreurs de livraison de données à votre groupe de CloudWatch journaux et à vos flux. Pour cela, vous devez configurer les noms des flux de journaux et du groupe de journaux. Pour les noms des groupes de journaux et des flux de journaux, consultez [Monitor Amazon Data Firehose Using CloudWatch ](https://docs.aws.amazon.com//firehose/latest/dev/controlling-access.html#using-iam-iceberg) Logs.

1. Une fois que vous avez créé cette politique, créez un rôle IAM avec **Service AWS ** comme **Type d’entité approuvée**.

1. Pour **Service ou cas d’utilisation**, choisissez **Kinesis**. Pour **Cas d’utilisation**, choisissez **Kinesis Firehose**.

1. Choisissez **Suivant**, puis sélectionnez la politique que vous avez créée précédemment.

1. Donnez un nom à votre rôle. Passez en revue les détails de votre rôle, puis choisissez **Créer un rôle**. Ce rôle sera doté de la politique d’approbation suivante.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sts:AssumeRole"
               ],
               "Principal": {
                   "Service": [
                       "firehose.amazonaws.com"
                   ]
               }
           }
       ]
   }
   ```

------

## Création d’un flux Firehose vers les tables S3
<a name="firehose-stream-tables"></a>

La procédure suivante montre comment créer un flux Firehose pour remettre des données dans les tables S3 à l’aide de la console. Les prérequis suivants sont nécessaires pour configurer un flux Firehose vers les tables S3.

**Conditions préalables**
+ [Intégrez vos compartiments de tables avec les services d’analytique AWS](s3-tables-integrating-aws.md).
  + [Création d’un espace de noms](s3-tables-namespace-create.md).
  + [Création d’une table](s3-tables-create.md).
+ Créez le [rôle permettant à Firehose d’accéder à S3 Tables](#firehose-role-s3tables).
+ [Accordez les autorisations nécessaires](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-prereq.html#s3-tables-prerequisites) au rôle de service Firehose que vous avez créé pour accéder aux tables.

Pour fournir des informations de routage à Firehose lorsque vous configurez un flux, vous utilisez votre espace de noms en tant que nom de base de données et le nom d’une table dans cet espace de noms. Vous pouvez utiliser ces valeurs dans la section Clé unique de la configuration d’un flux Firehose pour router les données vers une table unique. Vous pouvez également utiliser ces valeurs pour router vers une table à l’aide d’expressions de requête JSON. Pour plus d’informations, consultez [Routage des enregistrements entrants vers une table Iceberg unique](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-format-input-record.html). 

**Pour configurer un flux Firehose vers les tables S3 (console)**

1. Ouvrez la console Firehose à l'adresse. [https://console.aws.amazon.com/firehose/](https://console.aws.amazon.com/firehose/)

1. Choisissez **Créer un flux Firehose**.

1. Pour **Source**, choisissez l’une des sources suivantes :
   + Amazon Kinesis Data Streams
   + Amazon MSK
   + PUT direct

1. Pour **Destination**, choisissez **Tables Apache Iceberg**.

1. Entrez un nom pour **Nom du flux Firehose**.

1. Configurez vos **Paramètres sources**.

1. Pour **Paramètres de destination**, choisissez **Compte actuel** pour diffuser sur les tables de votre compte ou **Entre comptes** pour les tables d’un autre compte.
   + Pour les tables du **Compte actuel**, sélectionnez votre catalogue de S3 Tables dans la liste déroulante **Catalogue**.
   + Pour les tables **Entre comptes**, saisissez l’**ARN du catalogue** vers lequel vous souhaitez diffuser des données sur un autre compte.

1. Configurez les noms de base de données et de tables à l'aide d'une **configuration de clé unique**, d' JSONQuery expressions ou d'une fonction Lambda. Pour plus d’informations, reportez-vous à [Routage des enregistrements entrants vers une table Iceberg unique](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-format-input-record.html) et [Routage des enregistrements entrants vers différentes tables Iceberg](https://docs.aws.amazon.com//firehose/latest/dev/apache-iceberg-format-input-record-different.html) dans le *Guide du développeur Amazon Data Firehose*.

1. Sous **Paramètres de sauvegarde**, spécifiez un **compartiment de sauvegarde S3**.

1. Pour **Rôles IAM existants**, sous **Paramètres avancés**, sélectionnez le rôle IAM que vous avez créé pour Firehose.

1. Choisissez **Créer un flux Firehose**.

Pour plus d’informations sur les autres paramètres que vous pouvez configurer pour un flux, consultez [Configuration du flux Firehose](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-stream.html) dans le *Guide du développeur Amazon Data Firehose*.

# Exécution de tâches ETL sur des tables Amazon S3 avec AWS Glue
<a name="s3-tables-integrating-glue"></a>

AWS Glue est un service d'intégration de données sans serveur qui permet aux utilisateurs d'outils d'analyse de découvrir, de préparer, de déplacer et d'intégrer facilement des données provenant de sources multiples. Vous pouvez utiliser AWS Glue des tâches pour exécuter des pipelines d'extraction, de transformation et de chargement (ETL) afin de charger des données dans vos lacs de données. Pour plus d'informations AWS Glue, voir [Qu'est-ce que c'est AWS Glue ?](https://docs.aws.amazon.com//glue/latest/dg/what-is-glue.html) dans le *Guide AWS Glue du développeur*.

Une AWS Glue tâche encapsule un script qui se connecte à vos données source, les traite, puis les écrit dans votre cible de données. En général, une tâche exécute les scripts d'extraction, de transformation et de chargement (ETL). Les tâches peuvent exécuter des scripts conçus pour les environnements d’exécution Apache Spark. Vous pouvez surveiller les exécutions de tâche pour comprendre les métriques d’exécution telles que le statut d’achèvement, la durée et l’heure de début.

Vous pouvez utiliser des AWS Glue tâches pour traiter les données de vos tables S3 en vous connectant à vos tables via l'intégration avec les services d' AWS analyse, ou en vous connectant directement à l'aide du point de Iceberg REST terminaison Amazon S3 Tables ou du catalogue de tables Amazon S3 pourApache Iceberg. Ce guide décrit les étapes de base pour commencer à utiliser AWS Glue S3 Tables, notamment :

**Topics**
+ [Étape 1 : prérequis](#glue-etl-prereqs)
+ [Étape 2 : création d’un script pour se connecter aux compartiments de table](#glue-etl-script)
+ [Étape 3 — Création d'une AWS Glue tâche qui interroge les tables](#glue-etl-job)

Choisissez votre méthode d'accès en fonction des exigences spécifiques de votre poste AWS Glue ETL :
+ **AWS intégration des services d'analyse (recommandée)** : recommandée lorsque vous avez besoin d'une gestion centralisée des métadonnées entre plusieurs services AWS d'analyse, lorsque vous devez tirer parti des autorisations existantes du catalogue de AWS Glue données et éventuellement de Lake Formation, ou lorsque vous créez des pipelines ETL de production qui s'intègrent à d'autres AWS services tels qu'Athena ou Amazon EMR.
+ Point de **Iceberg RESTterminaison Amazon S3 Tables** : recommandé lorsque vous devez vous connecter à des tables S3 à partir de moteurs de requêtes tiers qui prennent en charge Apache Iceberg ou créent des applications ETL personnalisées nécessitant un accès direct à l'API REST, ou lorsque vous souhaitez contrôler les opérations du catalogue sans dépendre du catalogue de AWS Glue données.
+ **Catalogue d’Amazon S3 Tables pour Apache Iceberg** : à utiliser uniquement pour les applications héritées ou pour des scénarios de programmation spécifiques nécessitant la bibliothèque client Java. Cette méthode n'est pas recommandée pour les nouvelles implémentations de tâches AWS Glue ETL en raison de la complexité et de la gestion des `JAR` dépendances supplémentaires.

**Note**  
S3 Tables est pris en charge sur [AWS Glue version 5.0 ou supérieure](https://docs.aws.amazon.com//glue/latest/dg/release-notes.html).

## Étape 1 : prérequis
<a name="glue-etl-prereqs"></a>

Avant de pouvoir interroger des tables à partir d'une AWS Glue tâche, vous devez configurer un rôle IAM qui AWS Glue peut être utilisé pour exécuter la tâche. Choisissez votre méthode d’accès pour voir les prérequis spécifiques à cette méthode.

------
#### [ AWS analytics services integration (Recommended) ]

Conditions préalables requises pour utiliser l'intégration AWS analytique de S3 Tables pour exécuter des AWS Glue tâches.
+ [Intégrez vos compartiments de tables avec les services d’analytique AWS](s3-tables-integrating-aws.md).
+ [Créez un rôle IAM pour AWS Glue](https://docs.aws.amazon.com//glue/latest/dg/create-an-iam-role.html).
  + Attachez la stratégie gérée par `AmazonS3TablesFullAccess` au rôle.
  + Attachez la stratégie gérée par `AmazonS3FullAccess` au rôle.

------
#### [ Amazon S3 Tables REST Iceberg endpoint ]

Conditions requises pour utiliser le point de Iceberg REST terminaison Amazon S3 Tables pour exécuter des tâches AWS Glue ETL.
+ [Créez un rôle IAM pour AWS Glue](https://docs.aws.amazon.com//glue/latest/dg/create-an-iam-role.html).
  + Attachez la stratégie gérée par `AmazonS3TablesFullAccess` au rôle.
  + Attachez la stratégie gérée par `AmazonS3FullAccess` au rôle.

------
#### [ Amazon S3 Tables Catalog for Apache Iceberg ]

Les prérequis utilisent le catalogue de tables Amazon S3 Apache Iceberg pour exécuter des tâches AWS Glue ETL.
+ [Créez un rôle IAM pour AWS Glue](https://docs.aws.amazon.com//glue/latest/dg/create-an-iam-role.html).
  + Attachez la stratégie gérée par `AmazonS3TablesFullAccess` au rôle.
  + Attachez la stratégie gérée par `AmazonS3FullAccess` au rôle.
  + Pour utiliser le catalogue d’Amazon S3 Tables pour Apache Iceberg, vous devez télécharger le catalogue client JAR et le charger dans un compartiment S3.

****Téléchargement du catalogue JAR****

    1. Vérifiez la dernière version sur [Maven Central](https://mvnrepository.com/artifact/software.amazon.s3tables/s3-tables-catalog-for-iceberg-runtime). Vous pouvez le télécharger JAR depuis Maven Central à l’aide de votre navigateur ou à l’aide de la commande suivante. Assurez-vous de remplacer le *version number* par la dernière version.

       ```
       wget https://repo1.maven.org/maven2/software/amazon/s3tables/s3-tables-catalog-for-iceberg-runtime/0.1.5/s3-tables-catalog-for-iceberg-runtime-0.1.5.jar                       
       ```

    1. Chargez le fichier téléchargé JAR dans un compartiment S3 auquel votre rôle IAM AWS Glue peut accéder. Vous pouvez utiliser la AWS CLI commande suivante pour télécharger leJAR. Assurez-vous de remplacer le *version number* par la dernière version et le *bucket name* et *path* par la vôtre.

       ```
       aws s3 cp s3-tables-catalog-for-iceberg-runtime-0.1.5.jar s3://amzn-s3-demo-bucket/jars/
       ```

------

## Étape 2 : création d’un script pour se connecter aux compartiments de table
<a name="glue-etl-script"></a>

Pour accéder aux données de votre table lorsque vous exécutez une tâche AWS Glue ETL, vous configurez une Spark session Apache Iceberg qui se connecte à votre compartiment de table S3. Vous pouvez modifier un script existant pour vous connecter à votre compartiment de table ou créer un nouveau script. Pour plus d'informations sur la création de AWS Glue scripts, consultez [Tutoriel : rédaction d'un script AWS Glue pour Spark](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-intro-tutorial.html) dans le *guide du AWS Glue développeur*.

Vous pouvez configurer la session pour vous connecter à vos compartiments de table via l’une des méthodes d’accès à S3 Tables suivantes :
+ Intégration des services AWS d'analyse S3 Tables (recommandé)
+ Point de terminaison Iceberg REST d’Amazon S3 Tables
+ Catalogue d’Amazon S3 Tables pour Apache Iceberg

Choisissez l’une des méthodes d’accès suivantes pour consulter les instructions de configuration et les exemples de configuration.

------
#### [ AWS analytics services integration (Recommended) ]

Pour interroger des tables en AWS Glue utilisant l'intégration Spark des services AWS d'analyse, vous devez [intégrer vos compartiments de tables aux AWS](s3-tables-integrating-aws.md) services d'analyse

Vous pouvez configurer la connexion à votre compartiment de table par le biais d'une Spark session dans le cadre d'une tâche ou par AWS Glue Studio magie dans le cadre d'une session interactive. Pour utiliser les exemples suivants, remplacez les par *placeholder values* les informations relatives à votre propre compartiment de table.

**À l'aide d'un PySpark script**  
Utilisez l'extrait de code suivant dans un PySpark script pour configurer une AWS Glue tâche afin de se connecter à votre compartiment de table à l'aide de l'intégration.  

```
spark = SparkSession.builder.appName("SparkIcebergSQL") \
    .config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config("spark.sql.defaultCatalog","s3tables") \
    .config("spark.sql.catalog.s3tables", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.s3tables.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \
    .config("spark.sql.catalog.s3tables.glue.id", "111122223333:s3tablescatalog/amzn-s3-demo-table-bucket") \
    .config("spark.sql.catalog.s3tables.warehouse", "s3://amzn-s3-demo-table-bucket/warehouse/") \
    .getOrCreate()
```

**Utilisation d’une session AWS Glue interactive**  
Si vous utilisez une session de bloc-notes interactive avec AWS Glue  5.0, spécifiez les mêmes configurations en utilisant la magie `%%configure` d’une cellule avant l’exécution du code.  

```
%%configure
{"conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.defaultCatalog=s3tables --conf spark.sql.catalog.s3tables=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.s3tables.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog --conf spark.sql.catalog.s3tables.glue.id=111122223333:s3tablescatalog/amzn-s3-demo-table-bucket --conf spark.sql.catalog.s3tables.warehouse=s3://amzn-s3-demo-table-bucket/warehouse/"}
```

------
#### [ Amazon S3 Tables REST Iceberg endpoint ]

Vous pouvez configurer la connexion à votre compartiment de table par le biais d'une Spark session dans le cadre d'une tâche ou par AWS Glue Studio magie dans le cadre d'une session interactive. Pour utiliser les exemples suivants, remplacez les par *placeholder values* les informations relatives à votre propre compartiment de table.

**À l'aide d'un PySpark script**  
Utilisez l'extrait de code suivant dans un PySpark script pour configurer une AWS Glue tâche afin de se connecter à votre compartiment de table à l'aide du point de terminaison.   

```
spark = SparkSession.builder.appName("glue-s3-tables-rest") \
    .config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config("spark.sql.defaultCatalog", "s3_rest_catalog") \
    .config("spark.sql.catalog.s3_rest_catalog", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.s3_rest_catalog.type", "rest") \
    .config("spark.sql.catalog.s3_rest_catalog.uri", "https://s3tables.Region.amazonaws.com/iceberg") \
    .config("spark.sql.catalog.s3_rest_catalog.warehouse", "arn:aws:s3tables:Region:111122223333:bucket/amzn-s3-demo-table-bucket") \
    .config("spark.sql.catalog.s3_rest_catalog.rest.sigv4-enabled", "true") \
    .config("spark.sql.catalog.s3_rest_catalog.rest.signing-name", "s3tables") \
    .config("spark.sql.catalog.s3_rest_catalog.rest.signing-region", "Region") \
    .config('spark.sql.catalog.s3_rest_catalog.io-impl','org.apache.iceberg.aws.s3.S3FileIO') \
    .config('spark.sql.catalog.s3_rest_catalog.rest-metrics-reporting-enabled','false') \
    .getOrCreate()
```

**Utilisation d’une session AWS Glue interactive**  
Si vous utilisez une session de bloc-notes interactive avec la AWS Glue version 5.0, spécifiez les mêmes configurations en utilisant la `%%configure` magie d'une cellule avant l'exécution du code. Remplacez les valeurs des espaces réservés par les informations de votre compartiment de table.  

```
%%configure
{"conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.defaultCatalog=s3_rest_catalog --conf spark.sql.catalog.s3_rest_catalog=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.s3_rest_catalog.type=rest --conf spark.sql.catalog.s3_rest_catalog.uri=https://s3tables.Region.amazonaws.com/iceberg --conf spark.sql.catalog.s3_rest_catalog.warehouse=arn:aws:s3tables:Region:111122223333:bucket/amzn-s3-demo-table-bucket --conf spark.sql.catalog.s3_rest_catalog.rest.sigv4-enabled=true --conf spark.sql.catalog.s3_rest_catalog.rest.signing-name=s3tables --conf spark.sql.catalog.s3_rest_catalog.rest.signing-region=Region --conf spark.sql.catalog.s3_rest_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO --conf spark.sql.catalog.s3_rest_catalog.rest-metrics-reporting-enabled=false"}
```

------
#### [ Amazon S3 Tables Catalog for Apache Iceberg ]

Pour vous connecter à des tables à l’aide du catalogue d’Amazon S3 Tables pour Apache Iceberg, vous devez d’abord télécharger le dernier fichier jar du catalogue et le charger dans un compartiment S3. Ensuite, lorsque vous créez votre tâche, vous ajoutez le chemin d’accès au catalogue client JAR en tant que paramètre spécial. Pour plus d'informations sur les paramètres des tâches dans AWS Glue, consultez la section [Paramètres spéciaux utilisés dans les AWS Glue tâches](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html) du *Guide du AWS Glue développeur*.

Vous pouvez configurer la connexion à votre compartiment de table par le biais d'une Spark session dans le cadre d'une tâche ou par AWS Glue Studio magie dans le cadre d'une session interactive. Pour utiliser les exemples suivants, remplacez les par *placeholder values* les informations relatives à votre propre compartiment de table.

**Utilisation d’un script PySpark**  
Utilisez l'extrait de code suivant dans un PySpark script pour configurer une AWS Glue tâche afin de se connecter à votre compartiment de table à l'aide du. JAR Remplacez les valeurs des espaces réservés par les informations de votre compartiment de table.  

```
spark = SparkSession.builder.appName("glue-s3-tables") \
    .config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config("spark.sql.defaultCatalog", "s3tablesbucket") \
    .config("spark.sql.catalog.s3tablesbucket", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.s3tablesbucket.catalog-impl", "software.amazon.s3tables.iceberg.S3TablesCatalog") \
    .config("spark.sql.catalog.s3tablesbucket.warehouse", "arn:aws:s3tables:Region:111122223333:bucket/amzn-s3-demo-table-bucket") \
    .getOrCreate()
```

**Utilisation d’une session AWS Glue interactive**  
Si vous utilisez une session de bloc-notes interactive avec la AWS Glue version 5.0, spécifiez les mêmes configurations en utilisant la `%%configure` magie d'une cellule avant l'exécution du code. Remplacez les valeurs des espaces réservés par les informations de votre compartiment de table.  

```
%%configure
{"conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.defaultCatalog=s3tablesbucket --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:Region:111122223333:bucket/amzn-s3-demo-table-bucket", "extra-jars": "s3://amzn-s3-demo-bucket/jars/s3-tables-catalog-for-iceberg-runtime-0.1.5.jar"}
```

------

### Exemples de scripts
<a name="w2aac20c25c29c19c13"></a>

Les exemples de PySpark scripts suivants peuvent être utilisés pour tester l'interrogation des tables S3 avec une AWS Glue tâche. Ces scripts se connectent à votre compartiment de table et exécutent des requêtes pour : créer un nouvel espace de noms, créer un exemple de table, insérer des données dans la table et renvoyer les données de la table. Pour utiliser les scripts, remplacez-les par *placeholder values* les informations relatives à votre propre compartiment de table.

Choisissez parmi les scripts suivants en fonction de votre méthode d’accès à S3 Tables.

------
#### [ S3 Tables integration with AWS analytics services ]

```
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("SparkIcebergSQL") \
    .config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config("spark.sql.defaultCatalog","s3tables")
    .config("spark.sql.catalog.s3tables", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.s3tables.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \
    .config("spark.sql.catalog.s3tables.glue.id", "111122223333:s3tablescatalog/amzn-s3-demo-table-bucket") \
    .config("spark.sql.catalog.s3tables.warehouse", "s3://amzn-s3-demo-table-bucket/bucket/amzn-s3-demo-table-bucket") \
    .getOrCreate()

namespace = "new_namespace"
table = "new_table"

spark.sql("SHOW DATABASES").show()

spark.sql(f"DESCRIBE NAMESPACE {namespace}").show()

spark.sql(f"""
    CREATE TABLE IF NOT EXISTS {namespace}.{table} (
       id INT,
       name STRING,
       value INT
    )
""")

spark.sql(f"""
    INSERT INTO {namespace}.{table}
    VALUES 
       (1, 'ABC', 100),
       (2, 'XYZ', 200)
""")

spark.sql(f"SELECT * FROM {namespace}.{table} LIMIT 10").show()
```

------
#### [ Amazon S3 Tables REST Iceberg endpoint ]

```
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("glue-s3-tables-rest") \
    .config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config("spark.sql.defaultCatalog", "s3_rest_catalog") \
    .config("spark.sql.catalog.s3_rest_catalog", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.s3_rest_catalog.type", "rest") \
    .config("spark.sql.catalog.s3_rest_catalog.uri", "https://s3tables.Region.amazonaws.com/iceberg") \
    .config("spark.sql.catalog.s3_rest_catalog.warehouse", "arn:aws:s3tables:Region:111122223333:bucket/amzn-s3-demo-table-bucket") \
    .config("spark.sql.catalog.s3_rest_catalog.rest.sigv4-enabled", "true") \
    .config("spark.sql.catalog.s3_rest_catalog.rest.signing-name", "s3tables") \
    .config("spark.sql.catalog.s3_rest_catalog.rest.signing-region", "Region") \
    .config('spark.sql.catalog.s3_rest_catalog.io-impl','org.apache.iceberg.aws.s3.S3FileIO') \
    .config('spark.sql.catalog.s3_rest_catalog.rest-metrics-reporting-enabled','false') \
    .getOrCreate()

namespace = "s3_tables_rest_namespace"
table = "new_table_s3_rest"

spark.sql("SHOW DATABASES").show()

spark.sql(f"DESCRIBE NAMESPACE {namespace}").show()

spark.sql(f"""
    CREATE TABLE IF NOT EXISTS {namespace}.{table} (
       id INT,
       name STRING,
       value INT
    )
""")

spark.sql(f"""
    INSERT INTO {namespace}.{table}
    VALUES 
       (1, 'ABC', 100),
       (2, 'XYZ', 200)
""")

spark.sql(f"SELECT * FROM {namespace}.{table} LIMIT 10").show()
```

------
#### [ Amazon S3 Tables Catalog for Apache Iceberg ]

```
from pyspark.sql import SparkSession

#Spark session configurations
spark = SparkSession.builder.appName("glue-s3-tables") \
    .config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config("spark.sql.defaultCatalog", "s3tablesbucket") \
    .config("spark.sql.catalog.s3tablesbucket", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.s3tablesbucket.catalog-impl", "software.amazon.s3tables.iceberg.S3TablesCatalog") \
    .config("spark.sql.catalog.s3tablesbucket.warehouse", "arn:aws:s3tables:Region:111122223333:bucket/amzn-s3-demo-table-bucket") \
    .getOrCreate()

#Script
namespace = "new_namespace"
table = "new_table"

spark.sql(f"CREATE NAMESPACE IF NOT EXISTS s3tablesbucket.{namespace}")
spark.sql(f"DESCRIBE NAMESPACE {namespace}").show()

spark.sql(f"""
    CREATE TABLE IF NOT EXISTS {namespace}.{table} (
       id INT,
       name STRING,
       value INT
    )
""")

spark.sql(f"""
    INSERT INTO {namespace}.{table}
    VALUES 
       (1, 'ABC', 100),
       (2, 'XYZ', 200)
""")

spark.sql(f"SELECT * FROM {namespace}.{table} LIMIT 10").show()
```

------

## Étape 3 — Création d'une AWS Glue tâche qui interroge les tables
<a name="glue-etl-job"></a>

Les procédures suivantes indiquent comment configurer des AWS Glue tâches qui se connectent à vos compartiments de table S3. Vous pouvez le faire en utilisant AWS CLI ou en utilisant la console avec l'éditeur de AWS Glue Studio script. Pour plus d’informations, consultez [Création de tâches dans AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html) dans le *Guide de l’utilisateur AWS Glue *.

### Utilisation de l'éditeur de AWS Glue Studio script
<a name="tables-glue-studio-job"></a>

La procédure suivante montre comment utiliser l'éditeur de AWS Glue Studio script pour créer une tâche ETL qui interroge vos tables S3.

**Conditions préalables**
+ [Étape 1 : prérequis](#glue-etl-prereqs)
+ [Étape 2 : création d’un script pour se connecter aux compartiments de table](#glue-etl-script)

1. Ouvrez la AWS Glue console à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Dans le volet de navigation, choisissez **Tâches ETL**.

1. Choisissez **Éditeur de script**, puis choisissez **Charger un script** et chargez le script PySpark que vous avez créé pour interroger les tables S3.

1. Sélectionnez l’onglet **Détails de la tâche** et saisissez les informations suivantes pour **Propriétés de base**.
   + Pour **Nom**, saisissez le nom de la tâche.
   + Pour **rôle IAM**, sélectionnez le rôle que vous avez créé pour AWS Glue.

1. (Facultatif) Si vous utilisez le catalogue de tables Amazon S3 pour la méthode Apache Iceberg d'accès, pour étendre les **propriétés avancées** et pour le ** JARs chemin dépendant**, entrez l'URI S3 du fichier jar du catalogue client que vous avez chargé dans un compartiment S3 comme condition préalable. Par exemple, s3 ://*amzn-s3-demo-bucket1*/*jars*/s3- tables-catalog-for-iceberg -runtime- .jar *0.1.5*

1. Choisissez **Enregistrer** pour créer la tâche.

1. Choisissez **Exécuter**, lancez la tâche et vérifiez le statut de la tâche sous l’onglet **Exécutions**.

### En utilisant le AWS CLI
<a name="tables-glue-cli-job"></a>

La procédure suivante montre comment utiliser le AWS CLI pour créer une tâche ETL qui interroge vos tables S3. Pour utiliser les commandes, remplacez-les *placeholder values* par les vôtres.

**Conditions préalables**
+ [Étape 1 : prérequis](#glue-etl-prereqs)
+ [Étape 2 : création d’un script pour se connecter aux compartiments de table](#glue-etl-script) et chargez-le dans un compartiment S3.

1. Créez un AWS Glue emploi.

   ```
   aws glue create-job \
   --name etl-tables-job \
   --role arn:aws:iam::111122223333:role/AWSGlueServiceRole \
   --command '{
       "Name": "glueetl",
       "ScriptLocation": "s3://amzn-s3-demo-bucket1/scripts/glue-etl-query.py",
       "PythonVersion": "3"
   }' \
   --default-arguments '{
       "--job-language": "python",
       "--class": "GlueApp"
   }' \
   --glue-version "5.0"
   ```
**Note**  
(Facultatif) Si vous utilisez le catalogue d’Amazon S3 Tables pour Apache Iceberg comme méthode d’accès, ajoutez le catalogue client JAR aux `--default-arguments` avec le paramètre `--extra-jars`. Remplacez le *input placeholders* par le vôtre lorsque vous ajoutez le paramètre.  

   ```
                               "--extra-jars": "s3://amzn-s3-demo-bucket/jar-path/s3-tables-catalog-for-iceberg-runtime-0.1.5.jar" 
   ```

1. Démarrez votre tâche.

   ```
   aws glue start-job-run \
   --job-name etl-tables-job
   ```

1. Pour vérifier le statut de votre tâche, copiez l’ID d’exécution de la commande précédente et saisissez-le dans la commande suivante.

   ```
   aws glue get-job-run --job-name etl-tables-job \
   --run-id jr_ec9a8a302e71f8483060f87b6c309601ea9ee9c1ffc2db56706dfcceb3d0e1ad
   ```

# Commencer à interroger des tables S3 avec Amazon SageMaker Unified Studio
<a name="s3-tables-integrating-sagemaker"></a>

Amazon SageMaker Unified Studio est un service d'analyse complet qui vous permet d'interroger et d'extraire des informations de vos données à l'aide du SQL, du langage naturel et de blocs-notes interactifs. Il prend en charge la collaboration en équipe et les flux de travail d'analyse entre les référentiels de AWS données et les sources tierces au sein d'une interface unifiée. SageMaker Unified Studio s'intègre directement aux tables S3, permettant une transition fluide entre le stockage des données et l'analyse au sein de la console Amazon S3.

Vous pouvez intégrer les tables S3 à SageMaker Unified Studio par le biais de la console Amazon S3 ou de la console SageMaker Unified Studio.

Pour la configuration via la console SageMaker Unified Studio, consultez la [documentation SageMaker Unified Studio](https://docs.aws.amazon.com/next-generation-sagemaker/latest/userguide/s3-tables-integration.html).

## Conditions requises pour interroger des tables S3 avec SageMaker Unified Studio
<a name="sagemaker-unified-studio-requirements"></a>

L'utilisation d' SageMaker Unified Studio avec des tables S3 nécessite les éléments suivants :
+ Vos compartiments de table ont été intégrés aux services AWS d'analyse de la région actuelle. Pour de plus amples informations, veuillez consulter [Intégration des tables S3 aux services AWS d'analyse](s3-tables-integrating-aws.md).
+ Vous utilisez un rôle IAM autorisé à créer et à consulter des ressources dans SageMaker Unified Studio. Pour plus d'informations, voir [Configuration de domaines basés sur IAM dans SageMaker Unified Studio](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/setup-iam-based-domains.html).
+ Vous avez un SageMaker domaine et un projet. Pour plus d'informations, consultez les [sections Domaines](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/working-with-domains.html) dans le *guide de l'administrateur d'SageMaker Unified Studio* et [Projets](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/projects.html) dans le *guide de l'utilisateur d'SageMaker Unified Studio*.

Si vous n'avez pas encore effectué ces actions ou créé ces ressources, S3 Tables peut effectuer automatiquement cette configuration pour vous afin que vous puissiez commencer à effectuer des requêtes avec SageMaker Unified Studio.

## Commencer à interroger les tables S3 avec SageMaker Unified Studio
<a name="sagemaker-unified-studio-getting-started"></a>

1. Ouvrez la console Amazon S3 à l'adresse[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Dans le volet de navigation de gauche, choisissez **Compartiments de tables**.

1. Sur la page **Compartiments de table**, choisissez le compartiment qui contient la table que vous souhaitez interroger.

1. Sur la page des détails du bucket, sélectionnez la table que vous souhaitez interroger.

1. Choisissez **Query**. 

1. Choisissez ensuite **Table de requêtes dans SageMaker Unified Studio**.

   1. Si vous avez déjà configuré SageMaker Unified Studio pour vos tables, la console SageMaker Unified Studio s'ouvre dans l'éditeur de requêtes avec un exemple de `SELECT` requête chargé pour vous. Modifiez cette requête en fonction de votre cas d’utilisation.

   1. Si vous n'avez pas encore configuré SageMaker Unified Studio pour les tables S3, une page de configuration apparaît en une seule étape pour activer l'intégration aux services AWS d'analyse qui intègrent vos tables à des services tels que SageMaker Unified Studio. Cette étape s'exécutera automatiquement, puis vous serez redirigé vers une page de la console SageMaker Unified Studio contenant les options suivantes pour configurer votre compte pour interroger les tables S3 :

      1. Dans **Configuration en tant qu'administrateur**, votre rôle IAM fédéré actuel est sélectionné. Si votre rôle actuel ne dispose pas encore des autorisations requises, vous devrez [configurer un domaine basé sur IAM dans SageMaker Unified Studio](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/setup-iam-based-domains.html) et attribuer des autorisations à votre rôle afin de pouvoir vous connecter à SageMaker Unified Studio.

      1. Dans **Données du projet et contrôle administratif**, sélectionnez **Créer automatiquement un nouveau rôle avec les autorisations requises** pour créer automatiquement un rôle avec les autorisations requises, ou sélectionnez **Utiliser un rôle existant** et choisissez un rôle. Si le rôle choisi ne dispose pas encore des autorisations requises, vous devrez [configurer un domaine basé sur IAM dans SageMaker Unified Studio](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/adminguide/setup-iam-based-domains.html) et attribuer des autorisations à votre rôle d'administrateur d'exécution afin de pouvoir accéder aux données dans SageMaker Unified Studio.

      1. Dans **Chiffrement des données**, sélectionnez **Utiliser une AWS clé AWS détenue** pour acquérir et gérer une clé à votre place ou **Choisissez une autre AWS AWS KMS clé (avancée)** pour utiliser une clé existante ou pour en créer une nouvelle.

      1. Sélectionnez **Configurer SageMaker Unified Studio**.

      1. Ensuite, la console SageMaker Unified Studio s'ouvre dans l'éditeur de requêtes avec un exemple de `SELECT` requête chargé pour vous. Modifiez cette requête en fonction de votre cas d’utilisation.

         Dans l'éditeur de requêtes, le champ **Catalogue** doit être renseigné `s3tablescatalog/` avec le nom de votre compartiment de table, par exemple,`s3tablescatalog/amzn-s3-demo-table-bucket`. Le champ **Base de données** est renseigné avec l'espace de noms dans lequel votre table est stockée.