Bigquery查询限制上下限

2024-04-26 04:22:28 发布

您现在位置:Python中文网/ 问答频道 /正文

在mysql上,我会输入以下查询,但是在googlebigquery上运行同样的查询会导致上限错误。如何指定查询的限制?假设我有一个返回20个结果的查询,我只想要5到10个结果,我应该如何在googlebigquery上构建查询框架?)在

例如:

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之间使用什么语法呢。在

有人能解释一下吗?在

任何帮助都是非常感谢的。在

谢谢,祝你今天愉快。在


Tags: from框架iddatabyascount错误
3条回答

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

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

我会使用窗口函数。。。 有点像

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

对于一个不断变化的数据集来说,这个问题毫无意义。如果你在请求前5个和下一个5之间有1秒的延迟。。。数据可能已经改变了。它的顺序现在不同了,您将丢失数据或得到重复的结果。所以像BigTable这样的数据库有一种方法,可以对数据进行一次查询,然后将结果集分组给您。如果是这样的话:您要查找的是查询游标。我不能说这比他们自己的例子更好,所以[这里是关于他们的文档。][1]

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

相关问题 更多 >