インタラクティブ クエリとバッチクエリのジョブを実行する
このドキュメントでは、BigQuery で 2 種類のクエリジョブを実行する方法を説明します。
- インタラクティブ クエリジョブ。BigQuery がオンデマンドで実行するジョブです。
- バッチクエリ ジョブ。アイドル状態のコンピューティング リソースが使用可能になるまで BigQuery が待機するジョブです。
インタラクティブ クエリとバッチクエリ
デフォルトでは、BigQuery はできるだけすぐに実行されるインタラクティブ クエリジョブとしてクエリを実行します。予約で実行されるインタラクティブ クエリは同時実行の上限に対してカウントします。この上限に達すると、追加のクエリはエラーが発生して失敗します。
オンデマンド料金モデルを使用するクエリの実行の場合、BigQuery はリソースの可用性に基づいて同時実行クエリの上限を動的に計算します。この上限に達すると、追加のクエリがキュー内で待機します。詳細については、クエリキューをご覧ください。
バッチクエリ ジョブでは、BigQuery がクエリをキューに入れ、BigQuery 共有リソースプールでアイドル リソースが使用可能になるとクエリを開始します。通常、クエリは数分間のみキューに入れられます。
バッチクエリは同時実行の上限数にカウントされません。プロジェクトで最大 10 個のバッチクエリを同時に実行できます。バッチクエリは、インタラクティブ クエリと同じリソースを使用します。定額料金を使用すると、割り当てられたスロットをバッチクエリとインタラクティブ クエリで分け合います。
BigQuery は、クエリ結果を一時テーブル(デフォルト)または永続テーブルに保存します。結果の宛先テーブルとして永続テーブルを指定する場合は、既存のテーブルを追加または上書きするか、一意の名前で新しいテーブルを作成するかを選択できます。
必要なロール
クエリジョブを実行するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。
-
プロジェクトに対する BigQuery ジョブユーザー(
roles/bigquery.jobUser
)。 -
クエリが参照するすべてのテーブルとビューに対する BigQuery データ閲覧者(
roles/bigquery.dataViewer
)。ビューをクエリするには、基盤となるすべてのテーブルとビューに対してもこのロールが必要です。承認済みビューまたは承認済みデータセットを使用する場合、基礎となるソースデータにアクセスする必要はありません。
ロールの付与の詳細については、アクセスの管理をご覧ください。
これらの事前定義ロールには、クエリジョブの実行に必要な権限が含まれています。必要な権限を正確に確認するには、[必要な権限] セクションを開いてください。
必要な権限
クエリジョブを実行するには、次の権限が必要です。
-
プロジェクトの
bigquery.jobs.create
-
bigquery.tables.getData
クエリが参照するすべてのテーブルとビューに対する権限。ビューをクエリするには、基盤となるすべてのテーブルとビューに対してもこの権限が必要です。承認済みビューまたは承認済みデータセットを使用している場合、基礎となるソースデータにアクセスする必要はありません。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
BigQuery の権限の詳細については、IAM でのアクセス制御をご覧ください。
インタラクティブ クエリを実行する
インタラクティブ クエリを実行するには、次のいずれかのオプションを選択します。
Console
BigQuery ページに移動します。
クエリを新規作成(
)をクリックします。クエリエディタで、有効な GoogleSQL のクエリを入力します。
たとえば、BigQuery 一般公開データセット
usa_names
に対してクエリを実行し、1910 年から 2013 年の間に米国で最も多くつけられた名前を特定します。SELECT name, gender, SUM(number) AS total FROM `bigquery-public-data.usa_names.usa_1910_2013` GROUP BY name, gender ORDER BY total DESC LIMIT 10;
(省略可)クエリ結果の宛先テーブルとロケーションを指定します。
- クエリエディタで、 [その他] をクリックしてから、[クエリの設定] をクリックします。
- [送信先] セクションで、[クエリ結果の宛先テーブルを設定する] をオンにします。
- [Dataset] で、宛先テーブルの既存のデータセットの名前を入力します(例:
myProject.myDataset
)。 - [Table Id] に、宛先テーブルの名前を入力します(例:
myTable
)。 宛先テーブルが既存のテーブルの場合、[宛先テーブルの書き込み設定] で、クエリ結果をテーブルに追加または上書きするかどうかを選択します。
宛先テーブルが新しいテーブルの場合、BigQuery はクエリの実行時にテーブルを作成します。
[追加の設定] セクションで、[データのロケーション] メニューをクリックして、オプションを選択します。
この例では、
usa_names
データセットは米国のマルチリージョン ロケーションに保存されています。このクエリの宛先テーブルを指定する場合、宛先テーブルが含まれるデータセットも米国のマルチリージョン内に存在している必要があります。あるロケーションのデータセットに対するクエリを実行して、結果を別のロケーションにあるテーブルに書き込むことはできません。[保存] をクリックします。
[
実行] をクリックします。宛先テーブルを指定しなかった場合、クエリジョブは一時(キャッシュ)テーブルに出力を書き込みます。
bq
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
bq query
コマンドを使用します。次の例では、--use_legacy_sql=false
フラグにより GoogleSQL の構文を使用できます。bq query \ --use_legacy_sql=false \ 'QUERY'
QUERY は有効な GoogleSQL クエリに置き換えます。たとえば、BigQuery 一般公開データセット
usa_names
に対してクエリを実行し、1910 年から 2013 年の間に米国で最も多くつけられた名前を特定します。bq query \ --use_legacy_sql=false \ 'SELECT name, gender, SUM(number) AS total FROM `bigquery-public-data.usa_names.usa_1910_2013` GROUP BY name, gender ORDER BY total DESC LIMIT 10;'
クエリジョブは、一時(キャッシュ)テーブルに出力を書き込みます。
必要に応じて、クエリ結果の宛先テーブルとロケーションを指定できます。既存のテーブルに結果を書き込むには、適切なフラグを指定してテーブルを追加(
--append_table=true
)または上書き(--replace=true
)します。bq query \ --location=LOCATION \ --destination_table=TABLE \ --use_legacy_sql=false \ 'QUERY'
以下を置き換えます。
LOCATION: 宛先テーブルのリージョンまたはマルチリージョン(例:
US
)この例では、
usa_names
データセットは米国のマルチリージョン ロケーションに保存されています。このクエリの宛先テーブルを指定する場合、宛先テーブルが含まれるデータセットも米国のマルチリージョン内に存在している必要があります。あるロケーションのデータセットに対するクエリを実行して、結果を別のロケーションにあるテーブルに書き込むことはできません。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。
TABLE: 宛先テーブルの名前(例:
myDataset.myTable
)宛先テーブルが新しいテーブルの場合、BigQuery はクエリの実行時にテーブルを作成します。ただし、既存のデータセットを指定する必要があります。
テーブルが現在のプロジェクトにない場合は、
PROJECT_ID:DATASET.TABLE
の形式(たとえば、myProject:myDataset.myTable
)を使用して Google Cloud プロジェクト ID を追加します。--destination_table
を指定しない場合、出力を一時テーブルに書き込むクエリジョブが生成されます。
API
API を使用してクエリを実行するには、新しいジョブを挿入して query
ジョブ構成プロパティに値を設定します。省略可のジョブリソースの jobReference
セクションにある location
プロパティでロケーションを指定します。
getQueryResults
を呼び出して結果を取得します。jobComplete
が true
と等しくなるまで取得を続けます。エラーと警告は、errors
リストで確認してください。
C#
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの C# の手順に沿って設定を行ってください。詳細については、BigQuery C# API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Go の手順に沿って設定を行ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Java の手順に沿って設定を行ってください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
プロキシを使用してクエリを実行するには、プロキシの構成をご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Node.js の手順に沿って設定を行ってください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの PHP の手順に沿って設定を行ってください。詳細については、BigQuery PHP API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Python の手順に沿って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Ruby
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Ruby の手順に沿って設定を行ってください。詳細については、BigQuery Ruby API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
詳細については、インタラクティブ クエリとバッチクエリをご覧ください。
バッチクエリを実行する
バッチクエリを実行するには、次のいずれかのオプションを選択します。
Console
BigQuery ページに移動します。
クエリを新規作成(
)をクリックします。クエリエディタで、有効な GoogleSQL のクエリを入力します。
たとえば、BigQuery 一般公開データセット
usa_names
に対してクエリを実行し、1910 年から 2013 年の間に米国で最も多くつけられた名前を特定します。SELECT name, gender, SUM(number) AS total FROM `bigquery-public-data.usa_names.usa_1910_2013` GROUP BY name, gender ORDER BY total DESC LIMIT 10;
[その他] をクリックしてから、[クエリの設定] をクリックします。
[リソース管理] セクションで [バッチ] を選択します。
(省略可)クエリ結果の宛先テーブルとロケーションを指定します。
- [送信先] セクションで、[クエリ結果の宛先テーブルを設定する] をオンにします。
- [Dataset] で、宛先テーブルの既存のデータセットの名前を入力します(例:
myProject.myDataset
)。 - [Table Id] に、宛先テーブルの名前を入力します(例:
myTable
)。 宛先テーブルが既存のテーブルの場合、[宛先テーブルの書き込み設定] で、クエリ結果をテーブルに追加または上書きするかどうかを選択します。
宛先テーブルが新しいテーブルの場合、BigQuery はクエリの実行時にテーブルを作成します。
[追加の設定] セクションで、[データのロケーション] メニューをクリックして、オプションを選択します。
この例では、
usa_names
データセットは米国のマルチリージョン ロケーションに保存されています。このクエリの宛先テーブルを指定する場合、宛先テーブルが含まれるデータセットも米国のマルチリージョン内に存在している必要があります。あるロケーションのデータセットに対するクエリを実行して、結果を別のロケーションにあるテーブルに書き込むことはできません。
[保存] をクリックします。
[
実行] をクリックします。宛先テーブルを指定しなかった場合、クエリジョブは一時(キャッシュ)テーブルに出力を書き込みます。
bq
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
bq query
コマンドを使用して、--batch
フラグを指定します。次の例では、--use_legacy_sql=false
フラグにより GoogleSQL の構文を使用できます。bq query \ --batch \ --use_legacy_sql=false \ 'QUERY'
QUERY は有効な GoogleSQL クエリに置き換えます。たとえば、BigQuery 一般公開データセット
usa_names
に対してクエリを実行し、1910 年から 2013 年の間に米国で最も多くつけられた名前を特定します。bq query \ --batch \ --use_legacy_sql=false \ 'SELECT name, gender, SUM(number) AS total FROM `bigquery-public-data.usa_names.usa_1910_2013` GROUP BY name, gender ORDER BY total DESC LIMIT 10;'
クエリジョブは、一時(キャッシュ)テーブルに出力を書き込みます。
必要に応じて、クエリ結果の宛先テーブルとロケーションを指定できます。既存のテーブルに結果を書き込むには、適切なフラグを指定してテーブルを追加(
--append_table=true
)または上書き(--replace=true
)します。bq query \ --batch \ --location=LOCATION \ --destination_table=TABLE \ --use_legacy_sql=false \ 'QUERY'
以下を置き換えます。
LOCATION: 宛先テーブルのリージョンまたはマルチリージョン(例:
US
)この例では、
usa_names
データセットは米国のマルチリージョン ロケーションに保存されています。このクエリの宛先テーブルを指定する場合、宛先テーブルが含まれるデータセットも米国のマルチリージョン内に存在している必要があります。あるロケーションのデータセットに対するクエリを実行して、結果を別のロケーションにあるテーブルに書き込むことはできません。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。
TABLE: 宛先テーブルの名前(例:
myDataset.myTable
)宛先テーブルが新しいテーブルの場合、BigQuery はクエリの実行時にテーブルを作成します。ただし、既存のデータセットを指定する必要があります。
テーブルが現在のプロジェクトにない場合は、
PROJECT_ID:DATASET.TABLE
の形式(たとえば、myProject:myDataset.myTable
)を使用して Google Cloud プロジェクト ID を追加します。--destination_table
を指定しない場合、出力を一時テーブルに書き込むクエリジョブが生成されます。
API
API を使用してクエリを実行するには、新しいジョブを挿入して query
ジョブ構成プロパティに値を設定します。省略可のジョブリソースの jobReference
セクションにある location
プロパティでロケーションを指定します。
クエリジョブのプロパティにデータを入力するときには、configuration.query.priority
プロパティを含めて、その値を BATCH
に設定します。
getQueryResults
を呼び出して結果を取得します。jobComplete
が true
と等しくなるまで取得を続けます。エラーと警告は、errors
リストで確認してください。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Go の手順に沿って設定を行ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
バッチクエリを実行するには、QueryJobConfiguration の作成時に、クエリの優先度の設定を QueryJobConfiguration.Priority.BATCH にします。
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Java の手順に沿って設定を行ってください。 詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Node.js の手順に沿って設定を行ってください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Python の手順に沿って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery への認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
詳細については、インタラクティブ クエリとバッチクエリをご覧ください。
次のステップ
- クエリジョブを管理する方法を学習する。
- クエリ履歴を表示する方法を学習する。
- 保存したクエリの操作方法を学習する。