プログラムでのジョブの実行

REST API ライブラリまたはクライアント ライブラリを使用してプログラム手法で BigQuery ジョブを実行するには、次のようにします。

  1. クライアント コードによって生成された一意のジョブ ID を使用して jobs.insert メソッドを呼び出します
  2. 定期的にジョブリソースをリクエストし、ステータス プロパティを調べて、ジョブの完了を確認します
  3. ジョブが正常に終了したかどうかを確認します

必要な権限

BigQuery ジョブを実行するには、ジョブの送信に使用するユーザーまたはサービス アカウントに bigquery.jobs.create 権限を付与するか、またはアカウントに bigquery.jobs.create 権限が含まれているプロジェクト レベルの事前定義済み IAM 役割を付与します。事前定義された以下の IAM 役割には bigquery.jobs.create 権限が含まれています。

BigQuery での IAM 役割と権限の詳細については、アクセス制御をご覧ください。

実行中のジョブ

ジョブをプログラムで実行するには:

  1. jobs.insert メソッドを呼び出してジョブを開始します。jobs.insert メソッドを呼び出すときには、以下を含むジョブリソース表現を含めます。

    • jobReference セクションの location プロパティに、該当するロケーション。
    • クライアント コードによって生成されたジョブ ID。ジョブ ID を省略するとサーバーによって生成されますが、jobs.insert 呼び出しが確実に再試行されるように、クライアント側でジョブ ID を生成することがベスト プラクティスとなります。

      例:

      {
        "jobReference": {
          "projectId": "my_project",
          "jobId": "job_123",
          “location”: “asia-northeast1”
        },
        "configuration":
        {
          // ..
        },
      }
      

  2. ジョブリソースの configuration セクションに、ジョブタイプ(loadqueryextractcopy のいずれか)を指定する子プロパティを含めます。

  3. jobs.insert メソッドを呼び出した後に、ジョブ ID とロケーションを指定して jobs.get を呼び出し、status.state の値を調べてジョブ ステータスを確認します。status.stateDONE である場合は、ジョブが実行を停止したことを示します。ただし、ステータス DONE は、必ずしもジョブが正常に完了したことを示しているのではなく、ジョブが実行されなくなったことを示しているに過ぎません。

  4. ジョブのステータスを確認します。ジョブに status.errorResult プロパティが存在する場合、そのジョブは失敗しています。status.errorResult プロパティには、ジョブの失敗原因を示す情報が含まれています。status.errorResult が存在しない場合、そのジョブは正常に完了したものの、読み込みジョブの一部の行のインポートで問題があったなど、致命的でないエラーが発生した可能性があることを示します。致命的でないエラーは、ジョブの status.errors リストで返されます。

ジョブ ID の生成

ジョブ ID は、クライアント コードを使用して生成することをおすすめします。jobs.insert の呼び出し時に、そのジョブ ID を送信します。ジョブ ID を指定せずに jobs.insert を呼び出した場合、ジョブ ID は自動的に作成されますが、呼び出しが戻るまでそのジョブのステータスを確認できません。また、ジョブが正常に挿入されたかどうかの確認が難しくなる可能性があります。独自のジョブ ID を使用すると、ジョブのステータスをいつでも確認でき、再試行時に同じジョブ ID を使用してジョブが正確に 1 回だけ開始されるようにすることができます。

ジョブ ID はアルファベット(a~z、A~Z)、数字(0~9)、アンダースコア(_)、ダッシュ(-)で構成される文字列で、最大長は 1,024 文字です。ジョブ ID はプロジェクト内で一意である必要があります。

一意のジョブ ID を生成する一般的な方法は、タイムスタンプや GUID で構成された意味のある接頭辞または接尾辞を付ける方法です(例: daily_import_job_1447971251)。

GUID を生成する方法の例については、Python UUID モジュールをご覧ください。Python の uuid4() メソッドを jobs.insert と組み合わせて使用する例については、Cloud Storage からのデータの読み込みをご覧ください。

次のステップ

  • クエリジョブを開始してポーリングするコード例については、クエリを実行するをご覧ください。
  • ジョブリソース表現の作成の詳細については、API リファレンスのジョブ概要ページをご覧ください。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。