AWS Athena(Presto)OFFSET支持

Mou*_*Kar 3 sql amazon-web-services presto amazon-athena

我想知道AWS Athena中是否支持OFFSET。对于mysql,以下查询正在运行,但在雅典娜中却给了我错误。任何示例都将有所帮助。

从雇员中选择* empSal> 3000 LIMIT 300 OFFSET 20

Pio*_*sen 5

雅典娜基本上是由Presto管理的。从Presto 311开始,您可以使用OFFSET m LIMIT n语法或等效的ANSI SQL :OFFSET m ROWS FETCH NEXT n ROWS ONLY

对于较旧的版本(在撰写本文时,包括AWS Athena),您可以使用row_number()窗口函数来实现OFFSET + LIMIT。

例如,代替

SELECT * FROM elb_logs
OFFSET 5 LIMIT 5 -- this doesn't work, obviously
Run Code Online (Sandbox Code Playgroud)

您可以执行

SELECT * FROM (
    SELECT row_number() over() AS rn, * FROM elb_logs)
WHERE rn BETWEEN 5 AND 10;
Run Code Online (Sandbox Code Playgroud)

注意:执行引擎仍然需要从基础表中读取offset + limit行,但这仍然比将所有这些行发送回客户端并在其中放置子列表要好得多。

警告:请参阅/sf/answers/3158005161/,了解为什么在查询中避免OFFSET通常是一个好主意。