使用mysql的以下代码:
SELECT * from TABLE limit 5, 10
将拉表的第5到第10行。通过S3 select(我相信是PrestoDB)中的SQL引擎执行此操作的等效条件是什么?是否有与S3 select一起使用的行号构造函数或运算符?
答案 0 :(得分:2)
S3 Select文档位于:SQL Reference for Amazon S3 Select and Amazon Glacier Select - Amazon Glacier
LIMIT
子句记录为:
LIMIT number
LIMIT
子句基于 number 限制查询要返回的记录数。
因此,不可用。
答案 1 :(得分:0)
根据他们的文档,PrestoDB支持LIMIT子句,但仅带有一个行计数参数。它不支持offset的第二个参数。
亲自阅读文档:Jetty docs
答案 2 :(得分:0)
该功能不可用,但这就是我们为项目所做的。
在将CSV文件上传到S3之前,我们只是在CSV中添加了一个row_index字段。
row_index, field1
1, a,
2, b,
3, c,
4, d,
5, d,
所以查询
Select * from Table Limit 1, 4
将替换为
Select * from s3 where row_index >= 1 and row_index <= 4
请记住,如果文件太大,扫描成本将增加。但是您可以考虑将文件分成较小的块,以便以较低的成本获得更好的查询。
例如,具有100k-rows.csv的文件可以分为10个文件。
1-10000-rows.csv
10001-20000-rows.csv
...
然后,您可以阅读offset
,limit
变量来查找应为行查询的文件。例如
to fetch rows 200- 300 - You will query the 1-10000-rows.csv
to fetch rows 12000- 12500 - You will query the 10001-20000-rows.csv