Java BigQuery分页-使用pageToken或startIndex?
我将在BiqQuery中获取大约500000到1000000行。我们将其限制为偏移量和最大值。在本例中,Java BigQuery分页-使用pageToken或startIndex?,java,google-bigquery,Java,Google Bigquery,我将在BiqQuery中获取大约500000到1000000行。我们将其限制为偏移量和最大值。在本例中,pageSize=max和startIndex=offset 我们的数据每天只处理一次,然后上传到BigQuery 本文档建议使用pageToken而不是startIndex。 我使用pageToken和startIndex进行了一些估算,没有发现时间上的任何差异 我在StackOverflow找到了一个答案: “您应该使用从原始查询响应或以前的jobs.getQueryResults()调用
pageSize=max
和startIndex=offset
我们的数据每天只处理一次,然后上传到BigQuery
本文档建议使用pageToken
而不是startIndex
。
我使用pageToken
和startIndex
进行了一些估算,没有发现时间上的任何差异
我在StackOverflow找到了一个答案:
“您应该使用从原始查询响应或以前的jobs.getQueryResults()
调用返回的页面标记来迭代页面。这通常比使用基于索引的分页更高效、更可靠。”
但是我不明白为什么我应该使用pageToken
,那么我需要存储令牌以便在来回时使用它。就时间而言,我看不出有什么不同
但我不明白为什么我应该使用“pageToken”
两者之间的区别很少,但很重要
- page token-结果集中特定于页面的页面,不需要访问任何预先信息,例如结果的大小
因此,如果您知道自己有多少个结果,并且不关心页面大小,那么可以使用基于索引的其他明智使用页面标记,我不明白。为了澄清,查询和分页是在我们的服务器端完成的。在这种情况下,我们的客户端浏览器UI将发送一个JSON请求,其中偏移量为max=200,响应将为然后是前200条。响应也将有一个总数(3500条记录)。客户端需要跟踪jobId和pageToken。为了进行测试,我将pageToken存储在服务器端。为了获得查询结果,我使用pageSize(200)和pageToken来获取基于页面的行。我可以对基于索引的分页进行同样的操作。BigQuery有一个您无法控制的API网络大小限制。这意味着,即使您请求100行,也可能由于大小的原因得到80行。其目的是确保您没有将大量数据下载到客户端。因此,如果在您的用例中你的数据量很小,你可以忽略这一点。好吧,现在我明白了,所以你永远无法保证你能得到多少行。我做了一个测试,得到了34157行,返回100000行。但是你能像200行一样安全吗?还是永远不会安全?谢谢。我做了更多的研究,这是官方数字,最大响应大小-128 MB压缩1这取决于你的数据大小。希望你找到这个答案有帮助。请考虑接受和投票: