簡體   English   中英

BigQuery - 如何使用 Java API 迭代結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM