プログラムでのジョブの実行
REST API ライブラリまたはクライアント ライブラリを使用してプログラムで BigQuery ジョブを実行するには、次のようにします。
jobs.insertメソッドを呼び出す- 定期的にジョブリソースをリクエストし、ステータス プロパティを調べて、ジョブの完了を確認する
- ジョブが正常に終了したかどうかを確認する
始める前に
このドキュメントの各タスクを実行するために必要な権限をユーザーに与える Identity and Access Management(IAM)のロールを付与します。
必要な権限
BigQuery ジョブを実行するには、bigquery.jobs.create IAM 権限が必要です。
次の IAM 事前定義ロールには、ジョブの実行に必要な権限が含まれています。
roles/bigquery.userroles/bigquery.jobUserroles/bigquery.admin
また、ジョブを作成すると、そのジョブに対する次の権限が自動的に付与されます。
bigquery.jobs.getbigquery.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 を使用すると、どのジョブタイプにもラベルを追加できます。
ジョブが保留中、実行中、完了済みの場合は、ラベルの追加や更新を行えません。
ジョブにラベルを追加すると、そのラベルが課金データとしてカウントされます。
詳細については、ジョブラベルの追加をご覧ください。