このドキュメントでは、インタラクティブ(オンデマンド)クエリ、およびバッチクエリのジョブを実行する方法について説明します。
必要な権限
ジョブとは、データの読み込み、データのエクスポート、データのクエリ、データのコピーなど、BigQuery がユーザーに代わって実行するアクションのことです。
Cloud Console、従来の BigQuery ウェブ UI、CLI を使用してデータの読み込み、エクスポート、クエリ、コピーを行う際に、ジョブリソースが自動的に作成され、スケジュールが設定されて実行されます。また、読み込み、エクスポート、クエリ、コピーのジョブをプログラムで作成することもできます。プログラムでジョブを作成すると、BigQuery によってジョブがスケジュールされ、実行されます。
ジョブの実行には長い時間がかかる場合があるため、ジョブは非同期で実行され、ステータスをポーリングできます。リソースの一覧表示やメタデータの取得など、短時間のアクションは、ジョブリソースでは管理されません。
クエリジョブを実行するには、少なくとも bigquery.jobs.create 権限が付与されている必要があります。クエリジョブを正常に完了させるには、クエリで参照するテーブルまたはビューが含まれるデータセットに対するアクセス権も付与されている必要があります。データセットに対するアクセス制御については、データセットへのアクセスの制御をご覧ください。
bigquery.jobs.create 権限は、事前定義された以下の Cloud IAM の役割に含まれています。
bigquery.userbigquery.jobUserbigquery.admin
また、bigquery.datasets.create 権限を持つユーザーがデータセットを作成すると、そのデータセットに対する bigquery.dataOwner アクセス権がユーザーに付与されます。bigquery.dataOwner アクセス権により、データセット内のテーブルとビューに対するクエリが許可されます。
BigQuery での Cloud IAM の役割については、事前定義された役割と権限をご覧ください。
インタラクティブ クエリの実行
デフォルトでは、BigQuery によってインタラクティブ(オンデマンド)クエリジョブが実行されます。すなわち、クエリは可能な限り速やかに実行されます。インタラクティブ クエリは、同時実行レート制限と毎日の制限に対してカウントされます。
クエリの結果は、一時テーブルまたは永続テーブルのいずれかに保存されます。既存のテーブルにデータを追加するか上書きするか、あるいは同じ名前のテーブルが存在しない場合は新しいテーブルを作成するかどうかを選択できます。
一時テーブルに書き込むインタラクティブ クエリを実行するには:
Console
Cloud Console で BigQuery ウェブ UI を開きます。
Cloud Console に移動[クエリを新規作成] をクリックします。
クエリエディタのテキスト領域に、有効な BigQuery SQL クエリを入力します。
(省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。
[実行] をクリックします。
これにより、出力を一時テーブルに書き込むクエリジョブが作成されます。
従来の UI
BigQuery ウェブ UI に移動します。
BigQuery ウェブ UI に移動[Compose query] をクリックします。
[New Query] テキスト領域に有効な SQL クエリを入力します。
[Show Options] をクリックします。
(省略可)[Processing Location] で [Unspecified] をクリックし、データのロケーションを選択します。
[RUN QUERY] をクリックします。
これにより、出力を一時テーブルに書き込むクエリジョブが作成されます。
CLI
bq query コマンドを入力し、クエリテキストを含めます。
(省略可)--location フラグを指定して、その値をロケーションに設定します。
次のオプションのフラグを指定できます。このリストには、最も一般的なフラグのいくつかが含まれています。query コマンドのフラグの一覧については、bq コマンドライン ツールのリファレンスで bq query をご覧ください。
次のフラグを指定できます。
--destination_tableフラグ。クエリ結果に基づいて永続テーブルを作成します。デフォルト プロジェクト以外のプロジェクトにあるテーブルにクエリ結果を書き込むには、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。--destination_tableを指定しない場合、出力を一時(キャッシュ)テーブルに書き込むクエリジョブが生成されます。--append_tableフラグ。クエリの結果を宛先テーブルに追加します。--destination_kms_keyフラグ。Key Management Service 鍵を使用して宛先テーブルデータを暗号化します。--use_legacy_sql=falseフラグ。標準 SQL 構文を使用します。.bigqueryrcファイルを使用して、コマンドライン ツールのデフォルト構文を設定できます。--labelフラグ。key:value の形式でクエリジョブにラベルを適用します。複数のラベルを指定するには、このフラグを繰り返します。--max_rowsまたは-nフラグ。クエリ結果で返される行数を指定します。--maximum_bytes_billedフラグ。クエリに対して課金されるバイト数を制限します。クエリがこのフラグで設定した上限を超える場合、そのクエリは失敗します(料金は発生しません)。指定しない場合、課金されるバイトはプロジェクトのデフォルトに設定されます。--udf_resourceフラグ。ユーザー定義の関数リソースとして使用するコードファイルを読み込み、評価します。Cloud Storage の URI またはローカル コードファイルのパスを指定できます。複数のファイルを指定するには、このフラグを繰り返します。
標準 SQL 構文を使用してインタラクティブ クエリを実行するには、次のコマンドを入力します。
bq --location=location query \ --use_legacy_sql=false \ 'query'
ここで
- location は、クエリが処理されるロケーションの名前です。
--locationフラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値をasia-northeast1に設定できます。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。 - query は、標準 SQL 構文のクエリです。
例:
次のコマンドを入力すると、mydataset 内の mytable という名前の宛先テーブルにインタラクティブなクエリの結果が書き込まれます。このデータセットはデフォルト プロジェクトにあります。このクエリは、一般公開データセット USA Name Data からデータを取得します。
bq query \
--destination_table mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
次のコマンドを入力すると、mydataset 内の mytable という名前の宛先テーブルにインタラクティブなクエリの結果が書き込まれます。このデータセットはデフォルト プロジェクトではなく myotherproject にあります。このクエリは、パーティション分割されていないテーブル(一般公開データセット USA Name Data)からデータを取得します。
bq query \
--destination_table myotherproject:mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
API
API を使用してクエリを実行するには、新しいジョブを挿入して、jobs#configuration.query プロパティに値を入力します。ジョブリソースの jobReference セクションにある location プロパティでロケーションを指定します。
getQueryResults を呼び出して結果を取得します。jobComplete が true と等しくなるまで取得を続けます。エラーと警告は、errors リストで確認してください。
C#
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の C# の設定手順に従ってください。詳細については、BigQuery C# API のリファレンス ドキュメントをご覧ください。
Go
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Go の設定手順に従ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
Java
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Java の設定手順に従ってください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Node.js の設定手順に従ってください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
PHP
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の PHP の設定手順に従ってください。詳細については、BigQuery PHP API のリファレンス ドキュメントをご覧ください。
Python
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Python の設定手順に従ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
Ruby
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Ruby の設定手順に従ってください。詳細については、BigQuery Ruby API のリファレンス ドキュメントをご覧ください。
バッチクエリの実行
BigQuery ではバッチクエリも提供されています。BigQuery はユーザーに代わって各バッチクエリをキューに格納し、アイドル状態のリソースが BigQuery 共有リソースプールで使用可能になり次第、クエリを開始します。このことは、通常、数分以内に発生します。24 時間以内にクエリが開始されなかった場合、BigQuery はジョブの優先度をインタラクティブに変更します。
バッチクエリは同時実行レート制限に対してカウントされないので、簡単に多くのクエリを一度に開始できます。バッチクエリは、インタラクティブ(オンデマンド)クエリと同じリソースを使用します。定額料金を使用すると、割り当てられたスロットをバッチクエリとインタラクティブ クエリで分け合います。
バッチクエリを実行するには:
Console
Cloud Console で BigQuery ウェブ UI を開きます。
Cloud Console に移動[クエリを新規作成] ボタンをクリックします。
[クエリエディタ] テキスト領域に有効な SQL クエリを入力します。
[展開] ボタンをクリックし、[クエリの設定] をクリックします。
[ジョブの優先度] セクションで [バッチ] オプションを選択します。
(省略可)[処理を行うロケーション] で [未設定] をクリックし、データのロケーションを選択します。
[保存] をクリックしてクエリの設定を更新します。
[実行] をクリックします。
従来の UI
BigQuery ウェブ UI に移動します。
BigQuery ウェブ UI に移動[Compose query] ボタンをクリックします。
有効な BigQuery SQL クエリを [New Query] テキスト領域に入力します。
[Show Options] ボタンをクリックします。
[Query Priority] セクションで、[Batch] オプションをオンにします。
(省略可)[Processing Location] で [Unspecified] をクリックし、データのロケーションを選択します。
[RUN QUERY] ボタンをクリックします。
CLI
bq query コマンドを入力し、クエリテキストを含めます。バッチクエリを実行するには、--
batch フラグを指定します。
(省略可)--location フラグを指定して、その値をロケーションに設定します。
次のオプションのフラグを指定できます。このリストには、最も一般的なフラグのいくつかが含まれています。query コマンドのフラグの一覧については、bq コマンドライン ツールのリファレンスで bq query をご覧ください。
次のフラグを指定できます。
--destination_tableフラグ。クエリ結果に基づいて永続テーブルを作成します。デフォルト プロジェクト以外のプロジェクトにあるテーブルにクエリ結果を書き込むには、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。--destination_tableを指定しない場合、出力を一時(キャッシュ)テーブルに書き込むクエリジョブが生成されます。--append_tableフラグ。クエリの結果を宛先テーブルに追加します。--destination_kms_keyフラグ。Key Management Service 鍵を使用して宛先テーブルデータを暗号化します。--use_legacy_sql=falseフラグ。標準 SQL 構文を使用します。.bigqueryrcファイルを使用して、コマンドライン ツールのデフォルト構文を設定できます。--labelフラグ。key:value の形式でクエリジョブにラベルを適用します。複数のラベルを指定するには、このフラグを繰り返します。--max_rowsまたは-nフラグ。クエリ結果で返される行数を指定します。--maximum_bytes_billedフラグ。クエリに対して課金されるバイト数を制限します。クエリがこのフラグで設定した上限を超える場合、そのクエリは失敗します(料金は発生しません)。指定しない場合、課金されるバイトはプロジェクトのデフォルトに設定されます。--udf_resourceフラグ。ユーザー定義の関数リソースとして使用するコードファイルを読み込み、評価します。Cloud Storage の URI またはローカル コードファイルのパスを指定できます。複数のファイルを指定するには、このフラグを繰り返します。
標準 SQL 構文を使用してバッチクエリを実行するには、次のコマンドを入力します。
bq --location=location query \ --batch \ --use_legacy_sql=false \ 'query'
ここで
- location は、クエリが処理されるロケーションの名前です。
--locationフラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値をasia-northeast1に設定できます。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。 - query は、標準 SQL 構文のクエリです。
例:
次のコマンドを入力すると、mydataset 内の mytable という名前の宛先テーブルにバッチクエリの結果が書き込まれます。このデータセットはデフォルト プロジェクトにあります。このクエリは、一般公開データセット USA Name Data からデータを取得します。
bq query \
--batch \
--destination_table mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
次のコマンドを入力すると、mydataset 内の mytable という名前の宛先テーブルにバッチクエリの結果が書き込まれます。このデータセットはデフォルト プロジェクトではなく myotherproject にあります。このクエリは、パーティション分割されていないテーブル(一般公開データセット USA Name Data)からデータを取得します。
bq query \
--batch \
--destination_table myotherproject:mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
API
API を使用してクエリを実行するには、新しいジョブを挿入して query ジョブ構成プロパティに値を設定します。(省略可)ジョブリソースの jobReference セクションにある location プロパティでロケーションを指定します。
クエリジョブのプロパティにデータを入力するには、configuration.query.priority プロパティを含め、値を BATCH に設定します。
Go
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Go の設定手順に従ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
Java
バッチクエリを実行するには、QueryJobConfiguration の作成時に、クエリの優先度の設定を QueryJobConfiguration.Priority.BATCH にします。
Python
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Python の設定手順に従ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。