我想知道AWS Athena中是否支持OFFSET。对于mysql,以下查询正在运行,但在雅典娜中却给了我错误。任何示例都将有所帮助。
从雇员中选择* empSal> 3000 LIMIT 300 OFFSET 20
答案 0 :(得分:2)
自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
您可以执行
SELECT * FROM (
SELECT row_number() over() AS rn, * FROM elb_logs)
WHERE rn BETWEEN 5 AND 10;
注意:执行引擎仍需要从基础表中读取offset + limit行,但这仍然比将所有这些行发送回客户端并在其中放置子列表要好得多。
警告:请参见https://stackoverflow.com/a/45114359/65458来解释为什么在查询中避免OFFSET通常是个好主意。
答案 1 :(得分:1)
OFFSET AWS Athena不支持。您可以在此处查看所有受支持的SELECT参数:SELECT
答案 2 :(得分:0)
您可以通过数据的自然键来限制和过滤。
例如,如果您的数据集中有一个id
列,则可以执行以下操作:
SELECT id, * FROM elb_logs
WHERE id > __LAST_SEEN_ID__
ORDER BY id
LIMIT 500
因此,根据您处理的最后一个ID,可以使用过滤器隐式定义偏移量。