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ée une table remplie avec les résultats d'une requête SELECT. Pour créer une table vide, utilisezCREATE TABLE. CREATE TABLE AS
combine une CREATE TABLE
DDL déclaration avec une SELECT
DML déclaration et contient donc techniquement les deux DDL etDML. Notez que, bien CREATE TABLE
AS
qu'elles soient regroupées ici avec d'autres DDL instructions, les CTAS requêtes d'Athena sont traitées comme des requêtes relatives DML aux Service Quotas. Pour plus d'informations sur les Service Quotas Athena, consultez Service Quotas.
Note
Pour les CTAS instructions, le paramètre du propriétaire du compartiment attendu ne s'applique pas à l'emplacement de la table de destination dans 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 de la requête (CTAS).
Résumé
CREATE TABLE table_name
[ WITH ( property_name = expression [, ...] ) ]
AS query
[ WITH [ NO ] DATA ]
Où :
- WITH(nom_propriété = expression [,...])
-
Liste des propriétés de CTAS table facultatives, dont certaines sont spécifiques au format de stockage des données. Consultez CTASpropriétés du tableau.
- 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[NON]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 le résultat de votre requête, vous pouvez utiliser une SELECT
requête simple au lieu d'une CTAS requête. 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 de plus amples informations, veuillez consulter Travailler avec les résultats des requêtes et les requêtes récentes.
CTASpropriétés du tableau
Chaque CTAS table d'Athena possède une liste de propriétés de CTAS table facultatives que vous spécifiez à l'aide. WITH (property_name = expression [, ...] )
Pour obtenir des informations sur l'utilisation de ces paramètres, consultez Exemples de CTAS requêtes.
-
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 racine d'une table Iceberg dans une CTAS instruction, utilisez la
location
propriété décrite plus loin dans cette section.Facultatif. L'emplacement où Athena enregistre votre CTAS requête 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 réutiliser le même emplacement, supprimez les données manuellement, sinon votre CTAS requête échouera.
Si vous exécutez une CTAS requête qui spécifie un emplacement
external_location
dans un groupe de travail qui impose l'emplacement des résultats de la 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 champs à caractère unique pour les fichiers contenus dans CSVTSV, et les fichiers texte. Par exemple,
WITH (field_delimiter = ',')
. Actuellement, les délimiteurs de champs à plusieurs caractères ne sont pas pris en charge pour les CTAS requêtes. Si vous ne spécifiez pas de délimiteur de champs,\001
est utilisé par défaut. -
format = [storage_format]
-
Le format de stockage des résultats de la CTAS requête, 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 doit être indiqué en minuscules, sinon votre CTAS requête échouera.format
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. Une liste matricielle de colonnes selon lesquelles la CTAS table sera 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
.De même, si la
format
propriété indiqueORC
le format de stockage, la valeur dewrite_compression
indique le format de compression pourORC. Dans ce cas, spécifier une valeur pourwrite_compression
revient à spécifier une valeur pourorc_compression
.Il est impossible de spécifier plusieurs propriétés de table de format de compression dans la même CTAS requête. 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, ZLIB la compression 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, GZIP la compression 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 ZSTD compression. Les valeurs possibles sont comprises entre 1 et 22. La valeur par défaut est 3. Pour plus d’informations, consultez Utiliser les niveaux ZSTD de compression.
-
Exemples
Pour des exemples de CTAS requêtes, consultez les ressources suivantes.