3

Pentaho PDI で Google BigQuery 用の starschema JDBC ドライバーを使用しています。

http://code.google.com/p/starschema-bigquery-jdbc/

BigQuery ウェブ コンソールを介したクエリでは 129,993 行が返されますが、JDBC ドライバーを介して同じクエリを実行すると、100,000 行しか返されません。私が気付いていないオプションや制限はありますか?

4

2 に答える 2

1

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;
}
于 2013-01-28T21:57:52.530 に答える
1

ジョーダンの回答に基づいてコードを変更すると、ソリューションは次のようになります。

    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 コードにアップロードしました

于 2013-01-30T08:57:00.030 に答える