本文介绍如何运行交互式(按需)查询作业和批量查询作业。
所需权限
作业是 BigQuery 代表您执行的操作,包括加载数据、导出数据、查询数据或复制数据。
当您使用 Cloud Console、经典版 BigQuery 网页界面或 CLI 加载、导出、查询或复制数据时,系统会自动创建、安排并运行作业资源。您还可以通过编程方式创建加载作业、导出作业、查询作业或复制作业。以编程方式创建作业后,BigQuery 会为您安排并运行此作业。
由于作业可能需要很长时间才能完成,它们会异步执行,其状态可以轮询。用时较短的操作(例如列出资源或获取元数据)不由作业资源管理。
如需运行查询作业,您必须至少拥有 bigquery.jobs.create 权限。为成功完成查询作业,您还必须具有对包含查询引用的表或视图的数据集的访问权限。如需了解数据集访问权限控制,请参阅控制对数据集的访问权限。
以下预定义的 Cloud IAM 角色包括 bigquery.jobs.create 权限:
bigquery.userbigquery.jobUserbigquery.admin
此外,如果用户具有 bigquery.datasets.create 权限,则当该用户创建数据集时,系统会为其授予该数据集的 bigquery.dataOwner 访问权限。借助 bigquery.dataOwner 访问权限,用户可以查询数据集内的表和视图。
如需详细了解 BigQuery 中的 Cloud IAM 角色,请参阅预定义的角色和权限。
运行交互式查询
默认情况下,BigQuery 运行交互式(按需)查询作业,也就是说,查询会尽快执行。交互式查询计入并发速率限制和每日限制。
查询结果始终保存到临时表或永久表中。您可以选择将结果附加到现有表、改写现有表中的数据,或者新建一个表(前提是不存在同名表)。
运行写入临时表的交互式查询的方法如下:
控制台
在 Cloud Console 中打开 BigQuery 网页界面。
转到 Cloud Console点击编写新查询。
在查询编辑器文本区域中输入有效的 BigQuery SQL 查询。
(可选)如需更改数据处理位置,请点击更多,然后点击查询设置。在处理位置下,点击自动选择并选择数据的位置。最后,点击保存以更新查询设置。
点击运行。
这会创建一个将输出写入临时表中的查询作业。
经典版界面
转到 BigQuery 网页界面。
转到 BigQuery 网页界面点击 Compose query。
在 New Query 文本区域中输入有效的 SQL 查询。
点击 Show Options。
(可选)在 Processing Location 部分中,点击 Unspecified 并选择数据的位置。
点击 Run query。
这会创建一个将输出写入到临时表中的查询作业。
CLI
输入 bq query 命令并添加查询文本。
(可选)提供 --location 标志并将其值设置为您的位置。
您可以指定以下可选标志。此列表包含一些最常用的标志。如需查看 query 命令标志的完整列表,请参阅 bq 命令行工具参考文档中的 bq query。
指定以下标志:
--destination_table标志,用于基于查询结果创建一个永久表。如需将查询结果写入不在默认项目的表中,请按以下格式将项目 ID 添加到数据集名称中:project_id:dataset。如果未指定--destination_table,系统会生成一个将输出写入临时(缓存)表的查询作业。--append_table标志,用于将查询结果附加到目标表。--destination_kms_key标志,指示使用密钥管理服务密钥加密目标表数据。--use_legacy_sql=false标志,指示使用标准 SQL 语法。您可以使用.bigqueryrc文件为命令行工具设置默认语法。--label标志,指示以键:值的形式向查询作业应用标签。重复使用此标志可以指定多个标签。--max_rows或-n标志,用于指定要在查询结果中返回的行数。--maximum_bytes_billed标志,用于限制查询的收费字节数。如果查询超出此限制,则查询会失败(不会产生费用)。如果未指定此标志,则收费字节数设置为项目默认值。--udf_resource标志,用于加载和评估要用作用户定义的函数资源的代码文件。您可以指定一个 Cloud Storage URI 或某个本地代码文件的路径。重复使用此标志可以指定多个文件。
输入以下命令,以使用标准 SQL 语法运行交互式查询:
bq --location=location query \ --use_legacy_sql=false \ 'query'
其中:
- location 是要处理查询的位置的名称。
--location标志是可选的。例如,如果您在东京区域使用 BigQuery,可将该标志的值设置为asia-northeast1。您可以使用 .bigqueryrc 文件设置位置的默认值。 - query 是使用标准 SQL 语法的查询。
示例:
输入以下命令以将查询结果写入 mydataset 中名为 mytable 的目标表。该数据集在默认项目中。该查询从美国名字数据公共数据集中检索数据。
bq query \
--destination_table mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
输入以下命令以将查询结果写入 mydataset 中名为 mytable 的目标表。该数据集属于 myotherproject,而非默认项目。该查询从非分区表(美国名字数据公共数据集)中检索数据。
bq query \
--destination_table myotherproject:mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
API
如需使用 API 运行查询,请插入新作业,并填写 jobs#configuration.query 属性。在任务资源的 jobReference 部分的 location 属性中指定您的位置。
通过调用 getQueryResults 提取结果,直到 jobComplete 等于 true。检查 errors 列表中是否存在错误和警告。
C#
尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 C# 设置说明进行操作。 如需了解详情,请参阅 BigQuery C# API 参考文档。
Go
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Go 设置说明进行操作。如需了解详情,请参阅 BigQuery Go API 参考文档。
Java
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
Node.js
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 BigQuery Node.js API 参考文档。
PHP
尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 PHP 设置说明进行操作。 如需了解详情,请参阅 BigQuery PHP API 参考文档。
Python
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
Ruby
尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Ruby 设置说明进行操作。 如需了解详情,请参阅 BigQuery Ruby API 参考文档。
运行批量查询
BigQuery 也可运行批量查询。BigQuery 会替您将每个批量查询排成队列,并在 BigQuery 共享资源池中有空闲资源可用时尽快开始查询,这通常需要几分钟的时间。如果 BigQuery 没有在 24 小时内启动查询,则会将作业优先级更改为交互式。
批量查询不会计入并发速率限制,因此您可以更轻松地同时启动多项查询。批量查询使用的资源与交互式(按需)查询相同。如果您使用固定费率价格,则批量查询和交互式查询将共用系统分配给您的槽。
运行批量查询的方法如下:
控制台
在 Cloud Console 中打开 BigQuery 网页界面。
转到 Cloud Console点击编写新查询按钮。
在查询编辑器文本区域中输入有效的 SQL 查询。
点击更多按钮,然后点击查询设置。
在作业优先级部分,选择批量选项。
(可选)在处理位置部分,点击未指定并选择数据的位置。
点击保存以更新查询设置。
点击运行。
经典版界面
转到 BigQuery 网页界面。
转到 BigQuery 网页界面点击 Compose query 按钮。
在 New Query 文本区域中输入有效的 BigQuery SQL 查询。
点击 Show Options 按钮。
在 Query Priority 部分中选择 Batch 选项。
(可选)在 Processing Location 部分中,点击 Unspecified 并选择数据的位置。
点击 Run query 按钮。
CLI
输入 bq query 命令并添加查询文本。指定 --
batch 标志以运行批量查询。
(可选)提供 --location 标志并将值设置为您的位置。
您可以指定以下可选标志。此列表包含一些最常用的标志。如需查看 query 命令标志的完整列表,请参阅 bq 命令行工具参考文档中的 bq query。
指定以下标志:
--destination_table标志,用于基于查询结果创建一个永久表。如需将查询结果写入不在默认项目的表中,请按以下格式将项目 ID 添加到数据集名称中:project_id:dataset。如果未指定--destination_table,系统会生成一个将输出写入临时(缓存)表的查询作业。--append_table标志,用于将查询结果附加到目标表。--destination_kms_key标志,指示使用密钥管理服务密钥加密目标表数据。--use_legacy_sql=false标志,指示使用标准 SQL 语法。您可以使用.bigqueryrc文件为命令行工具设置默认语法。--label标志,指示以键:值的形式向查询作业应用标签。重复使用此标志可以指定多个标签。--max_rows或-n标志,用于指定要在查询结果中返回的行数。--maximum_bytes_billed标志,用于限制查询的收费字节数。如果查询超出此限制,则查询会失败(不会产生费用)。如果未指定此标志,则收费字节数设置为项目默认值。--udf_resource标志,用于加载和评估要用作用户定义的函数资源的代码文件。您可以指定一个 Cloud Storage URI 或某个本地代码文件的路径。重复使用此标志可以指定多个文件。
输入以下命令,以使用标准 SQL 语法运行批量查询:
bq --location=location query \ --batch \ --use_legacy_sql=false \ 'query'
其中:
- location 是要处理查询的位置的名称。
--location标志是可选的。例如,如果您在东京区域使用 BigQuery,可将该标志的值设置为asia-northeast1。您可以使用 .bigqueryrc 文件设置位置的默认值。 - query 是使用标准 SQL 语法的查询。
示例:
输入以下命令可将批量查询结果写入 mydataset 中名为 mytable 的目标表。该数据集在默认项目中。该查询从美国名字数据公共数据集中检索数据。
bq query \
--batch \
--destination_table mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
输入以下命令可将批量查询结果写入 mydataset 中名为 mytable 的目标表。该数据集属于 myotherproject,而非默认项目。该查询从非分区表(美国名字数据公共数据集)中检索数据。
bq query \
--batch \
--destination_table myotherproject:mydataset.mytable \
--use_legacy_sql=false \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC'
API
如需使用 API 运行查询,请插入新作业,并填写 query 作业配置属性。(可选)在作业资源的 jobReference 部分的 location 属性中指定您的位置。
填写查询作业属性时,请添加 configuration.query.priority 属性并将其值设为 BATCH。
Go
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Go 设置说明进行操作。如需了解详情,请参阅 BigQuery Go API 参考文档。
Java
如需运行批量查询,请在创建 QueryJobConfiguration 时将查询优先级设置为 QueryJobConfiguration.Priority.BATCH。
Python
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。