在S3 Select中按索引查询行

时间:2018-06-27 22:07:32

标签: sql amazon-web-services amazon-s3 amazon-s3-select

使用mysql的以下代码:

SELECT * from TABLE limit 5, 10 

将拉表的第5到第10行。通过S3 select(我相信是PrestoDB)中的SQL引擎执行此操作的等效条件是什么?是否有与S3 select一起使用的行号构造函数或运算符?

3 个答案:

答案 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
...

然后,您可以阅读offsetlimit变量来查找应为行查询的文件。例如

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