以编程方式运行作业

要使用 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,服务器会为您生成一个,但最佳做法是在客户端生成作业 ID,以确保对 jobs.insert 调用的重试操作安全可靠。

      例如:

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

  2. 在作业资源的 configuration 部分中,添加一个用于指定作业类型(加载查询提取复制)的子属性。

  3. 调用 jobs.insert 方法之后,通过调用 jobs.get 并提供作业 ID 和位置来检查作业状态,另外还应检查 status.state 值以了解作业状态。如果 status.stateDONE,则表示作业已停止运行,但 DONE 状态并不代表作业已成功完成,只是表示作业不再运行。

  4. 检查作业是否成功。如果一项作业具有 status.errorResult 属性,则表示该作业失败。status.errorResult 属性中的信息说明了失败的作业中出现的问题。如果 status.errorResult 不存在,则表示作业已成功完成,但可能存在一些非严重错误,例如在加载作业中导入某几行时出错。非严重错误会在作业的 status.errors 列表中返回。

生成任务 ID

根据最佳做法,您应该使用客户端代码生成任务 ID,并在调用 jobs.insert 时发送该任务 ID。如果在未指定任务 ID 的情况下调用了 jobs.insert,BigQuery 会为您创建一个任务 ID,但在调用返回之前,您无法检查该作业的状态。同样,您可能很难判断该作业是否已成功插入。如果您使用自己的任务 ID,则可以随时检查作业状态,并且可以重试相同的任务 ID,以确保作业只启动一次。

任务 ID 是一个字符串,由字母(a-z、A-Z)、数字 (0-9)、下划线 (_) 或短划线 (-) 组成,最大长度是 1024 个字符。任务 ID 在项目中必须是独一无二的。

为了生成独一无二的任务 ID,一种常用方法就是使用人类可读的前缀和由时间戳或 GUID 构成的后缀。例如:daily_import_job_1447971251

您可以在 Python UUID 模块中找到生成 GUID 的一个方法的示例。如需查看将 Python uuid4() 方法与 jobs.insert 配合使用的示例,请参阅从 Cloud Storage 加载数据

后续步骤

  • 请参阅运行查询中展示如何启动和轮询查询作业的代码示例。
  • 如需详细了解如何创建作业资源表示法,请参阅 API 参考中的作业概览页
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面