Pentaho PDI で Google BigQuery 用の starschema JDBC ドライバーを使用しています。
http://code.google.com/p/starschema-bigquery-jdbc/
BigQuery ウェブ コンソールを介したクエリでは 129,993 行が返されますが、JDBC ドライバーを介して同じクエリを実行すると、100,000 行しか返されません。私が気付いていないオプションや制限はありますか?
Pentaho PDI で Google BigQuery 用の starschema JDBC ドライバーを使用しています。
http://code.google.com/p/starschema-bigquery-jdbc/
BigQuery ウェブ コンソールを介したクエリでは 129,993 行が返されますが、JDBC ドライバーを介して同じクエリを実行すると、100,000 行しか返されません。私が気付いていないオプションや制限はありますか?
StarSchema コードは、結果の最初のページのみを返しているようです。
残りの結果を取得するには、ここのコードを更新する必要があります。次のようになります。
public static GetQueryResultsResponse getQueryResults(Bigquery bigquery,
String projectId, Job completedJob) throws IOException {
GetQueryResultsResponse queryResult = bigquery.jobs()
.getQueryResults(projectId,
completedJob.getJobReference().getJobId()).execute();
while(queryResult.getTotalRows() > queryResult.getRows().size()) {
queryResult.getRows().addAll(
bigquery.jobs()
.getQueryResults(projectId,
completedJob.getJobReference().getJobId())
.setStartIndex(queryResult.getRows().size())
.execute()
.getRows());
}
return queryResult;
}
ジョーダンの回答に基づいてコードを変更すると、ソリューションは次のようになります。
public static GetQueryResultsResponse getQueryResults(Bigquery bigquery,
String projectId, Job completedJob) throws IOException {
GetQueryResultsResponse queryResult = bigquery.jobs()
.getQueryResults(projectId,
completedJob.getJobReference().getJobId()).execute();
long totalRows = queryResult.getTotalRows().longValue();
if(totalRows == 0){
//if we don't have results we'll get a nullPointerException on the queryResult.getRows().size()
return queryResult;
}
while( totalRows > (long)queryResult.getRows().size() ) {
queryResult.getRows().addAll(
bigquery.jobs()
.getQueryResults(projectId,
completedJob.getJobReference().getJobId())
.setStartIndex(BigInteger.valueOf((long)queryResult.getRows().size()) )
.execute()
.getRows());
}
return queryResult;
}
これで問題は解決するはずです。また、 bqjdbc-1.3.1.jarという名前の新しいバージョンを Google コードにアップロードしました