CREATE TABLE AS - Amazon Athena

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.

CREATE TABLE AS

Crée une table remplie avec les résultats d'une requête SELECT. Pour créer une table vide, utilisez CREATE TABLE. CREATE TABLE AS combine une instruction DDL CREATE TABLE avec une instruction DML SELECT et contient donc techniquement tant des instructions DDL que DML. Notez que, bien que l'instruction CREATE TABLE AS soit regroupée ici avec d'autres instructions DDL, les requêtes CTAS dans Athena sont traitées comme des requêtes DML à des fins de Service Quotas. Pour plus d'informations sur les Service Quotas Athena, consultez Service Quotas.

Note

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 plus d’informations, consultez Spécification d'un emplacement de résultats de requête à l'aide de la console Athena.

Pour plus d'informations sur l'instruction CREATE TABLE AS allant au-delà de la portée de cette rubrique de référence, consultez Création d'une table à partir des résultats des requêtes (CTAS).

Résumé

CREATE TABLE table_name [ WITH ( property_name = expression [, ...] ) ] AS query [ WITH [ NO ] DATA ]

Où :

WITH ( property_name = expression [, ...] )

Liste de propriétés facultatives de la table CTAS, dont certaines sont spécifiques au format de stockage de données. veuillez consulter Propriétés de la table CTAS.

query

Une requête SELECT qui est utilisée pour créer une nouvelle table.

Important

Si vous envisagez de créer une requête avec les partitions, spécifiez les noms des colonnes partitionnées à la fin de la liste de colonnes dans l'instruction SELECT.

[ WITH [ NO ] DATA ]

Si WITH NO DATA est utilisé, une nouvelle table vide avec le même schéma que la table d'origine est créée.

Note

Pour inclure des en-têtes de colonne dans la sortie du résultat de votre requête, vous pouvez utiliser une simple requête SELECT au lieu d'une requête CTAS. Vous pouvez récupérer les résultats depuis l'emplacement des résultats de votre requête ou télécharger les résultats directement à l'aide de la console Athena. Pour plus d’informations, consultez Utilisation des résultats des requêtes, des requêtes récentes et des fichiers de sortie.

Propriétés de la table CTAS

Chaque table CTAS dans Athena dispose d'une liste des propriétés facultatives de table CTAS que vous spécifiez à l'aide de WITH (property_name = expression [, ...] ). Pour obtenir des informations sur l'utilisation de ces paramètres, consultez Exemples de requêtes CTAS.

WITH (property_name = expression [, ...], )
table_type = ['HIVE', 'ICEBERG']

Facultatif. L’argument par défaut est HIVE. Spécifie le type de table de la table résultante

Exemple :

WITH (table_type ='ICEBERG')
external_location = [location]
Note

Comme les tables Iceberg ne sont pas externes, cette propriété ne s'applique pas aux tables Iceberg. Pour définir l'emplacement de la racine d'une table Iceberg dans une instruction CTAS, utilisez la propriété location décrite plus loin dans cette rubrique.

Facultatif. L'emplacement où Athena enregistre votre requête CTAS dans Amazon S3.

Exemple :

WITH (external_location ='s3://DOC-EXAMPLE-BUCKET/tables/parquet_table/')

Athena n'utilise pas le même chemin pour les résultats de la requête deux fois. Si vous spécifiez l'emplacement manuellement, assurez-vous que cet emplacement Simple Storage Service (Amazon S3) n'a pas de données. Athena ne tente jamais de supprimer vos données. Si vous souhaitez utiliser le même emplacement à nouveau, nettoyez manuellement les données, faute de quoi votre requête CTAS échouera.

Si vous exécutez une requête CTAS qui spécifie un external_location dans un groupe de travail qui applique un emplacement de résultats de requête, la requête échoue avec un message d'erreur. Pour voir l’emplacement des résultats de la requête spécifié pour le groupe de travail, consultez les détails du groupe de travail.

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 à l'emplacement suivant :

s3://DOC-EXAMPLE-BUCKET/tables/query-id/

Si vous n'utilisez pas la propriété external_location pour spécifier un emplacement et que votre groupe de travail ne remplace pas les paramètres côté client, Athena utilise votre paramètre côté client pour l'emplacement des résultats de la requête afin de créer votre table à l'emplacement suivant :

s3://DOC-EXAMPLE-BUCKET/Unsaved-or-query-name/year/month/date/tables/query-id/
is_external = [boolean]

Facultatif. Indique si la table est une table externe. Par défaut, la valeur est true. Pour les tables Iceberg, cette valeur doit être définie sur false.

Exemple :

WITH (is_external = false)
location = [location]

Nécessaire pour les tables Iceberg. Spécifie l'emplacement racine de la table Iceberg à créer à partir des résultats de la requête.

Exemple :

WITH (location ='s3://DOC-EXAMPLE-BUCKET/tables/iceberg_table/')
field_delimiter = [delimiter]

