Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BigQuery分页-使用pageToken或startIndex?_Java_Google Bigquery - Fatal编程技术网

Java BigQuery分页-使用pageToken或startIndex?

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()调用

我将在BiqQuery中获取大约500000到1000000行。我们将其限制为偏移量和最大值。在本例中,
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这取决于你的数据大小。希望你找到这个答案有帮助。请考虑接受和投票: