本文档介绍了如何在 BigQuery 中创建视图。
您可以通过以下方式在 BigQuery 中创建视图:
- 使用 Cloud Console。
- 使用
bq
命令行工具的bq mk
命令。 - 调用
tables.insert
API 方法。 - 使用客户端库。
- 提交
CREATE VIEW
数据定义语言 (DDL) 语句。
视图命名
在 BigQuery 中创建视图时,每个数据集的视图名称必须唯一。视图名称可以包含以下内容:
- 不超过 1024 个字符
- 字母(大写字母或小写字母)、数字和下划线
视图限制
BigQuery 视图存在如下限制:
- 视图是只读的。您不能针对视图运行 DML(插入、更新、删除)查询。
- 包含视图的数据集与包含视图所引用表的数据集必须位于相同位置。
- 您无法运行从视图导出数据的 BigQuery 作业。
- 您无法使用
TableDataList
JSON API 方法从视图中检索数据。如需了解详情,请参阅 Tabledata: list。 - 使用视图时,不能混合使用标准 SQL 查询和旧版 SQL 查询。标准 SQL 查询无法引用使用旧版 SQL 语法定义的视图。
- 无法在视图中引用查询参数。
- 创建视图时,底层表的架构会与视图一同存储。如果在视图创建后执行列的添加、删除等操作,则在视图更新之前,系统报告的架构可能不准确。 尽管系统报告的架构可能会不准确,但所有已提交的查询都会产生准确的结果。
- 您无法自动将旧版 SQL 视图更新为标准 SQL 语法。如需修改用于定义视图的查询,请在 Cloud Console 中使用修改查询选项、在
bq
命令行工具中使用bq update --view
命令、使用客户端库或使用 update 或 patch API 方法。 - 您无法在定义视图的 SQL 查询中包含用户定义的临时性函数或临时表。
- 您无法在通配符表查询中引用视图。
如需了解适用于视图的配额和限制,请参阅视图限制。
所需权限
在 BigQuery 中,视图作为表资源处理,因此创建视图所需的权限与创建表相同。如需创建视图,您必须至少具备 bigquery.tables.create
权限。以下预定义的 IAM 角色包含 bigquery.tables.create
权限:
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
此外,如果用户具有 bigquery.datasets.create
权限,则当该用户创建数据集时,系统会为其授予该数据集的 bigquery.dataOwner
访问权限。具备 bigquery.dataOwner
访问权限的用户可以在数据集中创建视图。
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
创建视图
要创建视图,您可以编写 SQL 查询来定义视图可访问的数据。
要创建视图,请执行以下操作:
控制台
运行查询后,点击查询结果窗口上方的保存视图按钮,将查询保存为视图。
在保存视图对话框中,执行以下操作:
- 对于项目名称,请选择将存储视图的项目。
- 在数据集名称部分,选择将包含该视图的数据集。 包含视图的数据集与包含视图所引用表的数据集必须位于相同位置。
- 在表名称部分,输入该视图的名称。
- 点击保存。
bq
使用带有 --view
标志的 bq mk
命令。对于标准 SQL 查询,请添加 --use_legacy_sql
标志并将其设置为 false
。可选参数包括 --expiration
、--description
和 --label
。
如果您的查询引用了存储在 Cloud Storage 或本地文件中的外部用户定义函数 (UDF) 资源,请使用 --view_udf_resource
标志指定这些资源。此处未显示 --view_udf_resource
标志。如需详细了解如何使用 UDF,请参阅 UDF 和 bq
命令行工具。
如果您要在非默认项目中创建视图,请使用 --project_id
标志指定项目 ID。
bq mk \ --use_legacy_sql=false \ --view_udf_resource=PATH_TO_FILE \ --expiration INTEGER \ --description "DESCRIPTION" \ --label KEY:VALUE \ --view 'QUERY' \ --project_id PROJECT_ID \ DATASET.VIEW
请替换以下内容:
PATH_TO_FILE
是一个代码文件的 URI 或本地文件系统路径,该代码文件会被立即加载为 UDF 资源并评估,以供视图使用。重复使用该标志可指定多个文件。INTEGER
设置视图的生命周期(以秒为单位)。如果INTEGER
为0
,则视图不会过期。如果不添加--expiration
标志,则 BigQuery 会使用数据集的默认表生命周期创建视图。DESCRIPTION
是括在引号中的视图说明。KEY:VALUE
是代表标签的键值对。重复使用--label
标志以指定多个标签。QUERY
是一个有效查询。PROJECT_ID
是您的项目 ID(如果您未配置默认项目)。DATASET
是项目中的数据集。VIEW
是您要创建的视图的名称。
示例:
输入以下命令可在默认项目的 mydataset
中创建名为 myview
的视图。到期时间设置为 3600 秒(1 小时),说明设置为 This is my view
,且标签设置为 organization:development
。用于创建视图的查询会查询美国姓名数据公共数据集中的数据。
bq mk \
--use_legacy_sql=false \
--expiration 3600 \
--description "This is my view" \
--label organization:development \
--view \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC' \
mydataset.myview
输入以下命令可在 myotherproject
的 mydataset
中创建名为 myview
的视图。说明设置为 This is my view
,标签设置为 organization:development
,视图的到期时间设置为数据集的默认表到期时间。用于创建视图的查询会查询美国姓名数据公共数据集中的数据。
bq mk \
--use_legacy_sql=false \
--description "This is my view" \
--label organization:development \
--project_id myotherproject \
--view \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC' \
mydataset.myview
创建视图后,您可以更新视图的到期时间、说明和标签。如需了解详情,请参阅更新视图。
API
使用包含 view
属性的表资源调用 tables.insert
方法。
Go
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Go 设置说明进行操作。如需了解详情,请参阅 BigQuery Go API 参考文档。
Java
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
Node.js
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Node.js 设置说明进行操作。如需了解详情,请参阅 BigQuery Node.js API 参考文档。
Python
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
创建视图后,您可以按照与查询表相同的方式查询视图。
后续步骤
- 如需了解如何创建授权视图,请参阅创建授权视图。
- 如需了解如何列出视图,请参阅列出视图。
- 如需了解如何获取视图元数据,请参阅获取视图相关信息。
- 如需了解如何更新视图,请参阅更新视图。
- 如需详细了解如何管理视图,请参阅管理视图。