管理招聘信息
本文档介绍了如何在 BigQuery 中管理作业,包括如何查看作业详细信息、列出作业、取消作业、重复作业和删除作业元数据。
BigQuery 作业简介
每当您加载、导出、查询或复制数据时,BigQuery 都会自动创建、安排和运行一个作业,以跟踪任务进度。
由于作业可能需要很长时间才能完成,它们会异步运行,其状态可以轮询。用时较短的操作(例如列出资源或获取元数据)不会作为作业进行管理。
作业提交时,作业可能处于下列其中一种状态:
PENDING
:作业已安排并且正在等待运行。RUNNING
:作业正在处理中。DONE
:作业已完成。如果作业完成并且没有出现错误,则 BigQuery 会将此状态报告为SUCCESS
。如果作业完成并且出现错误,则 BigQuery 会将此状态报告为FAILURE
。
配额
如需了解作业配额,请参阅配额和限制页面中作业类型对应文档:
价格
每个作业都与您指定的某个特定项目关联。根据作业产生的任何使用,我们都会向附加到相关项目的结算账号收取费用。如果您与他人共享某一项目的访问权限,则该项目中运行的任何作业也都会计入该结算账号。
例如,运行查询作业时,相关费用将计入运行作业的项目。因此,当您使用 <project_id>:<region>.<job_id>
格式查看一个查询作业的 ID 时,project_id
将是为该查询结算的项目的 ID。
要了解详情,请参阅价格。
准备工作
授予为用户提供执行本文档中的每个任务所需权限的 Identity and Access Management (IAM) 角色。
所需的角色
如需获得运行和管理作业所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
-
运行或重复作业、列出作业、查看作业详情以及取消作业:
BigQuery Job User (
roles/bigquery.jobUser
) 或 BigQuery User (roles/bigquery.user
) -
列出项目中的所有作业:
BigQuery Admin (
roles/bigquery.admin
) 或 BigQuery Resource Admin (roles/bigquery.resourceAdmin
) -
查看项目中所有作业的详细信息、取消项目中的任何作业以及删除作业元数据:
BigQuery Admin (
roles/bigquery.admin
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含运行和管理作业所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需运行和管理作业,您需要拥有以下权限:
-
运行或重复作业,并列出作业:
bigquery.jobs.create
-
查看作业的详细信息:
bigquery.jobs.get
-
取消作业:
bigquery.jobs.update
-
查看项目中所有作业的详细信息:
-
bigquery.jobs.get
-
bigquery.jobs.listAll
-
-
列出项目中的所有作业:
bigquery.jobs.listAll
-
取消项目中的任何作业:
-
bigquery.jobs.update
-
bigquery.jobs.listAll
-
-
删除作业元数据:
-
bigquery.jobs.delete
-
bigquery.jobs.listAll
-
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
查看作业详情
您可以使用 Google Cloud 控制台、bq 命令行工具、API 或客户端库查看作业详细信息。详细信息包括数据和元数据,例如作业类型、作业状态和创建作业的用户。
如需查看作业详情,请按以下步骤操作:
控制台
转到 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 会为项目的所有作业(在所有位置)保存六个月的历史记录。此作业记录包含状态为 RUNNING
和 DONE
(通过报告状态为 SUCCESS
或 FAILURE
来表示)的作业。
如需列出项目中的作业,请按以下步骤操作:
控制台
转到 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
作业。通常,只需不到一分钟即可完成作业取消操作。
即使作业可以取消,也不保证操作一定成功。作业可能在提交取消请求之前就已完成,或者作业可能处于无法取消的阶段。
如需取消作业,请按以下步骤操作:
控制台
转到 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 个月内执行的作业的历史记录。您可以使用此方法移除查询语句中可能存在的敏感信息。作业元数据只能在作业完成后删除。如果作业创建了子作业,则子作业也会被删除。不允许删除子作业。只能删除父级或顶级作业。
如需删除作业元数据,请按以下步骤操作:
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 页面。
展开作业历史记录窗格。
如需列出所有作业,请点击个人历史记录。如需列出项目中的所有作业,请点击项目历史记录。
点击一个查询作业以打开该作业的详细信息。
如需重复执行某个查询,请点击作为新查询打开。
点击运行。
如需重复加载作业,请执行以下操作:
转到 BigQuery 页面。
展开作业历史记录窗格。
如需列出所有作业,请点击个人历史记录。如需列出项目中的所有作业,请点击项目历史记录。
点击一个加载作业以打开该作业的详细信息。
如需重复运行某个作业,请点击重复加载作业。
bq
再次发出命令,BigQuery 会自动生成使用新作业 ID 的作业。
API
重复运行作业的操作无法通过单次调用方法完成;如果您想重复运行某个特定作业,请执行以下操作:
调用
jobs.get
以检索重复运行该作业所需的资源。移除 id、status 和 statistics 字段。 将 jobId 字段更改为客户端代码生成的新值。根据需要对其他任何字段进行更改。
使用修改后的资源和新作业 ID 调用
jobs.insert
以启动新作业。
后续步骤
- 了解如何通过编程方式运行作业。