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 de plus amples informations, veuillez consulter Spécifier l'emplacement des résultats d'une 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 d'une requête (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. Consultez 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 Travailler avec les résultats des requêtes et les requêtes récentes.
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ésultanteExemple :
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://amzn-s3-demo-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://amzn-s3-demo-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://amzn-s3-demo-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://amzn-s3-demo-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
ouTEXTFILE
. Pour les tables Iceberg, les formats autorisés sontORC
,PARQUET
etAVRO
. 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://amzn-s3-demo-bucket/tables/parquet_table/' ) AS SELECT * FROMtable_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 etnbuckets - 1
, inclus.truncate(s, nchars)
Fait des premiers caractères nchars
des
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 de plus amples informations, veuillez consulter Optimisez les 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 de plus amples informations, veuillez consulter Optimisez les 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 de plus amples informations, veuillez consulter Optimisez les 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 de plus amples informations, veuillez consulter Optimisez les 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 de plus amples informations, veuillez consulter 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 de plus amples informations, veuillez consulter 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 fichiersTEXTFILE
,JSON
,PARQUET
etORC
.Par exemple, si la propriété
format
spécifiePARQUET
comme format de stockage, la valeur dewrite_compression
spécifie le format de compression pour Parquet. Dans ce cas, spécifier une valeur pourwrite_compression
revient à spécifier une valeur pourparquet_compression
.Par exemple, si la propriété
format
spécifieORC
comme format de stockage, la valeur dewrite_compression
spécifie le format de compression pour ORC. Dans ce cas, spécifier une valeur pourwrite_compression
revient à spécifier une valeur pourorc_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
etparquet_compression
simultanément dans la même requête. Il en va de même pourwrite_compression
etorc_compression
. Pour plus d'informations sur les formats de compression pris en charge par chaque format de fichier, consultez Utiliser la compression dans Athena. -
orc_compression = [compression_format]
-
Type de compression à utiliser pour le format de fichier
ORC
lorsque les donnéesORC
sont écrites dans la table. Par exemple,WITH (orc_compression = 'ZLIB')
. Les morceaux du fichierORC
(à l'exception du fichierORC
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 pourORC
.Note
Pour des raisons de cohérence, nous vous recommandons d'utiliser la propriété
write_compression
au lieu deorc_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 queORC
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 deparquet_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 quePARQUET
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 Utiliser les niveaux de compression ZSTD.
-
Exemples
Pour obtenir des exemples de requêtes CTAS, consultez les ressources suivantes.