このドキュメントでは、インタラクティブ(オンデマンド)クエリ、およびバッチクエリのジョブを実行する方法について説明します。
必要な権限
クエリジョブを実行するには、少なくとも bigquery.jobs.create
権限が付与されている必要があります。クエリジョブを正常に完了させるには、クエリで参照するテーブルまたはビューに対するアクセス権も付与されている必要があります。テーブルまたはビューへのアクセス権を、次のレベルで付与できます。以下に、それぞれのレベルで許可されるリソースの範囲が大きい順にリストします。
- プロジェクト レベル、フォルダレベル、組織レベルなど、Google Cloud リソース階層の上位レベル
- データセット レベル
- テーブルレベル
次の事前定義済みの IAM ロールには bigquery.jobs.create
権限が含まれています。
bigquery.user
bigquery.jobUser
bigquery.admin
また、bigquery.datasets.create
権限を持つユーザーがデータセットを作成すると、そのデータセットに対する bigquery.dataOwner
アクセス権がユーザーに付与されます。bigquery.dataOwner
アクセス権により、データセット内のテーブルとビューに対するクエリが許可されます。
BigQuery での IAM のロールの詳細については、事前定義ロールと権限をご覧ください。
インタラクティブ クエリの実行
デフォルトでは、BigQuery によってインタラクティブ(オンデマンド)クエリジョブが実行されます。すなわち、クエリは可能な限り速やかに実行されます。インタラクティブ クエリは、同時実行レート制限と毎日の制限に対してカウントされます。
クエリの結果は、一時テーブルまたは永続テーブルのいずれかに保存されます。既存のテーブルにデータを追加するか上書きするか、あるいは同じ名前のテーブルが存在しない場合は新しいテーブルを作成するかどうかを選択できます。
一時テーブルに書き込むインタラクティブ クエリを実行するには:
コンソール
Cloud Console で [BigQuery] ページを開きます。
[BigQuery] ページに移動[クエリを新規作成] をクリックします。
クエリエディタのテキスト ボックスに、有効な BigQuery SQL クエリを入力します。
(省略可)データを処理するロケーションを変更するには、[展開]、[クエリの設定] の順にクリックします。[処理を行うロケーション] で [自動選択] をクリックし、データのロケーションを選択します。最後に [保存] をクリックしてクエリの設定を更新します。
[実行] をクリックします。
これにより、出力を一時テーブルに書き込むクエリジョブが作成されます。
bq
bq query
コマンドを入力し、クエリテキストを含めます。
(省略可)--location
フラグを指定して、その値をロケーションに設定します。
次のオプションのフラグを指定できます。このリストには、最も一般的なフラグのいくつかが含まれています。query
コマンドのフラグの一覧については、bq
コマンドライン ツール リファレンスで bq query
をご覧ください。
ご利用の内容に応じて:
--destination_table
フラグ。クエリ結果に基づいて永続テーブルを作成します。デフォルト プロジェクト以外のプロジェクトにあるテーブルにクエリ結果を書き込むには、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。--destination_table
を指定しない場合、出力を一時(キャッシュ)テーブルに書き込むクエリジョブが生成されます。--append_table
フラグ。クエリの結果を宛先テーブルに追加します。--destination_kms_key
フラグ。Cloud Key Management Service キーを使用して宛先テーブルデータを暗号化します。--use_legacy_sql=false
フラグ。標準 SQL 構文を使用します。.bigqueryrc
ファイルを使用して、bq
コマンドライン ツールのデフォルト構文を設定できます。--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 データの一般公開データセット)からデータを取得します。
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 はジョブの優先度をインタラクティブに変更します。
バッチクエリは同時実行レート制限に対してカウントされないので、簡単に多くのクエリを一度に開始できます。バッチクエリは、インタラクティブ(オンデマンド)クエリと同じリソースを使用します。定額料金を使用すると、割り当てられたスロットをバッチクエリとインタラクティブ クエリで分け合います。
バッチクエリを実行するには:
コンソール
Cloud Console で [BigQuery] ページを開きます。
[BigQuery] ページに移動[クエリを新規作成] ボタンをクリックします。
[クエリエディタ] のテキスト ボックスに有効な SQL クエリを入力します。
[展開] ボタンをクリックし、[クエリの設定] をクリックします。
[ジョブの優先度] セクションで [バッチ] オプションを選択します。
(省略可)[処理を行うロケーション] で [未設定] をクリックし、データのロケーションを選択します。
[保存] をクリックしてクエリの設定を更新します。
[実行] をクリックします。
bq
bq query
コマンドを入力し、クエリテキストを含めます。バッチクエリを実行するには、--
batch
フラグを指定します。
(省略可)--location
フラグを指定して、その値をロケーションに設定します。
次のオプションのフラグを指定できます。このリストには、最も一般的なフラグのいくつかが含まれています。query
コマンドのフラグの一覧については、bq
コマンドライン ツール リファレンスで bq query
をご覧ください。
ご利用の内容に応じて:
--destination_table
フラグ。クエリ結果に基づいて永続テーブルを作成します。デフォルト プロジェクト以外のプロジェクトにあるテーブルにクエリ結果を書き込むには、project_id:dataset の形式でプロジェクト ID をデータセット名に追加します。--destination_table
を指定しない場合、出力を一時(キャッシュ)テーブルに書き込むクエリジョブが生成されます。--append_table
フラグ。クエリの結果を宛先テーブルに追加します。--destination_kms_key
フラグ。Cloud Key Management Service キーを使用して宛先テーブルデータを暗号化します。--use_legacy_sql=false
フラグ。標準 SQL 構文を使用します。.bigqueryrc
ファイルを使用して、bq
コマンドライン ツールのデフォルト構文を設定できます。--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 にします。
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
Python
このサンプルを試す前に、BigQuery クイックスタート: クライアント ライブラリの使用の Python の手順に従って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。