CREATE TABLE AS - Amazon Athena

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 ]

其中:

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

可选 CTAS 表属性的列表,其中一些属性特定于数据存储格式。请参阅CTAS 表属性

query

用于创建新表的 SELECT 查询。

重要

如果您计划创建包含分区的查询,请指定 SELECT 语句的列列表中最后一个分区列的名称。

[ WITH [ NO ] DATA ]

如果使用 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 查询结果的存储格式,例如 ORCPARQUETAVROJSONIONTEXTFILE。例如: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 值指定将数据写入表时要使用的压缩。您可以为 TEXTFILEJSONPARQUETORC 文件格式指定压缩。

例如,如果 format 属性指定 PARQUET 作为存储格式,则 write_compression 的值指定 Parquet 的压缩格式。在这种情况下,为 write_compression 指定一个值等同于为 parquet_compression 指定一个值。

同样,如果 format 属性指定 ORC 作为存储格式,则 write_compression 的值指定 ORC 的压缩格式。在这种情况下,为 write_compression 指定一个值等同于为 orc_compression 指定一个值。

不能在同一 CTAS 查询中指定多个压缩格式表属性。例如,您无法在同一个查询中同时指定 write_compressionparquet_compression。这同样适用于 write_compressionorc_compression。有关每种文件格式支持的压缩类型的信息,请参阅 Athena 压缩支持

orc_compression = [compression_format]

ORC 数据写入表时用于 ORC 文件格式的压缩类型。例如:WITH (orc_compression = 'ZLIB')ORC 文件内的块(ORC Postscript 除外)使用您指定的压缩进行压缩。如果省略,则默认情况下对 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 查询的示例,请参阅以下资源。