本文介绍如何运行交互式(按需)查询作业和批量查询作业。
所需权限
如需运行查询作业,您必须至少拥有 bigquery.jobs.create
权限。为成功完成查询作业,您还必须具有对查询引用的表或视图的访问权限。您可以在以下级层授予对表或视图的访问权限,这些列表按允许的资源范围(从大到小)排序:
- Google Cloud 资源层次结构中的高级层,例如项目、文件夹或组织级层
- 在数据集级层
- 在表级层
以下预定义的 IAM 角色包含 bigquery.jobs.create
权限:
bigquery.user
bigquery.jobUser
bigquery.admin
此外,如果用户具有 bigquery.datasets.create
权限,则当该用户创建数据集时,系统会为其授予该数据集的 bigquery.dataOwner
访问权限。借助 bigquery.dataOwner
访问权限,用户可以查询数据集内的表和视图。
如需详细了解 BigQuery 中的 IAM 角色,请参阅预定义的角色和权限。
运行交互式查询
默认情况下,BigQuery 运行交互式(按需)查询作业,也就是说,查询会尽快执行。交互式查询计入并发速率限制和每日限制。
查询结果始终保存到临时表或永久表中。您可以选择将结果附加到现有表、改写现有表中的数据,或者新建一个表(前提是不存在同名表)。
运行写入临时表的交互式查询的方法如下:
控制台
在 Cloud Console 中打开 BigQuery 页面。
转到 BigQuery 页面点击编写新查询。
在查询编辑器文本区域中输入有效的 BigQuery SQL 查询。
(可选)如需更改数据处理位置,请点击更多,然后点击查询设置。在处理位置下,点击自动选择并选择数据的位置。最后,点击保存以更新查询设置。
点击运行。
这会创建一个将输出写入临时表中的查询作业。
bq
输入 bq query
命令并添加查询文本。
(可选)提供 --location
标志并将其值设置为您的位置。
您可以指定以下可选标志。此列表包含一些最常用的标志。如需查看 query
命令标志的完整列表,请参阅 bq
命令行工具参考文档中的 bq query
。
指定以下标志:
--destination_table
标志,用于基于查询结果创建一个永久表。如需将查询结果写入非默认项目中的某个表,请按以下格式将相应项目 ID 添加到数据集名称中:project_id:dataset。如果未指定--destination_table
,系统会生成一个将输出写入临时(缓存)表的查询作业。--append_table
标志,用于将查询结果附加到目标表。--destination_kms_key
标志,指示使用 Cloud Key Management Service 密钥加密目标表数据。--use_legacy_sql=false
标志,指示使用标准 SQL 语法。您可以使用.bigqueryrc
文件为bq
命令行工具设置默认语法。--label
标志,指示以 key:value 的形式向查询作业应用标签。重复使用此标志可以指定多个标签。--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 页面。
转到 BigQuery 页面点击编写新查询按钮。
在查询编辑器文本区域中输入有效的 SQL 查询。
点击更多按钮,然后点击查询设置。
在作业优先级部分,选择批量选项。
(可选)在处理位置部分,点击未指定并选择数据的位置。
点击保存以更新查询设置。
点击运行。
bq
输入 bq query
命令并添加查询文本。指定 --
batch
标志以运行批量查询。
(可选)提供 --location
标志并将值设置为您所用的位置。
您可以指定以下可选标志。此列表包含一些最常用的标志。如需查看 query
命令标志的完整列表,请参阅 bq
命令行工具参考文档中的 bq query
。
指定以下标志:
--destination_table
标志,用于基于查询结果创建一个永久表。如需将查询结果写入非默认项目中的某个表,请按以下格式将相应项目 ID 添加到数据集名称中:project_id:dataset。如果未指定--destination_table
,系统会生成一个将输出写入临时(缓存)表的查询作业。--append_table
标志,用于将查询结果附加到目标表。--destination_kms_key
标志,指示使用 Cloud Key Management Service 密钥加密目标表数据。--use_legacy_sql=false
标志,指示使用标准 SQL 语法。您可以使用.bigqueryrc
文件为bq
命令行工具设置默认语法。--label
标志,指示以 key:value 的形式向查询作业应用标签。重复使用此标志可以指定多个标签。--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。
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
Node.js
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Node.js 设置说明进行操作。如需了解详情,请参阅 BigQuery Node.js API 参考文档。
Python
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。