Considérations et limitations relatives aux requêtes CTAS - Amazon Athena

Considérations et limitations relatives aux requêtes CTAS

Les sections suivantes décrivent les considérations et les limites à prendre en compte lorsque vous utilisez des requêtes (CTAS) CREATE TABLE AS SELECT dans Athena.

Découverte de la syntaxe de requête CTAS

La syntaxe de requête CTAS diffère de la syntaxe de CREATE [EXTERNAL] TABLE utilisée pour créer des tables. Consultez CREATE TABLE AS.

Différence entre les vues et les requêtes CTAS

Les requêtes CTAS écrivent de nouvelles données dans un emplacement spécifié dans Amazon S3. Les vues n’écrivent aucune donnée.

Spécification de l’emplacement des résultats des requêtes CTAS

Si votre groupe de travail remplace le paramètre côté client pour l'emplacement des résultats de requête, Athena crée votre table à cet emplacement s3://amzn-s3-demo-bucket/tables/<query-id>/. Pour afficher l'emplacement des résultats de la requête spécifié pour le groupe de travail, affichez les détails du groupe de travail.

Si votre groupe de travail ne remplace pas l'emplacement des résultats de la requête, vous pouvez utiliser la syntaxe WITH (external_location ='s3://amzn-s3-demo-bucket/') de votre requête CTAS pour spécifier l'emplacement où les résultats de vos requêtes CTAS sont stockés.

Note

La propriété external_location doit spécifier un emplacement vide. Une requête CTAS vérifie que l'emplacement de chemin (préfixe) dans le compartiment est vide et ne remplace jamais les données si l'emplacement en contient déjà. Pour utiliser à nouveau le même emplacement, supprimez les données dans l'emplacement du préfixe de clé dans le compartiment.

Si vous omettez la syntaxe external_location et que vous n'utilisez pas le paramètre de groupe de travail, Athena utilise votre paramètre côté client pour l'emplacement des résultats de la requête et crée votre table à cet emplacement s3://amzn-s3-demo-bucket/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<query-id>/.

Localisation des fichiers orphelins

Si une instruction CTAS ou INSERT INTO échoue, il est possible que des fichiers de données orphelins soient laissés dans l’emplacement de données cible des requêtes qui ont échoué ou ont été annulées. Étant donné qu’Athena ne supprime pas, dans certains cas, les données du compartiment cible de votre requête, il se peut que ces données partielles soient incluses dans les requêtes suivantes.

Pour localiser les fichiers orphelins en vue d'une inspection ou d'une suppression, vous pouvez utiliser le fichier manifeste de données fourni par Athena pour suivre la liste des fichiers à écrire. Dans de rares cas où une requête Athena échoue brusquement, le fichier manifeste peut ne pas être présent. Vous pouvez inspecter manuellement l’emplacement S3 cible afin de trouver les fichiers orphelins. Pour plus d’informations, consultez Identification des fichiers de sortie de requête et DataManifestLocation.

Nous vous recommandons vivement d’utiliser Apache Iceberg pour réaliser des transactions atomiques de tables. Pour de plus amples informations, consultez Interrogation des tables Apache Iceberg.

Rappel concernant l’omission des clauses ORDER BY

Dans une requête CTAS, Athena ignore les clauses ORDER BY contenues dans la partie SELECT de la requête.

Selon la spécification SQL (ISO 9075, partie 2), l'ordre des lignes d'une table spécifiée par une expression de requête n'est garanti que pour l'expression de requête qui contient immédiatement la clause ORDER BY. Les tables en SQL sont dans tous les cas intrinsèquement désordonnées, et l'implémentation deORDER BY dans les clauses de sous-requête entraînerait à la fois une baisse des performances de la requête et n'entraînerait pas une sortie ordonnée. Ainsi, dans les requêtes Athena CTAS, rien ne garantit que l'ordre spécifié par la clause ORDER BY sera préservé lors de l'écriture des données.

Choix d’un format pour stocker les résultats des requêtes

Vous pouvez stocker les résultats CTAS dans PARQUET, ORC, AVRO, JSON et TEXTFILE. Les délimiteurs à plusieurs caractères ne sont pas pris en charge pour le format TEXTFILE CTAS. Si vous ne spécifiez pas de format de stockage des données, les résultats des requêtes CTAS seront stockés dans Parquet par défaut.

Les requêtes CTAS ne nécessitent pas la spécification d'un SerDe pour interpréter les transformations de format. Consultez Example: Writing query results to a different format.

Éléments à prendre en compte concernant les formats de compression

GZIPLa compression est utilisée pour les résultats des requêtes CTAS aux formats JSON et TEXTFILE. Pour Parquet, vous pouvez utiliser GZIP ou SNAPPY, la valeur par défaut étant GZIP. Pour Parquet, vous pouvez utiliser LZ4, SNAPPY, ZLIB ou ZSTD, la valeur par défaut étant ZLIB. Pour obtenir des exemples CTAS qui spécifient une compression, consultez Example: Specifying data storage and compression formats. Pour plus d’informations sur la compression dans Athena, consultez Utilisation de la compression dans Athena.

Partitionnement et compartimentation des résultats

Vous pouvez partitionner et compartimenter les données de résultats d'une requête CTAS. Pour spécifier les propriétés de la table de destination, incluez des prédicats de partitionnement et de compartimentation à la fin de la clause WITH. Pour plus d'informations, consultez Utilisation du partitionnement et de la compartimentation et Example: Creating bucketed and partitioned tables.

Lorsque vous utilisez le CTAS pour créer une table partitionnée, Athena comporte une limite d’écriture de 100 partitions. Pour plus d'informations sur le contournement de la limitation de 100 partitions, consultez Utilisation de CTAS et INSERT INTO pour contourner la limite de 100 partitions.

Chiffrement des résultats

Vous pouvez chiffrer les résultats de requête CTAS dans Simple Storage Service (Amazon S3), comme vous le faites pour chiffrer les autres résultats de requête dans Athena. Pour de plus amples informations, consultez Chiffrement des résultats de requêtes Athena stockés dans Amazon S3.

Non-application du paramètre de propriétaire attendu du compartiment à CTAS

Pour les instructions CTAS, le paramètre de propriétaire du compartiment attendu ne s'applique pas à l'emplacement de la table de destination dans Simple Storage Service (Amazon S3). Le paramètre de propriétaire du compartiment attendu s'applique uniquement à l'emplacement de sortie Simple Storage Service (Amazon S3) que vous spécifiez pour les résultats de la requête Athena. Pour de plus amples informations, consultez Spécification d’un emplacement de résultats des requêtes à l’aide de la console Athena.

Préservation des types de données de colonne

Les types de données de colonne pour une requête CTAS sont les mêmes que celles spécifiées pour la requête d'origine.