CREATE TABLE AS
创建新表,使用 SELECT 查询的结果填充该表。要创建空表,请使用 CREATE TABLE。有关 CREATE TABLE AS 在此参考主题范围之外的其他信息,请参阅 从查询结果创建表(CTAS)。
对于 CTAS 语句,预期存储桶拥有者设置不适用于 Amazon S3 中的目标表位置。预期存储桶拥有者设置仅适用于您为 Athena 查询结果指定的 Amazon S3 输出位置。有关更多信息,请参阅使用 Athena 控制台指定查询结果位置。
摘要
CREATE TABLE table_name
[ WITH ( property_name = expression [, ...] ) ]
AS query
[ WITH [ NO ] DATA ]
其中:
若要在查询结果输出中包含列标题,可以使用简单的 SELECT 查询而不是 CTAS 查询。您可以从查询结果位置检索结果,也可以使用 Athena 控制台直接下载结果。有关更多信息,请参阅使用查询结果、最近查询和输出文件。
CTAS 表属性
Athena 中的每个 CTAS 表具有可选的 CTAS 表属性列表,您可以使用 WITH (property_name = expression [, ...] ) 指定。有关使用这些参数的信息,请参阅 CTAS 查询的示例。
WITH (property_name = expression [, ...], )-
external_location = [location]-
可选。Athena 在 Amazon S3 中保存您的 CTAS 查询的位置,如以下示例所示:
WITH (external_location ='s3://my-bucket/tables/parquet_table/')Athena 不会对查询结果使用同一路径两次。如果您手动指定了位置,请确保您指定的 Amazon S3 位置没有任何数据。Athena 从不尝试删除数据。如果您要再次使用相同的位置,请手动删除数据,否则 CTAS 查询将失败。
如果您运行一个 CTAS 查询,且该查询在强制执行查询结果位置的工作组中指定
external_location,则查询会失败并出现错误消息。要查看为工作组指定的查询结果位置, 请参阅工作组的详细信息。如果您的工作组覆盖查询结果位置的客户端设置,则 Athena 会在以下位置创建表:
s3://<workgroup-query-results-location>/tables/<query-id>/如果您未使用
external_location属性指定位置,并且工作组未覆盖客户端设置,则 Athena 将使用查询结果位置的客户端设置在以下位置创建表:s3://<query-results-location-setting>/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<query-id>/ format = [storage_format]-
CTAS 查询结果的存储格式,例如
ORC、PARQUET、AVRO、JSON、ION或TEXTFILE。例如:WITH (format = 'PARQUET')。如果忽略,则默认使用PARQUET。此参数的名称format必须以小写列出,否则 CTAS 查询将失败。 partitioned_by = ARRAY[ col_name[,…] ]-
可选。CTAS 表进行分区所依据的列的数组列表。确认分区列的名称在
SELECT语句的列列表中最后列出。 bucketed_by = ARRAY[ bucket_name[,…] ]-
用于分桶存储数据的存储桶数组列表。如果省略,则 Athena 在此查询中不会分桶存储数据。
bucket_count = [int]-
用于分桶存储数据的存储桶编号。如果省略,Athena 不分桶存储数据。
write_compression = [compression_format]-
用于允许指定压缩的任何存储格式的压缩类型。
compression_format值指定将数据写入表时要使用的压缩。您可以为TEXTFILE、JSON、PARQUET和ORC文件格式指定压缩。例如,如果
format属性指定PARQUET作为存储格式,则write_compression的值指定 Parquet 的压缩格式。在这种情况下,为write_compression指定一个值等同于为parquet_compression指定一个值。同样,如果
format属性指定ORC作为存储格式,则write_compression的值指定 ORC 的压缩格式。在这种情况下,为write_compression指定一个值等同于为orc_compression指定一个值。不能在同一 CTAS 查询中指定多个压缩格式表属性。例如,您无法在同一个查询中同时指定
write_compression和parquet_compression。这同样适用于write_compression和orc_compression。有关每种文件格式支持的压缩类型的信息,请参阅 Athena 压缩支持。 orc_compression = [compression_format]-
将
ORC数据写入表时用于ORC文件格式的压缩类型。例如:WITH (orc_compression = 'ZLIB')。ORC文件内的块(ORCPostscript 除外)使用您指定的压缩进行压缩。如果省略,则默认情况下对ORC使用 ZLIB 压缩。注意 为保持一致性,我们建议您使用
write_compression属性而不是orc_compression。使用format属性将存储格式指定为ORC,然后使用write_compression属性指定ORC将使用的压缩格式。 parquet_compression = [compression_format]-
将 Parquet 数据写入表时用于 Parquet 文件格式的压缩类型。例如:
WITH (parquet_compression = 'SNAPPY')。此压缩应用于 Parquet 文件中的列块。如果省略,则默认情况下对 Parquet 使用 GZIP 压缩。注意 为保持一致性,我们建议您使用
write_compression属性而不是parquet_compression。使用format属性将存储格式指定为PARQUET,然后使用write_compression属性指定PARQUET将使用的压缩格式。 field_delimiter = [delimiter]-
(可选)特定于基于文本的数据存储格式。CSV、TSV 和文本文件中文件的单字符字段分隔符。例如:
WITH (field_delimiter = ',')。目前,CTAS 查询不支持多字符字段分隔符。如果您未指定字段分隔符,则默认使用\001。
示例
有关 CTAS 查询的示例,请参阅以下资源。