我正在尝试下载90k行的查询结果(此数量表示Web UI和生成的对象)但我在迭代器中获得了超过130k项,如下所示:
QueryRequest queryRequest = QueryRequest
.newBuilder("......")
.setUseLegacySql(true)
.build();
QueryResponse response = bigquery.query(queryRequest);
QueryResult result = response.getResult();
Integer c = 0;
while(result != null){
Iterator<List<FieldValue>> iter = result.iterateAll();
while(iter.hasNext()){
iter.next();
c++;
}
result = result.getNextPage();
}
在阅读结束时大约是130K,但reuslt.getTotalRows()
包含90K。
你对我做的不正确有什么想法吗?
答案 0 :(得分:2)
从JavaDoc开始,Page.iterateAll()返回所有页面的结果。
您将获得所有结果(从第一页开始),然后前进到下一页,您将再次获得所有结果(减去第一页)。将页面大小设置为较小的数字实际上会增加您获得的结果。
您的代码应如下所示:
QueryRequest queryRequest = QueryRequest
.newBuilder("......")
.setUseLegacySql(true)
.build();
QueryResponse response = bigquery.query(queryRequest);
QueryResult result = response.getResult();
Integer c = 0;
Iterator<List<FieldValue>> iter = result.iterateAll();
while(iter.hasNext()){
iter.next();
c++;
}