CTAS 查询的注意事项和限制 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

CTAS 查询的注意事项和限制

下表介绍了您需要了解的有关 Athena CTAS 查询的信息:

Item 您需要了解的内容
CTAS 查询语法

CTAS 查询语法不同于用于创建表的 CREATE [EXTERNAL] TABLE 语法。请参阅CREATE TABLE AS

注意

CTAS 查询的表、数据库或列名不应包含引号或反引号。为确保这一点,请确保您的表、数据库或列名没有保留关键字,并且不包含特殊字符(需要引号或反引号将它们括起来)。有关更多信息,请参阅表、数据库和列的名称

CTAS 查询与视图

CTAS 查询将新数据写入 Amazon S3 中的指定位置,而视图不会写入任何数据。

CTAS 查询结果的位置

如果您的工作组覆盖客户端设置查询结果位置,Athena 会在位置创建表s3://<workgroup-query-results-location>/tables/<query-id>/。要查看为工作组指定的查询结果位置,请查看工作组的详细信息

如果您的工作组不覆盖查询结果位置,则可在 CTAS 查询中使用语法 WITH (external_location ='s3://location/') 来指定 CTAS 查询结果的存储位置。

注意

external_location 属性必须指定一个空位置。CTAS 查询检查存储桶中的路径位置(前缀)是否为空,如果该位置中已有数据,永远不会覆盖这些数据。要再次使用相同的位置,请删除存储桶中键前缀位置的数据。

如果省略external_location语法并且未使用工作组设置,则 Athena 会使用客户端设置作为查询结果位置,并在位置创建表s3://<client-query-results-location>/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<query-id>/

查找孤立文件

如果 CTASINSERT INTO 语句失败,则可能会在数据位置留下孤立数据。由于 Athena 不会从存储桶中删除任何数据(甚至是部分数据),您也许能够在后续查询中读取此部分数据。若要查找孤立文件以执行检查或删除操作,您可以使用 Athena 提供的数据清单文件跟踪要写入的文件列表。有关更多信息,请参阅识别查询输出文件DataManifestLocation

用于存储查询结果的格式

如果您未指定数据存储格式,默认情况下,CTAS 查询的结果以 Parquet 格式存储。您可以使用 PARQUETORCAVROJSONTEXTFILE 格式存储 CTAS 结果。CTAS 不支持多字符分隔符TEXTFILE格式的日期和时间。CTAS 查询不需要指定 SerDe 来解释格式转换。请参阅Example: Writing Query Results to a Different Format

压缩格式

默认情况下,为 CTAS 查询结果使用 GZIP 压缩。对于 Parquet 和 ORC,您还可以指定 SNAPPY。请参阅Example: Specifying Data Storage and Compression Formats

分区和存储桶限制

您可以对 CTAS 查询的结果数据进行分区和分桶。有关更多信息,请参阅分桶与分区。Athena 支持写入到 100 个独特的分区和存储桶组合。例如,如果目标表中未定义任何存储桶,则最多可指定 100 个分区。如果指定了五个存储桶,则允许 20 个分区(每个分区有五个存储桶)。如果超过此计数,则会发生错误。

在指定目标表的属性的 WITH 子句末尾包括分区和分桶谓词。有关更多信息,请参阅Example: Creating Bucketed and Partitioned Tables分桶与分区

有关绕过 100 个分区的限制的信息,请参阅使用 CTAS 和 INSERT INTO 创建带 100 多个分区的表

加密

您可以加密 Amazon S3 中的 CTAS 查询结果,其方法类似于加密 Athena 中的其他查询结果。有关更多信息,请参阅加密在 Amazon S3 中存储的查询结果

数据类型

CTAS 查询的列数据类型与为原始查询指定的类型相同。