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

CTAS 查询的注意事项和限制

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

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

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

注意

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

CTAS 查询与视图

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

CTAS 查询结果的位置

Amazon S3 中存储 CTAS 查询结果的位置必须为空。CTAS 查询检查存储桶中的路径位置(前缀)是否为空,如果该位置中已有数据,永远不会覆盖这些数据。要再次使用相同的位置,请删除存储桶中密钥前缀位置的数据,否则 CTAS 查询将失败。

您可以指定用于存储 CTAS 查询结果的位置。如果省略,并且如果您的工作组不覆盖客户端设置,Athena 默认使用此位置:s3://aws-athena-query-results-<account>-<region>/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<query-id>/

如果您的工作组覆盖客户端设置,这意味着工作组的查询结果位置将用于您的 CTAS 查询。如果您指定不同的结果位置,查询将失败。要获取为工作组指定的结果位置,请查看工作组的详细信息

如果将在其中运行查询的工作组使用强制查询结果位置配置,请不要为 CTAS 查询指定 external_location。在此例中,Athena 发出错误并使指定 external_location 的查询失败。例如,如果您覆盖查询结果位置的客户端设置,强制工作组使用其自己的位置,此查询失败:CREATE TABLE <DB>.<TABLE1> WITH (format='Parquet', external_location='s3://my_test/test/') AS SELECT * FROM <DB>.<TABLE2> LIMIT 10;

查找孤立文件

如果 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 查询的列数据类型与为原始查询指定的类型相同。