Facultatif et spécifique aux formats de stockage de données à base de texte. Délimiteur de champ à un seul caractère pour les fichiers CSV, TSV et les fichiers texte. Par exemple, WITH (field_delimiter = ','). Actuellement, les délimiteurs de champ à plusieurs caractères ne sont pas pris en charge pour les requêtes CTAS. Si vous ne spécifiez pas de délimiteur de champs, \001 est utilisé par défaut.

format = [storage_format]

Format de stockage pour les résultats de requête CTAS, tel que ORC, PARQUET, AVRO, JSON, ION ou TEXTFILE. Pour les tables Iceberg, les formats autorisés sont ORC, PARQUET et AVRO. En cas d'omission, PARQUET est utilisé par défaut. Le nom de ce paramètre, format, doit être répertorié en minuscules, faute de quoi votre requête CTAS échoue.

Exemple :

WITH (format = 'PARQUET')
bucketed_by = ARRAY[ column_name[,…], bucket_count = [int] ]
Note

Cette propriété ne s'applique pas aux tables Iceberg. Pour les tables Iceberg, utilisez le partitionnement avec la transformation des compartiments.

Tableau de compartiments pour la mise en compartiments des données. En cas d'omission, Athena ne met pas vos données en compartiments dans cette requête.

bucket_count = [int]
Note

Cette propriété ne s'applique pas aux tables Iceberg. Pour les tables Iceberg, utilisez le partitionnement avec la transformation des compartiments.

Nombre de compartiments pour la mise en compartiments de vos données. En cas d'omission, Athena ne met pas vos données en compartiments. Exemple :

CREATE TABLE bucketed_table WITH ( bucketed_by = ARRAY[column_name], bucket_count = 30, format = 'PARQUET', external_location ='s3://DOC-EXAMPLE-BUCKET/tables/parquet_table/' ) AS SELECT * FROM table_name
partitioned_by = ARRAY[ col_name[,…] ]
Note

Cette propriété ne s'applique pas aux tables Iceberg. Pour utiliser les transformations de partition pour les tables Iceberg, utilisez la propriété partitioning décrite plus loin dans cette rubrique.

Facultatif. Tableau composé de colonnes à l'aide duquel la table CTAS est partitionnée. Vérifiez que les noms des colonnes partitionnées sont répertoriés à la fin de la liste des colonnes dans l'instruction SELECT.

partitioning = ARRAY[partition_transform, ...]

Facultatif. Spécifie le partitionnement de la table Iceberg à créer. Iceberg prend en charge une grande variété de transformations et d'évolutions de partitions. Les transformations de partition sont résumées dans le tableau suivant.

Transformation Description
year(ts) Crée une partition pour chaque année. La valeur de la partition est la différence entière en années entre ts et le 1er janvier 1970.
month(ts) Crée une partition pour chaque mois de chaque année. La valeur de la partition est la différence entière en mois entre ts et le 1er janvier 1970.
day(ts) Crée une partition pour chaque jour de chaque année. La valeur de la partition est la différence entière en jours entre ts et le 1er janvier 1970.
hour(ts) Crée une partition pour chaque heure de chaque jour. La valeur de la partition est un horodatage dont les minutes et les secondes sont définies sur zéro.
bucket(x, nbuckets) Hache les données dans le nombre de compartiments spécifié. La valeur de la partition est un hachage entier de x, avec une valeur comprise entre 0 et nbuckets - 1, inclus.
truncate(s, nchars) Fait des premiers caractères nchars de s la valeur de la partition.

Exemple :

WITH (partitioning = ARRAY['month(order_date)', 'bucket(account_number, 10)', 'country']))
optimize_rewrite_min_data_file_size_bytes = [long]

Facultatif. Configuration spécifique à l'optimisation des données. Les fichiers inférieurs à la valeur spécifiée sont inclus pour l'optimisation. La valeur par défaut est de 0,75 fois la valeur de write_target_data_file_size_bytes. Cette propriété ne s'applique qu'aux tables Iceberg. Pour plus d’informations, consultez Optimisation des tables Iceberg.

Exemple :

WITH (optimize_rewrite_min_data_file_size_bytes = 402653184)
optimize_rewrite_max_data_file_size_bytes = [long]

Facultatif. Configuration spécifique à l'optimisation des données. Les fichiers supérieurs à la valeur spécifiée sont inclus pour l'optimisation. La valeur par défaut est de 1,8 fois la valeur de write_target_data_file_size_bytes. Cette propriété ne s'applique qu'aux tables Iceberg. Pour plus d’informations, consultez Optimisation des tables Iceberg.

Exemple :

WITH (optimize_rewrite_max_data_file_size_bytes = 966367641)
optimize_rewrite_data_file_threshold = [int]

