Création d’une table Amazon S3 - Amazon Simple Storage Service

Création d’une table Amazon S3

Une table Amazon S3 est une sous-ressource d’un compartiment de table. Cette ressource stocke des tables au format Apache Iceberg afin que vous puissiez les utiliser à l’aide de moteurs de requête et d’autres applications prenant en charge Apache Iceberg. Amazon S3 optimise en permanence vos tables afin de réduire les coûts de stockage et d’améliorer les performances des requêtes d’analytique.

Lorsque vous créez une table, Amazon S3 génère automatiquement un emplacement d’entrepôt pour cette table. Un emplacement d’entrepôt est un emplacement S3 unique où vous pouvez lire et écrire les objets associés à la table. L’exemple suivant illustre le format d’un emplacement d’entrepôt :

s3://63a8e430-6e0b-46f5-k833abtwr6s8tmtsycedn8s4yc3xhuse1b--table-s3

Les tables possèdent le format d’Amazon Resource Name (ARN) suivant :

arn:aws:s3tables:region:owner-account-id:bucket/bucket-name/table/table-id

Par défaut, vous pouvez créer jusqu’à 10,000 tables par compartiment de tables. Pour demander une augmentation de quota pour les compartiments de tables ou les tables, contactez Support.

Vous pouvez créer une table à l’aide de la console Amazon S3, de l’API REST Amazon S3, des kits AWS SDK, de l’AWS Command Line Interface (AWS CLI) ou des moteurs de requête connectés à vos compartiments de table.

Lorsque vous créez une table, vous pouvez spécifier les paramètres de chiffrement pour cette table, sauf si vous créez la table avec Athena. Si vous ne spécifiez pas de paramètres de chiffrement, la table est chiffrée avec les paramètres par défaut du compartiment de table. Pour plus d’informations, consultez Spécification du chiffrement pour les tables.

Prérequis à la création de tables

Pour créer une table, effectuez d’abord les tâches suivantes :

  • Créer un compartiment de tables.

  • Création d’un espace de noms dans votre compartiment de table.

  • Assurez-vous que vous disposez d’autorisations Gestion des identités et des accès AWS (IAM) pour s3tables:CreateTable et s3tables:PutTableData.

  • Note

    Si vous utilisez le chiffrement SSE-KMS pour votre table, vous devez disposer d’autorisations pour s3tables:PutTableEncryption et d’autorisations DescribeKey pour la clé AWS KMS choisie. En outre, la clé AWS KMS que vous utilisez doit autoriser S3 Tables à effectuer la maintenance automatique des tables. Pour plus d’informations, consultez  Exigences d’autorisation pour le chiffrement SSE-KMS de S3 Tables

Pour plus d’informations sur la table valide, consultez Règles de dénomination des tables et des espaces de noms.

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, la table n’est pas prise 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’analytique AWS tels qu’Amazon Athena, même si vos compartiments de table sont intégrés aux services d’analytique AWS.

Si la définition de votre table contient des majuscules, le message d’erreur suivant s’affiche lorsque vous exécutez une requête SELECT dans Athena : « GENERIC_INTERNAL_ERROR : échec de la demande de table : com.amazonaws.services.glue.model.ValidationException : ressource de fédération non prise en charge - Noms de table ou de colonne non valides. »

La procédure suivante utilise la console Amazon S3 pour créer une table avec Amazon Athena. Si vous n’avez pas encore créé d’espace de noms dans votre compartiment de table, vous pouvez le faire dans le cadre de ce processus. 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 plus d’informations, consultez Intégration d’Amazon S3 Tables aux services d’analytique AWS.

Note

Lorsque vous créez une table à l’aide d’Athena, cette table hérite des paramètres de chiffrement par défaut du compartiment de table. Si vous souhaitez utiliser un autre type de chiffrement, vous devez créer la table à l’aide d’une autre méthode.

