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

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

CTAS 查询的注意事项和限制

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

项目 您需要了解的内容
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 查询不需要指定 SerDe 来解释格式转换。请参阅 示例:将查询结果写入不同格式

压缩格式

默认情况下,为 CTAS 查询结果使用 GZIP 压缩。对于 Parquet 和 ORC,您还可以指定 SNAPPY。请参阅 示例:指定数据存储和压缩格式

分区和存储桶限制

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

在指定目标表的属性的 WITH 子句末尾包括分区和分桶谓词。有关更多信息,请参阅 示例:创建分桶表和分区表分桶与分区

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

加密

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

数据类型

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