[英]BigQuery - How to iterate over results using java API
I am trying to download a query result of 90k rows (this amount states the web UI and the resulting object) but I obtain more than 130k items in the iterator as follows:我正在尝试下载 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();
}
At the end of the reading is about 130K but reuslt.getTotalRows()
contains 90K.读数结束时约为 130K,但
reuslt.getTotalRows()
包含 90K。
Do you have any idea on what I'am doing not correctly?你知道我做错了什么吗?
From JavaDoc , Page.iterateAll() returns results from all pages.从JavaDoc , Page.iterateAll() 返回所有页面的结果。
You get all results (from the first page), then advance to the next page, where you get all results again (minus the first page).您获得所有结果(从第一页),然后前进到下一页,在那里您再次获得所有结果(减去第一页)。 Setting the page size to a smaller number actually increases the results you get.
将页面大小设置为较小的数字实际上会增加您获得的结果。
Your code should look like this:您的代码应如下所示:
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++;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.