BigQuery API V2(Java)を使用して、
BigQueryでクエリを実行する方法
についてご紹介します。
クエリの実行には適切なIAM権限が付与されている必要があります。
権限付与に関しては
⧉[BigQuery API(V2)] JavaでBigQueryを使う(2.権限付与)
を参照ください。
1. クエリを実行
BigQuery上でクエリを実行します。
1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
BigqueryScopes.BIGQUERY
BigqueryScopes.CLOUD_PLATFORM
BigqueryScopes.DEVSTORAGE_READ_ONLY
https://www.googleapis.com/auth/cloud-platform.read-only
⧉[BigQuery API(V2)] JavaでBigQueryを使う(3.2. BigQueryインスタンスを取得)
でスコープを指定してください。
1.2. 実行
public static void main(String[] args) throws Exception{
Bigquery bigquery = getBigquery();
Bigquery.Jobs jobs = bigquery.jobs();
QueryRequest request = new QueryRequest();
request.setQuery("SELECT * FROM `プロジェクトID.データセットID.テーブルID` LIMIT 10");
request.setUseLegacySql(false);
Bigquery.Jobs.Query query = jobs.query("プロジェクトID",request);
QueryResponse res = query.execute();
System.out.println(res);
}
1.2.1. HTTPリクエスト
POST: https://bigquery.googleapis.com/bigquery/v2/projects/{プロジェクトID}/queries
が実行されます。
1.2.2. クエリパラメータ
クエリパラメータはありまえん。
1.2.3. リクエストボディ
QueryRequestのsetメソッドにより、リクエストボディを追加できます。
| メソッド |
引数 |
説明 |
| setQuery |
String |
【必須】実行するクエリ文字列 |
| setMaxResults |
Integer |
取得するデータの最大行数 |
| setDefaultDataset |
DatasetReference |
クエリ内の非修飾テーブル名として想定されるデフォルトの情報 |
| setTimeoutMs |
Integer |
クライアントがクエリの完了を待機する最大時間(ミリ秒) |
| setDryRun |
Boolean |
ジョブを実行しないか |
| setUseQueryCache |
Boolean |
クエリキャッシュで結果を検索するか |
| setUseLegacySql |
Boolean |
BigQueryのレガシーSQL言語を使用するか |
| setParameterMode |
String |
パラメータモード(GoogleSQLのみ) |
| setQueryParameters |
List<QueryParameter> |
jobs.queryパラメータ(GoogleSQLのみ) |
| setLocation |
String |
ジョブを実行するロケーション |
| setFormatOptions |
DataFormatOptions |
出力フォーマットの調整 |
| setConnectionProperties |
List<ConnectionProperty
|
クエリの動作を変更できる接続プロパティ |
| setLabels |
Map<String,String> |
クエリに関連付けられたラベル |
| setMaximumBytesBilled |
Long |
クエリに対して請求されるバイト数の制限 |
| setRequestId |
String |
ユーザーが指定した一意の識別子 |
| setCreateSession |
Boolean |
ランダムに生成されたsessionIdを使用して新しいセッションを作成するか |
DatasetReference
| メソッド |
引数 |
説明 |
| setDatasetId |
String |
データセットID |
| setProjectId |
String |
プロジェクトID |
QueryParameter
QueryParameterType
QueryParameterType.StructTypes
| メソッド |
引数 |
説明 |
| setName |
String |
フィールドの名前 |
| setType |
QueryParameterType |
フィールドのタイプ |
| setDescription |
String |
フィールドの説明 |
QueryParameterValue
RangeValue
DataFormatOptions
| メソッド |
引数 |
説明 |
| setUseInt64Timestamp |
Boolean |
タイムスタンプをusec int64として出力するか |
ConnectionProperty
| メソッド |
引数 |
説明 |
| setKey |
String |
プロパティのキー |
| setValue |
String |
プロパティの値 |
1.3. レスポンスの内容
QueryResponse
| メソッド |
戻り値 |
説明 |
| getKind |
String |
リソースの種類 固定文字列:"bigquery#queryResponse" |
| getPageToken |
String |
次ページのトークン |
| getSchema |
⧉TableSchema |
結果のスキーマ |
| getJobReference |
JobReference |
クエリを実行するために作成されたジョブへの参照 |
| getTotalRows |
BigInteger |
クエリ結果セットの合計行数 |
| getRows |
List<TableRow> |
クエリの実行結果 |
| getTotalBytesProcessed |
Long |
処理された合計バイト数 |
| getJobComplete |
Boolean |
クエリが完了したか |
| getErrors |
List<ErrorProto> |
ジョブの実行中に発生した最初のエラー |
| getCacheHit |
Boolean |
クエリ結果がクエリ キャッシュからフェッチされたか |
| getNumDmlAffectedRows |
Long |
DMLステートメントの影響を受ける行の数 |
| getSessionInfo |
SessionInfo |
セッションの情報 |
| getDmlStats |
DmlStats |
DMLステートメントの詳細な統計 |
JobReference
| メソッド |
戻り値 |
説明 |
| getProjectId |
String |
プロジェクトID |
| getJobId |
String |
ジョブID |
| getLocation |
String |
ロケーション |
TableRow
| メソッド |
戻り値 |
説明 |
| get("フィールド名") |
Object |
引数で指定したフィールド名の値 |
ErrorProto
| メソッド |
戻り値 |
説明 |
| getReason |
String |
エラーコード |
| getLocation |
String |
エラーが発生した場所 |
| getDebugInfo |
String |
デバッグ情報 |
| getMessage |
String |
エラーの説明 |
SessionInfo
| メソッド |
戻り値 |
説明 |
| getSessionId |
String |
セッションID |
DmlStats
| メソッド |
戻り値 |
説明 |
| getInsertedRowCount |
Long |
挿入された行の数 |
| getDeletedRowCount |
Long |
削除された行の数 |
| getUpdatedRowCount |
Long |
更新された行の数 |
おしまい。。