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, utilisezCREATE TABLE. CREATE TABLE AScombine 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é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 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 ORCPARQUET,AVRO,JSON,ION, ouTEXTFILE. 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 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 * 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. 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 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 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 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.

De même, si la format propriété indique ORC le format de stockage, la valeur de write_compression indique le format de compression pourORC. Dans ce cas, spécifier une valeur pour write_compression revient à spécifier une valeur pour orc_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 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 Utiliser la compression dans 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, 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 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, 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 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 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.