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

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

Amazon Athena 中 SQL 查询的注意事项和限制

在 Athena 中运行查询时,请记住以下注意事项和限制:

  • 存储过程— 不支持存储过程。

  • 参数化查询— Athena 引擎版本 1 不支持参数化查询,但在 Athena 引擎版本 2 中支持。有关更多信息,请参阅使用预准备语句进行查询

  • 最大分区数— 您可以使用CREATE TABLE AS SELECT(CTAS) 语句为 100。有关信息,请参阅 CREATE TABLE AS。有关解决方法,请参阅使用 CTAS 和 INSERT INTO 创建带 100 多个分区的表

  • 不支持的语句— 不支持以下语句:

    • 不支持 CREATE TABLE LIKE

    • 不支持 DESCRIBE INPUTDESCRIBE OUTPUT

    • 不支持 EXECUTE … USING

    • 不支持 MERGE 语句。

    • 不支持 UPDATE 语句。

  • Presto 联合连接器Presto 联合连接器不支持。使用 Amazon Athena 联合查询连接数据源。有关更多信息,请参阅使用 Amazon Athena 联合查询

  • 查询具有复杂数据类型的镶木地板列— 当您查询具有复杂数据类型的列 (arraymapstruct),并使用 Parquet 存储数据,Athena 引擎版本 1 读取整行数据,而不是选择性地只读取指定的列。在 Athena 引擎版本 2 中不会出现此问题。

  • 具有多个分区的表超时— 当查询具有数千个分区的表时,Athena 可能会超时。当表具有许多不属于类型 string 的分区时,可能会发生这种情况。当您使用键入string,Athena 在元数据仓级别修剪分区。但是,当您使用其他数据类型时,Athena 会在服务器端修剪分区。您拥有的分区越多,此过程所花的时间越长,并且您的查询越可能超时。要解决此问题,请将您的分区类型设置为string以便 Athena 在元数据仓级别修剪分区。这可以减少开销并防止查询超时。

  • Amazon S3 Glacier 存储— Athena 不支持查询S3 Glacier或 S3 Glacier Deep Archive 存储类别。S3 Glacier 存储类中的对象将被忽略。在 S3 Glacier Deep Archive 存储类中查询的对象将导致错误消息操作对于对象的存储类无效。Athena 将移到或转换为其中一类的数据,即使在还原存储类别后,Athena 也不再可供读取或查询。要使您希望查询的已还原对象可供读取 Athena 请将还原的对象复制回 Amazon S3 以更改其存储类别。

  • Amazon S3 访问点— Amazon S3 法在LOCATION子句。但是,对于并非通过 Amazon S3 存储桶策略没有明确拒绝对其的请求,则对于具有合适访问权限的请求者,对于并非通过 Amazon S3 访问点提供的对象 Athena 只要 Amazon S3 存储桶策略没有明确拒绝对其的请求。

  • 被视为隐藏的文件— Athena 对于以下划线开头的源文件(_)或点(.)作为隐藏。要解决此限制,请重命名文件。

  • 行或列大小限制— 单行或其列的大小不能超过 32 兆字节。例如,当 CSV 或 JSON 文件中的行包含 100 兆字节的单列时,可能会超出此限制。超过此限制也会产生错误消息文本文件中的行太长。要变通解决此限制,请确保任何行中列的数据总和小于 32MB。

跨区域查询

Athena 仅支持跨以下区域的查询。跨其他区域的查询可能会产生错误消息InvalidToken: 提供的令牌格式不正确或无效

区域名称 区域代码
亚太地区 (东京) ap-northeast-1
亚太地区 (首尔) ap-northeast-2
亚太地区 (孟买) ap-south-1
亚太地区 (新加坡) ap-southeast-1
Asia Pacific (Sydney) ap-southeast-2
加拿大 (中部) ca-central-1
欧洲(法兰克福) eu-central-1
欧洲(斯德哥尔摩) eu-north-1
欧洲(爱尔兰) eu-west-1
Europe (London) eu-west-2
Europe (Paris) eu-west-3
南美洲(圣保罗) sa-east-1
美国东部 (弗吉尼亚北部) us-east-1
美国东部 (俄亥俄) us-east-2
美国西部 (加利福尼亚北部) us-west-1
US West (Oregon) us-west-2