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.
Création d’une table Amazon S3
Une table Amazon S3 est une sous-ressource d'un bucket de tables. Les tables sont stockées dans le Apache Iceberg format afin que vous puissiez travailler avec eux à l'aide de moteurs de requêtes et d'autres applications compatibles 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 analytiques.
Lorsque vous créez une table, Amazon S3 génère automatiquement un emplacement d'entrepôt pour la table. Un emplacement d'entrepôt est un emplacement S3 unique dans lequel vous pouvez lire et écrire des 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 dans un bucket 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 AWS SDKs, 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 de plus amples informations, veuillez consulter Spécification du chiffrement pour les tables.
Conditions préalables à la création de tables
Pour créer une table, vous devez d'abord effectuer les opérations suivantes :
Création d’un espace de nomsdans votre seau de table.
Assurez-vous que vous disposez des autorisations AWS Identity and Access Management (IAM) pour
s3tables:CreateTable
ets3tables:PutTableData
.Note
Si vous utilisez le chiffrement SSE-KMS pour votre table, vous devez disposer d'autorisations et
s3tables:PutTableEncryption
DescribeKey
d'autorisations pour la clé choisie AWS KMS . En outre, la AWS KMS clé que vous utilisez doit autoriser S3 Tables à effectuer la maintenance automatique des tables. Pour de plus amples informations, consultez Exigences d'autorisation pour le chiffrement SSE-KMS des tables S3.
Pour plus d'informations sur les noms de table valides, consultezRè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 de vos 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 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_INTERNAL_ERROR : 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. »
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 tables aux services AWS d'analyse de cette région. Pour de plus amples informations, veuillez consulter Utilisation d'Amazon S3 Tables avec des services AWS d'analyse.
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
Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/s3/
. -
Dans le volet de navigation de gauche, choisissez Compartiments de tables.
-
Sur la page Compartiments de table, choisissez le compartiment dans lequel vous souhaitez créer une table.
-
Sur la page des détails du bucket, choisissez Create table with Athena.
-
Dans la boîte de dialogue Créer une table avec Athena, effectuez l'une des opérations suivantes :
-
Créez un nouvel espace de noms. Choisissez Créer un espace de noms, puis entrez 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, 0—9 et les traits de soulignement ().
_
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 Choisir parmi les espaces de noms existants ou Entrez un nom d'espace de noms existant. Si votre bucket 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.
-
-
Choisissez Créer une table avec Athéna.
-
La console Amazon Athena s'ouvre et l'éditeur de requêtes Athena apparaît. Le champ Catalog doit être renseigné avec s3tablescatalog/ suivi du nom de votre bucket 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 tables aux services AWS d'analyse de cette région. Pour de plus amples informations, veuillez consulter Utilisation d'Amazon S3 Tables avec des services AWS d'analyse.
-
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 à votre table.
-
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 n'a aucun privilège sur la ressource spécifiée. »
Lorsque vous essayez d'exécuter une requête dans Athena, vous devez obtenir les autorisations Lake Formation nécessaires sur la table. Pour de plus amples informations, veuillez consulter Octroi d'une autorisation 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 une requête dans Athena, accédez à AWS Lake Formation la 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 d'une autorisation sur une table ou une base de données. -
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_INTERNAL_ERROR : 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.
-
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 des tables de la page des détails du bucket correspondant à votre bucket de table après avoir actualisé la liste.
Cet exemple montre comment créer une table avec un schéma en utilisant AWS CLI et en spécifiant les métadonnées de la table avec JSON. Pour utiliser cet exemple, remplacez le
par vos propres informations.user
input placeholders
aws s3tables create-table --cli-input-json file://
mytabledefinition.json
Pour le mytabledefinition.json
fichier, utilisez l'exemple de définition de table suivant. Pour utiliser cet exemple, remplacez
par vos propres informations. user input
placeholders
{ "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 compatible connecté à vos compartiments de table, par exemple dans un Apache Spark session sur Amazon EMR.
L'exemple suivant montre comment créer une table avec Spark en utilisant CREATE
des instructions, et ajoutez des données de table en utilisant INSERT
des instructions ou en lisant les données d'un fichier existant. Pour utiliser cet exemple, remplacez
par vos propres informations.user input
placeholders
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 des données dans le tableau à l'aide de l'
INSERT
instruction.spark.sql( """ INSERT INTO s3tablesbucket.
my_namespace
.my_table
VALUES (1, 'ABC', 100), (2, 'XYZ', 200) """)Chargez un fichier de données existant.
Lisez les données dans Spark :
val data_file_location = "
Path such as S3 URI to data file
" val data_file = spark.read.parquet(data_file_location
)Écrivez les données dans une table Iceberg :
data_file.writeTo("s3tablesbucket.
my_namespace
.my_table
").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()