1

使用mysql以下代码:

SELECT * from TABLE limit 5, 10 

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

4

3 回答 3

3

S3 Select 文档位于:Amazon S3 Select 和 Amazon Glacier Select 的 SQL 参考 - Amazon Glacier

LIMIT条款记录为:

LIMIT number

LIMIT子句根据 number 限制您希望查询返回的记录

所以,不可用。

于 2018-06-27T23:36:42.780 回答
2

它不能作为一项功能使用,但这就是我们为我们的项目所做的。

在将 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
于 2020-05-13T15:26:05.170 回答
0

根据他们的文档,PrestoDB 支持 LIMIT 子句,但只有一个参数用于行数。它不支持偏移量的第二个参数。

自己阅读文档:https ://prestodb.io/docs/current/sql/select.html

于 2018-06-27T23:14:45.963 回答