Bigquery查询限制上限和下限

时间:2013-11-18 09:02:45

标签: python sql ruby google-bigquery

在mysql上我会输入以下查询,但在谷歌BigQuery上运行相同会引发上限错误。如何为查询指定限制?假设我有一个返回20个结果的查询,我只想要5到10之间的结果,我应该如何在Google BigQuery上构建查询?)

例如:

SELECT id,
       COUNT(total) AS total 
FROM ABC.data 
GROUP BY id 
ORDER BY count DESC 
      LIMIT 5,10;

如果我只在查询结尾处放置“LIMIT 5”,我得到前5名,如果我把“LIMIT 10”放在前10名,但是我使用什么语法来得到5到10之间

有人可以对此有所了解吗?

非常感谢任何帮助。

谢谢,祝你有个美好的一天。

3 个答案:

答案 0 :(得分:4)

我会使用窗口函数...

之类的东西
select * from 
(Select id, total, row_number() over (order by total desc) as rnb
from
(SELECT id,
       COUNT(total) AS total 
FROM ABC.data 
GROUP BY id 
))
where rnb>=5 and rnb<=10

答案 1 :(得分:1)

窗口函数的答案很好,但我想我会给出另一个选项,它涉及如何获取结果而不是查询的运行方式。

如果您只需要前N行,则可以在查询中添加LIMIT N。但是,如果您不需要前M行,则可以更改获取结果的方式。如果您正在使用java API,则可以对TableData.list()Jobs.getQueryResults()调用使用setStartIndex()方法,仅从特定索引开始获取行。

答案 2 :(得分:0)

这个问题对于不断变化的数据集毫无意义。如果您在要求前5个和下一个5之间有1秒的延迟......数据可能已经改变。它的顺序现在不同,您将错过数据或获得重复的结果。因此,像BigTable这样的数据库有一种方法可以对数据进行一次查询,并在组中为您提供结果集。如果是这种情况:您正在寻找的是名为查询游标。我不能说这比他们自己的例子更好[以下是关于它们的文档。] [1]

但是既然你说数据没有改变那么fetch()就可以了。 fetch()有2个选项,您需要注意限制和偏移。 'limit'是要返回的最大结果数。如果设置为“无”,则将检索所有可用结果。 'offset'是要跳过的结果数。 点击此处查看其他选项:https://developers.google.com/appengine/docs/python/datastore/queryclass#Query_fetch