Facultatif. Configuration spécifique à l'optimisation des données. S'il y a moins de fichiers de données nécessitant une optimisation que le seuil donné, les fichiers ne sont pas réécrits. Cela permet d'accumuler un plus grand nombre de fichiers de données afin de produire des fichiers plus proches de la taille cible et de sauter les calculs inutiles afin de réduire les coûts. La valeur par défaut est 5. Cette propriété ne s'applique qu'aux tables Iceberg. Pour plus d’informations, consultez Optimisation des tables Iceberg.

Exemple :

WITH (optimize_rewrite_data_file_threshold = 5)
optimize_rewrite_delete_file_threshold = [int]

Facultatif. Configuration spécifique à l'optimisation des données. S'il y a moins de fichiers de suppression associés à un fichier de données que le seuil, le fichier de données n'est pas réécrit. Cela permet d'accumuler un plus grand nombre de fichiers de suppression pour chaque fichier de données afin de réduire les coûts. La valeur par défaut est 2. Cette propriété ne s'applique qu'aux tables Iceberg. Pour plus d’informations, consultez Optimisation des tables Iceberg.

Exemple :

WITH (optimize_rewrite_delete_file_threshold = 2)
vacuum_min_snapshots_to_keep = [int]

Facultatif. Configuration spécifique à Vacuum. Le nombre minimum d'instantanés les plus récents à retenir. La valeur par défaut est 1. Cette propriété ne s'applique qu'aux tables Iceberg. Pour plus d’informations, consultez VACUUM.

Note

La propriété vacuum_min_snapshots_to_keep nécessite la version 3 du moteur Athena.

Exemple :

WITH (vacuum_min_snapshots_to_keep = 1)
vacuum_max_snapshot_age_seconds = [long]

Facultatif. Configuration spécifique à Vacuum. Période en secondes qui représente l'âge des instantanés à retenir. La valeur par défaut est de 432 000 (5 jours). Cette propriété ne s'applique qu'aux tables Iceberg. Pour plus d’informations, consultez VACUUM.

Note

La propriété vacuum_max_snapshot_age_seconds nécessite la version 3 du moteur Athena.

Exemple :

WITH (vacuum_max_snapshot_age_seconds = 432000)
write_compression = [compression_format]

Type de compression à utiliser pour n'importe quel format de stockage permettant de spécifier la compression. La valeur compression_format spécifie la compression à utiliser lorsque les données sont écrites dans la table. Vous pouvez spécifier une compression pour les formats de fichiers TEXTFILE, JSON, PARQUET et ORC.

Par exemple, si la propriété format spécifie PARQUET comme format de stockage, la valeur de write_compression spécifie le format de compression pour Parquet. Dans ce cas, spécifier une valeur pour write_compression revient à spécifier une valeur pour parquet_compression.

Par exemple, si la propriété format spécifie ORC comme format de stockage, la valeur de write_compression spécifie le format de compression pour ORC. Dans ce cas, spécifier une valeur pour write_compression revient à spécifier une valeur pour orc_compression.

Il n'est pas possible de spécifier plusieurs propriétés de table de format de compression dans la même requête CTAS. Par exemple, vous ne pouvez pas spécifier les write_compression et parquet_compression simultanément dans la même requête. Il en va de même pour write_compression et orc_compression. Pour plus d'informations sur les formats de compression pris en charge par chaque format de fichier, consultez Prise en charge de la compression Athena.

orc_compression = [compression_format]

Type de compression à utiliser pour le format de fichier ORC lorsque les données ORC sont écrites dans la table. Par exemple, WITH (orc_compression = 'ZLIB'). Les morceaux du fichier ORC (à l'exception du fichier ORC Postscript) sont compressés en utilisant la compression que vous avez spécifiée. En cas d'omission, la compression ZLIB est utilisée par défaut pour ORC.

Note

Pour des raisons de cohérence, nous vous recommandons d'utiliser la propriété write_compression au lieu de orc_compression. Utilisez la propriété format pour spécifier le format de stockage commeORC, puis utilisez la propriété write_compression pour spécifier le format de compression que ORC utilisera.

parquet_compression = [compression_format]

Type de compression à utiliser pour le format de fichier Parquet lorsque les données Parquet sont écrites dans la table. Par exemple, WITH (parquet_compression = 'SNAPPY'). Cette compression est appliquée aux blocs de colonnes dans les fichiers Parquet. En cas d'omission, la compression GZIP est utilisée par défaut pour Parquet.

Note

Pour des raisons de cohérence, nous vous recommandons d'utiliser la propriété write_compression au lieu de parquet_compression. Utilisez la propriété format pour spécifier le format de stockage commePARQUET, puis utilisez la propriété write_compression pour spécifier le format de compression que PARQUET utilisera.

compression_level = [compression_level]

Le niveau de compression à utiliser. Cette propriété s’applique uniquement à la compression ZSTD. Les valeurs possibles sont comprises entre 1 et 22. La valeur par défaut est 3. Pour plus d’informations, consultez Utilisation des niveaux de compression ZSTD dans Athena.

Exemples

Pour obtenir des exemples de requêtes CTAS, consultez les ressources suivantes.