创建视图
本文档介绍了如何在 BigQuery 中创建视图。
您可以通过以下方式在 BigQuery 中创建视图:
- 使用 Google Cloud 控制台。
- 使用 bq 命令行工具的
bq mk
命令。 - 调用
tables.insert
API 方法。 - 使用客户端库。
- 提交
CREATE VIEW
数据定义语言 (DDL) 语句。
视图限制
BigQuery 视图存在如下限制:
- 视图是只读的。 例如,您无法运行插入、更新或删除数据的查询。
- 包含视图的数据集与包含视图所引用表的数据集必须位于相同位置。
- 视图内的引用必须使用数据集进行限定。默认数据集不会影响视图正文。
- 您无法使用
TableDataList
JSON API 方法从视图中检索数据。如需了解详情,请参阅 Tabledata: list。 - 使用视图时,不能混合使用 GoogleSQL 查询和旧版 SQL 查询。GoogleSQL 查询无法引用使用旧版 SQL 语法定义的视图。
- 无法在视图中引用查询参数。
- 创建视图时,基础表的架构与视图一同存储。如果在视图创建后添加、删除或修改列,则在视图更新之前,报告的架构可能不准确。尽管系统报告的架构可能会不准确,但所有已提交的查询都会产生准确的结果。
- 您无法自动将旧版 SQL 视图更新为 GoogleSQL 语法。如需修改用于定义视图的查询,您可以使用以下各项:
- Google Cloud 控制台中的修改查询选项
- bq 命令行工具中的
bq update --view
命令 - BigQuery 客户端库
- update 或 patch API 方法。
- 您无法在定义视图的 SQL 查询中包含用户定义的临时性函数或临时表。
- 您无法在通配符表查询中引用视图。
如需了解适用于视图的配额和限制,请参阅视图限制。
准备工作
授予为用户提供执行本文档中的每个任务所需权限的 Identity and Access Management (IAM) 角色。
所需权限
在 BigQuery 中,视图作为表资源进行处理,因此创建视图所需的权限与创建表相同。您还必须拥有查询视图的 SQL 查询所引用的任何表的权限。
如需创建视图,您需要拥有 bigquery.tables.create
IAM 权限。预定义的 IAM 角色 roles/bigquery.dataEditor
可提供创建视图所需的权限。
此外,如果您拥有 bigquery.datasets.create
权限,则可以在自己创建的数据集中创建视图。如需针对非自己拥有的数据创建视图,您必须拥有表的 bigquery.tables.getData
权限。
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
视图命名
在 BigQuery 中创建视图时,每个数据集的视图名称必须唯一。视图名称要求:
- 包含的字符总数不超过 1024 个 UTF-8 字节。
- 包含类别 L(字母)、M(符号)、N(数字)、Pc(连接符,包括下划线)、Pd(短划线)、Zs(空格)中的 Unicode 字符。如需了解详情,请参阅常规类别。
以下是有效视图名称的所有示例:view 01
、ग्राहक
、00_お客様
、étudiant-01
。
注意事项:
- 默认情况下,表名称区分大小写。
mytable
和MyTable
可以位于同一数据集中,除非它们属于关闭区分大小写的数据集。 - 某些视图名称和视图名称前缀已预留。如果您收到错误,表示您的视图名称或前缀已被预留,请选择其他名称并重试。
如果您在序列中添加多个点运算符 (
.
),则系统会隐式删除重复的运算符。例如,
project_name....dataset_name..table_name
会变为
project_name.dataset_name.table_name
创建视图
要创建视图,您可以编写 SQL 查询来定义视图可访问的数据。 SQL 查询必须包含 SELECT
语句。视图查询中不允许使用其他语句类型(例如 DML 语句)和多语句查询。
要创建视图,请执行以下操作:
控制台
运行查询后,点击查询结果窗口上方的保存视图按钮,将查询保存为视图。
在保存视图对话框中,执行以下操作:
- 在项目名称部分,选择用于存储视图的项目。
- 在数据集名称部分,选择用于存储视图的数据集。 包含视图的数据集与包含视图所引用表的数据集必须位于相同位置。
- 在表名称部分,输入该视图的名称。
- 点击保存。
SQL
使用 CREATE VIEW
语句。以下示例根据美国姓名公共数据集创建一个名为 usa_male_names
的视图:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
CREATE VIEW mydataset.usa_male_names(name, number) AS ( SELECT name, number FROM
bigquery-public-data.usa_names.usa_1910_current
WHERE gender = 'M' ORDER BY number DESC );点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
使用带有 --view
标志的 bq mk
命令。对于 GoogleSQL 查询,请添加 --use_legacy_sql
标志并将其设置为 false
。可选参数包括 --expiration
、--description
和 --label
。
如果您的查询引用了存储在 Cloud Storage 或本地文件中的外部用户定义的函数 (UDF) 资源,请使用 --view_udf_resource
标志指定这些资源。此处未显示 --view_udf_resource
标志。如需详细了解如何使用 UDF,请参阅 UDF。
如果您要在非默认项目中创建视图,请使用 --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
创建视图后,您可以更新视图的到期时间、说明和标签。如需了解详情,请参阅更新视图。
Terraform
使用 google_bigquery_table
资源。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为客户端库设置身份验证。
以下示例创建了一个名为 myview
的视图:
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
- 启动 Cloud Shell。
-
设置要在其中应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf
扩展名,例如main.tf
。在本教程中,该文件称为main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf
中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade
选项:terraform init -upgrade
应用更改
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes
来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
API
使用包含 view
属性的表资源调用 tables.insert
方法。
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 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
创建视图后,您可以按照与查询表相同的方式查询视图。
视图安全性
如需控制对 BigQuery 中视图的访问权限,请参阅授权视图。