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 INPUT
和DESCRIBE OUTPUT
。 -
不支持
EXECUTE … USING
。 -
不支持
MERGE
语句。 -
不支持
UPDATE
语句。
-
-
Presto 联合连接器 – 不支持 Presto 联合连接器
。使用 Amazon Athena 联合查询连接数据源。有关更多信息,请参阅使用 Amazon Athena 联合查询。 -
查询具有复杂数据类型的 Parquet 列 – 查询具有复杂数据类型(
array
、map
、struct
)的列并使用 Parquet 存储数据时,Athena 引擎版本 1 将读取整行数据,而不是选择性地只读取指定的列。在 Athena 引擎版本 2 中不会出现此问题。 -
对于具有多个分区的表超时 – 在查询具有数千个分区的表时,Athena 可能会超时。当表具有许多不属于类型
string
的分区时,可能会发生这种情况。使用类型string
时,Athena 在元数据仓级别修剪分区。但是,当您使用其他数据类型时,Athena 会在服务器端修剪分区。您拥有的分区越多,此过程所花的时间越长,并且您的查询越可能超时。要解决此问题,请将您的分区类型设置为string
,以便 Athena 在元数据仓级别修剪分区。这可以减少开销并防止查询超时。 -
Amazon S3 Glacier 存储 – Athena 不支持在 S3 Glacier 灵活检索或 S3 Glacier Deep Archive 存储类或归档访问层或深度归档访问层的 S3 Intelligent Tiering 存储类中查询数据。已忽略 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 存储类中的对象。
如果数据已被移至或转换为这些类的其中之一,则 Athena 将不再可读取或查询这些数据,即使存储类对象重新还原。要使 Athena 可以读取您希望查询的已还原对象,请将还原的对象复制回 Amazon S3 以更改其存储类别。或者,您可以使用 Amazon S3 Glacier Instant Retrieval 存储类,Athena 可查询该存储类。有关更多信息,请参阅 Amazon S3 Glacier Instant Retrieval 存储类
。 -
将文件视为隐藏 – Athena 将以下划线(
_
)或句点(.
)开头的源文件视为隐藏文件。要解决此限制,请重命名文件。 -
行或列大小限制 – 单行或其列的大小不能超过 32 兆字节。例如,当 CSV 或 JSON 文件中的行包含 100 兆字节的单列时,可能会超出此限制。超过此限制也会产生错误消息
Line too long in text life
(文本文件中的行太长)。要变通解决此限制,请确保任何一行中列的数据总和小于 32MB。 -
information_schema – 如果您的 AWS Glue 元数据较少或中等,则查询
information_schema
的性能会最佳。如果您有大量的元数据,则可能会出现错误。有关查询information_schema
数据库的 AWS Glue 元数据的信息,请参阅查询 AWS Glue Data Catalog。 -
数组初始化 – 由于 Java 中的限制,无法在 Athena 中初始化具有超过 254 个参数的数组。