管理作业
提交 BigQuery 作业后,您可以查看作业详细信息、列出作业、取消作业、重复作业或删除作业元数据。
作业提交时,作业可能处于下列其中一种状态:
PENDING
:作业已安排并且正在等待运行。RUNNING
:作业正在处理中。DONE
:作业已完成。如果作业完成并且没有出现错误,则 BigQuery 会将此状态报告为SUCCESS
。如果作业完成并且出现错误,则 BigQuery 会将此状态报告为FAILURE
。
准备工作
授予为用户提供执行本文档中的每个任务所需权限的 Identity and Access Management (IAM) 角色。 执行任务所需的权限(如果有)列出在任务的“所需权限”部分中。
查看作业详情
您可以使用 Google Cloud 控制台、bq 命令行工具、API 或客户端库查看作业详细信息。详细信息包括数据和元数据,例如作业类型、作业状态和创建作业的用户。
所需权限
如需查看作业详细信息,您需要拥有 bigquery.jobs.get
IAM 权限。
系统会自动针对您创建的作业为您授予此权限。
以下每个预定义 IAM 角色都包含查看作业详细信息所需的权限:
roles/bigquery.admin
(可让您查看项目中所有作业的详细信息)roles/bigquery.user
(可让您查看您的作业的详细信息)roles/bigquery.jobUser
(可让您查看您的作业的详细信息)
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
查看作业详情
如需查看作业详细信息,请执行以下操作:
控制台
转到 BigQuery 页面。
选择要查看的作业历史记录类型:
- 如需显示近期作业的信息,请点击个人历史记录。
- 如需显示项目中近期作业的信息,请点击项目历史记录。
如需查看作业详细信息,请点击作业。
bq
发出带有 --job=true
标志和作业 ID 的 bq show
命令。
提供作业 ID 时,您可以使用完全限定的 ID 或者简写形式。例如,Google Cloud 控制台中列出的作业 ID 为完全限定格式,即其中包含项目和位置:
my-project-1234:US.bquijob_123x456_123y123z123c
命令行工具中列出的作业 ID 使用简写形式,其中不包含项目 ID 和位置:
bquijob_123x456_123y123z123c
要指定作业位置,请提供 --location
标志并将其值设置为您选择的位置。如果您使用完全限定的作业 ID,则此标志为可选标志。如果在添加 --location
标志的同时使用完全限定的作业 ID,则系统将忽略 --location
标志。
以下命令用于请求有关作业的信息:
bq --location=LOCATION show --job=true JOB_ID
替换以下内容:
LOCATION
:运行作业的位置的名称。例如,如果您在东京地区使用 BigQuery,请将该标志的值设置为asia-northeast1
。您可以使用.bigqueryrc
文件设置位置的默认值。 如果该位置未指定为作业 ID 的一部分或使用--location
标志,则使用默认位置。JOB_ID
:作业的 ID
示例
以下命令用于获取有关 myproject
中运行的作业 US.bquijob_123x456_123y123z123c
的摘要信息:
bq show --job=true myproject:US.bquijob_123x456_123y123z123c
输出类似于以下内容:
Job Type State Start Time Duration User Email Bytes Processed Bytes Billed Billing Tier Labels ---------- --------- ----------------- ---------- ------------------- ----------------- -------------- -------------- -------- extract SUCCESS 06 Jul 11:32:10 0:01:41 user@example.com
要查看完整的作业详细信息,请输入以下命令:
bq show --format=prettyjson --job=true myproject:US.bquijob_123x456_789y123z456c
输出类似于以下内容:
{ "configuration": { "extract": { "compression": "NONE", "destinationUri": "[URI removed]", "destinationUris": [ "[URI removed]" ], "sourceTable": { "datasetId": "github_repos", "projectId": "bigquery-public-data", "tableId": "commits" } } }, "etag": "\"[etag removed]\"", "id": "myproject:bquijob_123x456_789y123z456c", "jobReference": { "jobId": "bquijob_123x456_789y123z456c", "projectId": "[Project ID removed]" }, "kind": "bigquery#job", "selfLink": "https://bigquery.googleapis.com/bigquery/v2/projects/federated-testing/jobs/bquijob_123x456_789y123z456c", "statistics": { "creationTime": "1499365894527", "endTime": "1499365894702", "startTime": "1499365894702" }, "status": { "errorResult": { "debugInfo": "[Information removed for readability]", "message": "Operation cannot be performed on a nested schema. Field: author", "reason": "invalid" }, "errors": [ { "message": "Operation cannot be performed on a nested schema. Field: author", "reason": "invalid" } ], "state": "DONE" }, "user_email": "user@example.com" }
API
调用 jobs.get 并提供 jobId
和 projectId
参数。(可选)提供 location
参数并将值设置为运行作业的位置。如果使用的是包含位置的完全限定作业 ID(例如 my-project-1234:US.bquijob_123x456_123y123z123c
),则此参数为可选项。
Go
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Go 设置说明进行操作。如需了解详情,请参阅 BigQuery Go API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Node.js
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。如需了解详情,请参阅 BigQuery Node.js API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
如果您需要更多信息来排查作业问题,请参阅 INFORMATION_SCHEMA.JOBS*
视图和日志。
列出项目中的作业
BigQuery 会为项目的所有作业保存六个月的历史记录。
您可以通过以下方式查看作业历史记录:
- 使用 Google Cloud 控制台。
- 使用
bq ls
命令。 - 调用
jobs.list
API 方法。 - 使用客户端库。
此作业记录包含状态为 RUNNING
和 DONE
(通过报告状态为 SUCCESS
或 FAILURE
来表示)的作业。
所需权限
如需列出您在项目中创建的所有作业,您需要拥有 bigquery.jobs.create
IAM 权限。如需列出所有用户在项目中创建的所有作业,您需要拥有 bigquery.jobs.list
IAM 权限。您只能查看自己创建的作业的完整详细信息。其他用户创建的作业的详细信息会被隐去。
以下每个预定义 IAM 角色都包含列出作业所需的权限:
roles/bigquery.admin
(可让您列出项目中的所有作业)roles/bigquery.user
(可让您列出项目中的所有作业)roles/bigquery.jobUser
(可让您列出您的作业)
如需列出项目中的所有作业(包括其详细信息),您需要拥有 bigquery.jobs.listAll
IAM 权限。
以下每个预定义 IAM 角色都包含列出所有作业(包括其详细信息)所需的权限:
roles/bigquery.admin
roles/bigquery.resourceAdmin
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
列出作业
BigQuery 会列出所有位置的作业。
如需列出项目中的作业,请执行以下操作:
控制台
转到 BigQuery 页面。
如需列出项目中的所有作业,请点击项目历史记录。如果您不是项目所有者,则可能无权查看项目的所有作业。最新作业列在前面。
如需列出您的作业,请点击个人历史记录。
bq
发出带有以下标志之一的 bq ls
命令:
--jobs=true
或-j
:将作业标识为要列出的资源类型。--all=true
或-a
:列出来自所有用户的作业。要查看所有作业的全部(未遮盖)详细信息,您必须具有bigquery.jobs.listAll
权限。--min_creation_time
:列出在提供的时间戳值之后提交的作业。此值以 Unix 纪元时间戳表示(以毫秒为单位)。--max_creation_time
:列出在提供的时间戳值之前提交的作业。此值以 Unix 纪元时间戳表示(以毫秒为单位)。--max_results
或-n
用于限制结果。默认值为 50 个结果。
bq ls --jobs=true --all=true \ --min_creation_time=MIN_TIME \ --max_creation_time=MAX_TIME \ --max_results=MAX_RESULTS \ PROJECT_ID
请替换以下内容:
MIN_TIME
:一个整数,表示 Unix 纪元时间戳(以毫秒为单位)。MAX_TIME
:一个整数,表示 Unix 纪元时间戳(以毫秒为单位)。MAX_RESULTS
:一个整数,表示返回的作业数。PROJECT_ID
:您要列出的作业所在项目的 ID。如果您设置了默认项目,则无需提供PROJECT_ID
参数。
示例
以下命令用于列出当前用户的所有作业。运行此命令需要 bigquery.jobs.list
权限。
bq ls --jobs=true myproject
以下命令用于列出所有用户的所有作业。运行此命令需要 bigquery.jobs.listAll
权限。
bq ls --jobs=true --all=true myproject
以下命令用于列出 myproject
中最新的 10 个作业:
bq ls --jobs=true --all=true --max_results=10 myproject
以下命令列出了在 2032 年 3 月 3 日凌晨 4:04:00 之前提交的所有作业。此时间戳(以毫秒为单位)等效于以下整数值:1961899440000
。
bq ls --jobs=true --max_creation_time=1961899440000
API
调用 jobs.list 并提供 projectId
参数。要列出所有用户的作业,请将 allUsers
参数设置为 true
。将 allUsers
设置为 true
需要 bigquery.jobs.listAll
权限。
Go
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Go 设置说明进行操作。如需了解详情,请参阅 BigQuery Go API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Node.js
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。如需了解详情,请参阅 BigQuery Node.js API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
取消作业
您可以通过以下方式取消 RUNNING
或 PENDING
作业:
- 使用 Google Cloud 控制台。
- 使用
bq cancel
命令。 - 在 SQL 查询中使用
BQ.JOBS.CANCEL
系统过程。 - 通过调用
jobs.cancel
API 方法。 - 使用客户端库。
并非所有类型的作业都可以取消。如果作业无法取消,将返回一个错误。
即使作业可以取消,也不保证操作一定成功。作业可能在提交取消请求之前就已完成,或者作业可能处于无法取消的阶段。
所需权限
如需取消作业,您需要拥有 bigquery.jobs.update
IAM 权限。
系统会自动针对您创建的作业为您授予此权限。
以下每个预定义 IAM 角色都包含取消作业所需的权限:
roles/bigquery.admin
(可让您取消项目中的任何作业)roles/bigquery.user
(可让您取消您的作业)roles/bigquery.jobUser
(可让您取消您的作业)
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
取消作业
通常,只需不到一分钟即可完成作业取消操作。
如需取消作业,请执行以下操作:
控制台
转到 BigQuery 页面。
点击编写新查询并输入查询。
如需运行查询,请点击运行。
如需取消作业,请点击取消。
SQL
使用 BQ.JOBS.CANCEL
系统过程:
CALL BQ.JOBS.CANCEL('JOB_ID');
将 JOB_ID 替换为您要取消的作业的 ID。
如果您属于其他项目,但位于要取消的作业所在的地区,则还必须添加项目 ID:
CALL BQ.JOBS.CANCEL('PROJECT_ID.JOB_ID');
替换以下内容:
PROJECT_ID
:要取消的作业所属项目的 IDJOB_ID
:要取消作业的 ID
该过程会立即返回结果,并且 BigQuery 会在随后的较短时间内取消作业。如果作业已成功或失败,则该过程不会产生任何作用。
bq
发出带有 JOB_ID
参数的 bq cancel
命令。您可以使用 --nosync=true
标志请求取消后立即返回。默认情况下,系统将等待取消请求完成。
提供 JOB_ID
参数时,您可以使用完全限定的 ID 或者简写形式。例如,Google Cloud 控制台中列出的作业 ID 为完全限定格式,即其中包含项目和位置:
my-project-1234:US.bquijob_123x456_123y123z123c
bq 命令行工具中列出的作业 ID 使用简写形式,其中不包含项目 ID 和位置:
bquijob_123x456_123y123z123c
要指定作业位置,请提供 --location
标志并将其值设置为您选择的位置。如果您使用完全限定的作业 ID,则此标志为可选标志。如果在添加 --location
标志的同时使用完全限定的作业 ID,则系统将忽略 --location
标志。
以下命令用于请求取消作业并等待操作完成。如果已提供完全限定的作业 ID,则系统将忽略 --location
标志:
bq --location=LOCATION cancel JOB_ID
以下命令用于请求取消作业后立即返回。如果已提供完全限定的作业 ID,则系统将忽略 --location
标志:
bq --location=LOCATION --nosync cancel JOB_ID
替换以下内容:
LOCATION
(可选):作业运行的位置的名称。例如,如果您在东京地区使用 BigQuery,请将该标志的值设置为asia-northeast1
。您可以使用.bigqueryrc
文件设置位置的默认值。JOB_ID
:要取消作业的 ID。如果您从 Google Cloud 控制台复制作业 ID,则作业 ID 中将包含项目 ID 和位置。例如my-project-1234:US.bquijob_123x456_123y123z123c
。
示例
以下命令用于取消 my-project-1234
项目中 US
多区域位置运行的作业 my-project-1234:US.bquijob_123x456_123y123z123c
并等待操作完成。由于使用的是完全限定的作业 ID,无需提供 location 标志。
bq cancel my-project-1234:US.bquijob_123x456_123y123z123c
以下命令用于取消 my-project-1234
项目中在 US
多区域位置运行的作业 bquijob_123x456_123y123z123c
并等待操作完成。由于使用的是简写形式的作业 ID,需要提供 --location
标志。
bq --location=US cancel bquijob_123x456_123y123z123c
以下命令用于取消 my-project-1234
项目中 US
多区域位置运行的作业 bquijob_123x456_123y123z123c
并立即返回结果。由于使用的是完全限定的作业 ID,无需提供 --location
标志。
bq --nosync cancel my-project-1234:US.bquijob_123x456_123y123z123c
API
调用 jobs.cancel 并提供 jobId
和 projectId
参数。提供 location
参数并将值设置为运行作业的位置。
Go
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Go 设置说明进行操作。如需了解详情,请参阅 BigQuery Go API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Node.js
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。如需了解详情,请参阅 BigQuery Node.js API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
删除作业元数据
您可以使用 bq 命令行工具和 Python 客户端库删除特定作业的元数据。BigQuery 会保留过去 6 个月内执行的作业的历史记录。您可以使用此方法移除查询语句中可能存在的敏感信息。作业元数据只能在作业完成后删除。如果作业创建了子作业,则子作业也会被删除。不允许删除子作业。只能删除父级或顶级作业。
所需权限
如需删除作业元数据,您需要拥有 bigquery.jobs.delete
IAM 权限。
预定义 IAM 角色 roles/bigquery.admin
包含删除作业元数据所需的权限。
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
删除作业元数据
bq
发出带有 -j
标志和作业 ID 的 bq rm
命令。
提供作业 ID 时,您可以使用完全限定的 ID 或者简写形式。例如,Google Cloud 控制台中列出的作业 ID 为完全限定格式,即其中包含项目和位置:
my-project-1234:US.bquijob_123x456_123y123z123c
bq 命令行工具中列出的作业 ID 使用简写形式,其中不包含项目 ID 和位置:
bquijob_123x456_123y123z123c
要指定作业位置,请提供 --location
标志并将其值设置为您选择的位置。如果您使用完全限定的作业 ID,则此标志为可选标志。如果在添加 --location
标志的同时使用完全限定的作业 ID,则系统将忽略 --location
标志。
以下命令可删除作业:
bq --location=location \ --project_id=project_id \ rm -j job_id
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
重复作业
不能使用相同的作业 ID 重复作业。只能使用相同的配置新建一个作业。在 Google Cloud 控制台或 bq 命令行工具中提交新作业时,系统会分配新的作业 ID。如果您使用 API 或客户端库提交作业,则您必须生成新的作业 ID。
所需权限
如需运行作业,您需要拥有 bigquery.jobs.create
IAM 权限。
以下每个预定义 IAM 角色都包含运行作业所需的权限:
roles/bigquery.admin
roles/bigquery.user
roles/bigquery.jobUser
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
重复作业
如需重复某个作业,请执行以下操作:
控制台
如需重复查询作业,请执行以下操作:
转到 BigQuery 页面。
如需列出所有作业,请点击个人历史记录。如需列出项目中的所有作业,请点击项目历史记录。
点击一个查询作业以打开该作业的详细信息。
如需重复执行某个查询,请点击作为新查询打开。
点击运行。
如需重复加载作业,请执行以下操作:
转到 BigQuery 页面。
如需列出所有作业,请点击个人历史记录。如需列出项目中的所有作业,请点击项目历史记录。
点击一个加载作业以打开该作业的详细信息。
如需重复运行某个作业,请点击重复加载作业。
bq
再次发出命令,BigQuery 会自动生成使用新作业 ID 的作业。
API
重复运行作业的操作无法通过单次调用方法完成;如果您想重复运行某个特定作业,请执行以下操作:
调用
jobs.get
以检索重复运行该作业所需的资源。移除 id、status 和 statistics 字段。 将 jobId 字段更改为客户端代码生成的新值。根据需要对其他任何字段进行更改。
使用修改后的资源和新作业 ID 调用
jobs.insert
以启动新作业。