Pour créer une table
  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon S3 à l’adresse https://console.aws.amazon.com/s3/.

  2. Dans le volet de navigation de gauche, choisissez Compartiments de tables.

  3. Sur la page Compartiments de table, choisissez le compartiment de table dans lequel vous souhaitez créer une table.

  4. Sur la page des détails du compartiment, choisissez Créer une table avec Athena.

  5. Dans la boîte de dialogue Créer une table avec Athena, exécutez l’une des actions suivantes :

    • Créez un nouvel espace de noms. Choisissez Créer un espace de noms, puis saisissez un nom dans le champ Nom de l’espace de noms. Les noms des espaces de noms doivent comporter de 1 à 255 caractères et être uniques dans le compartiment de table. Les caractères valides sont : a-z, A-Z, 0-9 et le trait d’union (_). Les traits de soulignement ne sont pas autorisés au début des noms d’espaces de noms.

    • Choisissez Create namespace (Créer un espace de noms).

    • Spécifiez un espace de noms existant. Choisissez Spécifier un espace de noms existant dans ce compartiment de table. Choisissez ensuite Choisissez parmi les espaces de noms existants ou Entrez un nom d’espace de noms existant. Si votre compartiment contient plus de 1 000 espaces de noms, vous devez saisir le nom de l’espace de noms s’il n’apparaît pas dans la liste.

  6. Choisissez Créer une table avec Athena.

  7. La console Amazon Athena s’ouvre et l’éditeur de requêtes Athena apparaît. 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 que vous avez créé ou sélectionné précédemment.

    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 plus d’informations, consultez Intégration d’Amazon S3 Tables aux services d’analytique AWS.

  8. L’éditeur de requêtes contient un exemple de requête que vous pouvez utiliser pour créer une table. Modifiez la requête pour spécifier le nom de la table et les colonnes que vous souhaitez attribuer à la table.

  9. Lorsque vous avez terminé de modifier la requête, choisissez Exécuter pour créer votre table.

    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 plus d’informations, consultez Octroi de l’autorisation Lake Formation sur une table ou une base de données.

    • 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 dans Athena, accédez à la console AWS Lake Formation et assurez-vous que vous vous êtes accordé les autorisations nécessaires sur le catalogue de compartiments de table 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 plus d’informations, consultez Octroi de l’autorisation Lake Formation sur une table ou une base de données.

    • Si la définition de votre table contient des majuscules, le message d’erreur suivant s’affiche lorsque vous exécutez une requête SELECT dans Athena : « GENERIC_INTERNAL_ERROR : échec de la demande de table : 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.

Si la création de votre table a réussi, le nom de votre nouvelle table apparaît dans la liste des tables d’Athena. Lorsque vous revenez à la console Amazon S3, votre nouvelle table apparaît dans la liste Tables de la page de détails du compartiment de table une fois que vous avez actualisé la liste.

Cet exemple montre comment créer une table avec un schéma à l’aide de l’AWS CLI et en spécifiant les métadonnées de la table avec JSON. Pour utiliser cet exemple, remplacez user input placeholders par vos propres informations.

aws s3tables create-table --cli-input-json file://mytabledefinition.json

Pour le fichier mytabledefinition.json, utilisez l’exemple de définition de table suivant. Pour utiliser cet exemple, remplacez user input placeholders par vos propres informations.

{ "tableBucketARN": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket", "namespace": "your_namespace", "name": "example_table", "format": "ICEBERG", "metadata": { "iceberg": { "schema": { "fields": [ {"name": "id", "type": "int","required": true}, {"name": "name", "type": "string"}, {"name": "value", "type": "int"} ] } } } }

Vous pouvez créer une table dans un moteur de requête pris en charge connecté à vos compartiments de table, par exemple lors d’une session Apache Spark sur Amazon EMR.

L’exemple suivant montre comment créer une table avec Spark à l’aide d’instructions CREATE et comment ajouter des données de table à l’aide d’instructions INSERT ou en lisant les données d’un fichier existant. Pour utiliser cet exemple, remplacez user input placeholders par vos propres informations.

spark.sql( " CREATE TABLE IF NOT EXISTS s3tablesbucket.example_namespace.`example_table` ( id INT, name STRING, value INT ) USING iceberg " )

Après avoir créé la table, vous pouvez y charger des données. Choisissez l’une des méthodes suivantes :

  • Ajoutez les données dans la table à l’aide de l’instruction INSERT.

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

    1. Lisez les données dans Spark :

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

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