プログラムでのジョブの実行
REST API ライブラリまたはクライアント ライブラリを使用してプログラムで BigQuery ジョブを実行するには、次のようにします。
jobs.insert
メソッドを呼び出す- 定期的にジョブリソースをリクエストし、ステータス プロパティを調べて、ジョブの完了を確認する
- ジョブが正常に終了したかどうかを確認する
始める前に
このドキュメントの各タスクを実行するために必要な権限をユーザーに与える Identity and Access Management(IAM)のロールを付与します。
必要な権限
BigQuery ジョブを実行するには、bigquery.jobs.create
IAM 権限が必要です。
次の IAM 事前定義ロールには、ジョブの実行に必要な権限が含まれています。
roles/bigquery.user
roles/bigquery.jobUser
roles/bigquery.admin
また、ジョブを作成すると、そのジョブに対する次の権限が自動的に付与されます。
bigquery.jobs.get
bigquery.jobs.update
BigQuery での IAM のロールと権限については、事前定義ロールと権限をご覧ください。
実行中のジョブ
ジョブをプログラムで実行するには:
jobs.insert
メソッドを呼び出してジョブを開始します。jobs.insert
メソッドを呼び出す際に、ジョブリソース表現を含めます。ジョブリソースの
configuration
セクションに、ジョブタイプ(load
、query
、extract
、copy
のいずれか)を指定する子プロパティを含めます。jobs.insert
メソッドを呼び出した後に、ジョブ ID とロケーションを指定してjobs.get
を呼び出し、status.state
の値を調べてジョブ ステータスを確認します。status.state
がDONE
である場合は、ジョブが実行を停止したことを示します。ただし、ステータスDONE
は、必ずしもジョブが正常に完了したことを示しているのではなく、ジョブが実行されなくなったことを示しているにすぎません。ジョブのステータスを確認します。ジョブに
errorResult
プロパティが存在する場合、そのジョブは失敗しています。status.errorResult
プロパティには、ジョブの失敗原因を示す情報が含まれています。status.errorResult
が存在しない場合、そのジョブは正常に完了したものの、読み込みジョブの一部の行のインポートで問題があったなど、致命的でないエラーが発生した可能性があることを示します。非致命的なエラーは、ジョブのstatus.errors
リストで返されます。
クライアント ライブラリを使用したジョブの実行
BigQuery 用の Cloud クライアント ライブラリを使用してジョブを作成し、実行するには:
C#
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある C# の設定手順を完了してください。詳細については、BigQuery C# API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
ジョブラベルの追加
bq コマンドライン ツールを使用してクエリジョブにラベルを追加するには、--label
フラグを使用します。bq ツールは、クエリジョブにのみラベルの追加をサポートしています。
jobs.insert
メソッドを呼び出すときにジョブ構成で labels
プロパティを指定することで、API でジョブを送信する際にジョブにラベルを追加することもできます。API を使用すると、どのジョブタイプにもラベルを追加できます。
ジョブが保留中、実行中、完了済みの場合は、ラベルの追加や更新を行えません。
ジョブにラベルを追加すると、そのラベルが課金データとしてカウントされます。
詳細については、ジョブラベルの追加をご覧ください。