Création de tables dans Athena
Pour créer des tables, vous pouvez exécuter des instructions DDL dans la console Athena, utiliser le formulaire Créer une table d’Athena ou utiliser un pilote JDBC ou ODBC. Athena utilise Apache Hive pour définir des tables et créer des bases de données, qui sont essentiellement des espaces de noms logiques de tables. Athena prend en charge diverses bibliothèques SerDe (sérialiseur/désérialiseur) dans le cadre de la création de tables pour des formats de données spécifiques. Pour obtenir la liste des bibliothèques SerDe prises en charge, veuillez consulter Choix d’un SerDe pour vos données.
Lorsque vous créez une table de base de données dans Athena, vous décrivez simplement le schéma et l'emplacement où les données de table sont situées dans Simple Storage Service (Amazon S3) pour l'interrogation au moment de la lecture. Athena ne modifie pas vos données dans Amazon S3. Les notions de base de données et de table ont donc une signification légèrement différente par rapport aux systèmes de base de données relationnelle classiques, car les données ne sont pas stockées avec la définition de schéma pour la base de données et la table.
Athena stocke le schéma dans le AWS Glue Data Catalog et l’utilise pour lire les données lorsque vous interrogez la table à l’aide de SQL. Cette approche schema-on-read, qui projette un schéma sur vos données lorsque vous exécutez une requête, élimine le besoin de charger ou de transformer les données.
Considérations et restrictions
Voici quelques limitations et aspects importants à prendre en compte pour les tables dans Athena.
Éléments à prendre en compte concernant Amazon S3
Lorsque vous créez une table, vous spécifiez un emplacement de compartiment Simple Storage Service (Amazon S3) pour les données sous-jacentes à l'aide de la clause LOCATION. Éléments à prendre en compte :
-
Athena peut uniquement interroger la dernière version des données sur un compartiment Simple Storage Service (Amazon S3) versionné, et ne peut pas interroger les versions précédentes des données.
-
Vous devez disposer d’autorisations pour utiliser des données dans l’emplacement Amazon S3. Pour de plus amples informations, consultez Contrôle de l’accès à Amazon S3 depuis Athena.
-
Athena prend en charge l'interrogation des objets stockés avec plusieurs classes de stockage dans le même compartiment spécifié par la clause
LOCATION. Par exemple, vous pouvez interroger des données dans les objets stockés dans différentes classes de stockage (Standard, Standard – Accès peu fréquent et Hiérarchisation intelligente) dans Simple Storage Service (Amazon S3). -
Athena prend en charge les compartiments de type Paiement par le demandeur. Pour savoir comment activer « Requester Pays » pour les compartiments contenant les données source que vous souhaitez interroger dans Athena, consultez Créer un groupe de travail.
-
Vous pouvez utiliser Athena pour interroger des objets restaurés à partir de classes de stockage Amazon S3 Amazon Glacier Flexible Retrieval et Amazon Glacier Deep Archive (anciennement Glacier) et Amazon Glacier Deep Archive, mais vous devez activer la fonctionnalité table par table. Si vous ne l’activez pas sur une table avant d’exécuter une requête, Athena ignore tous les objets Amazon Glacier Flexible Retrieval et Amazon Glacier Deep Archive de la table lors de l’exécution de la requête. Pour de plus amples informations, consultez Interrogation d’objets Amazon Glacier restaurés.
Pour plus d’informations sur les classes de stockage, consultez Storage classes, Changing the storage class of an object in amazon S3, Transitioning to the GLACIER storage class (object archival) et Requester Pays buckets dans le Guide d’utilisation d’Amazon Simple Storage Service.
-
Si vous exécutez des requêtes sur les compartiments Simple Storage Service (Amazon S3) avec un grand nombre d'objets et que les données ne sont pas partitionnées, de telles requêtes peuvent affecter les limites de débit de demande Get dans Simple Storage Service (Amazon S3) et conduire à des exceptions Simple Storage Service (Amazon S3). Pour éviter des erreurs, partitionnez vos données. En outre, envisagez de régler vos taux de demande Simple Storage Service (Amazon S3). Pour plus d'informations, consultez Considérations en matière de débit de demandes et de performances.
Pour plus d’informations sur la spécification d’un emplacement pour vos données dans Amazon S3, consultezSpécification de l’emplacement d’une table dans Amazon S3.
Autres considérations
-
Absence de prise en charge des transformations de données transactionnelles – Athena ne prend pas en charge les opérations basées sur des transactions (comme celles figurant dans Hive ou Presto) sur des données de table. Pour obtenir la liste complète des mots-clés non pris en charge, consultez DDL non pris en charge.
-
Opérations de type ACID sur les tables – Lorsque vous créez, mettez à jour ou supprimez des tables, ces opérations sont garanties comme étant conformes à ACID. Par exemple, si plusieurs utilisateurs ou clients tentent de créer ou de modifier une table existante en même temps, un seule opération aboutira.
-
Tables de type EXTERNAL – Sauf lors de la création de tables Iceberg, utilisez toujours le mot-clé
EXTERNAL. Si vous utilisezCREATE TABLEsans le mot cléEXTERNALpour des tables non Iceberg, Athena émet une erreur. Lorsque vous supprimez une table dans Athena, seules les métadonnées de la table sont supprimées ; les données sont conservées dans Simple Storage Service (Amazon S3). -
Longueur maximale de la chaîne de requête – La longueur maximale de la chaîne de requête est de 256 Ko.
Si vous utilisez l'opération API AWS Glue CreateTable (Créer une table) ou le modèle CloudFormation
AWS::Glue::Tablepour créer une table à utiliser dans Athena sans spécifier la propriétéTableType, puis exécutez une requête DDL commeSHOW CREATE TABLEouMSCK REPAIR TABLE, il est possible que vous receviez le message d'erreurFAILED: NullPointerException Name is null(ÉCHEC : NullPointerException, nom nul).Pour résoudre cette erreur, spécifiez une valeur pour l'attribut TableInput
TableTypedans le cadre de l'appel d'API AWS GlueCreateTableou du modèle CloudFormation. Parmi les valeurs possibles pourTableTypefigurentEXTERNAL_TABLEouVIRTUAL_VIEW.Cette exigence s'applique uniquement lorsque vous créez un tableau à l'aide de l'opération API AWS Glue
CreateTableou du modèleAWS::Glue::Table. Si vous créez une table pour Athena en utilisant à l'aide d'une instruction DDL ou d'un crawler AWS Glue, la propriétéTableTypeest définie pour vous automatiquement.