[英]BigQuery - How to iterate over results using java API
我正在嘗試下載 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。
你知道我做錯了什么嗎?
從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++;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.