管理视图
本文档介绍了如何在 BigQuery 中管理视图。您可以通过以下方式管理 BigQuery 视图:
准备工作
授予为用户提供执行本文档中的每个任务所需权限的 Identity and Access Management (IAM) 角色。执行任务所需的权限(如果有)列出在任务的“所需权限”部分中。
更新视图
创建视图后,您可以更新以下视图属性:
所需权限
如需更新视图,您需要拥有以下 IAM 权限:
bigquery.tables.update
bigquery.tables.get
以下每个预定义 IAM 角色都包含更新视图所需的权限:
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
此外,如果您拥有 bigquery.datasets.create
权限,则可以更新您自己创建的数据集中的表和视图。
如需更新视图的 SQL 查询,您还必须有权限查询视图的 SQL 查询所引用的任何表。
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
更新视图的 SQL 查询
您可以通过以下方式更新用于定义视图的 SQL 查询:
- 使用 Google Cloud 控制台
- 使用 bq 命令行工具的
bq update
命令 - 调用
tables.patch
API 方法 - 使用客户端库
您可以在 API 或 bq 命令行工具中将 SQL 方言从旧版 SQL 更改为 GoogleSQL。在 Google Cloud 控制台中,您无法将旧版 SQL 视图更新为 GoogleSQL。
更新视图的 SQL 查询的方法如下:
控制台
在探索器面板中,展开您的项目和数据集,然后选择视图。
点击详情标签页。
在查询框上方,点击修改查询按钮。在随即显示的对话框中点击打开。
在查询编辑器框中修改 SQL 查询,然后点击保存视图。
确保保存视图对话框中的所有字段都正确无误,然后点击保存。
bq
发出带 --view
标志的 bq update
命令。如需使用 GoogleSQL 或者将查询方言从旧版 SQL 更新为 GoogleSQL,请添加 --use_legacy_sql
标志并将其设置为 false
。
如果您的查询引用了存储在 Google Cloud Storage 或本地文件中的外部用户定义函数资源,请使用 --view_udf_resource
标志指定这些资源。此处未显示 --view_udf_resource
标志。如需详细了解如何使用用户指定函数 (UDF),请参阅 GoogleSQL 用户定义的函数。
如果您要更新非默认项目中的视图,请按以下格式将项目 ID 添加到数据集名称中:project_id:dataset
。
bq update \ --use_legacy_sql=false \ --view_udf_resource=path_to_file \ --view='query' \ project_id:dataset.view
替换以下内容:
- path_to_file:代码文件的 URI 或本地文件系统路径,该代码文件会立即作为视图使用的用户定义的函数资源进行加载和评估。重复使用该标志可指定多个文件。
- query:有效的 GoogleSQL 查询
- project_id:您的项目 ID
- dataset:要更新的视图所属数据集的名称
- view:要更新的视图的名称
示例
输入以下命令以更新 mydataset
中名为 myview
的视图的 SQL 查询。mydataset
属于默认项目。用于更新视图的示例查询会从美国姓名数据公开数据集中查询数据。
bq update \
--use_legacy_sql=false \
--view \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC;' \
mydataset.myview
输入以下命令以更新 mydataset
中名为 myview
的视图的 SQL 查询。mydataset
属于 myotherproject
,而非默认项目。用于更新视图的示例查询会从美国姓名数据公开数据集中查询数据。
bq update \
--use_legacy_sql=false \
--view \
'SELECT
name,
number
FROM
`bigquery-public-data.usa_names.usa_1910_current`
WHERE
gender = "M"
ORDER BY
number DESC;' \
myotherproject:mydataset.myview
API
要更新视图,可使用包含已更新的 view
属性的表资源调用 tables.patch
方法。由于 tables.update
方法会替换整个表资源,因此最好使用 tables.patch
方法。
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 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
更新视图的到期时间
您可以在数据集级层设置默认的视图到期时间,也可以在创建视图时设置视图的到期时间。如果在创建视图时设置到期时间,则会忽略数据集的默认表到期时间。如果未在数据集级层设置默认表到期时间,也未在创建视图时设置到期时间,则视图永不过期,您必须手动删除视图。
创建视图后,随时都可通过以下方式更新视图的到期时间:
- 使用 Google Cloud 控制台
- 使用以 GoogleSQL 语法编写的数据定义语言 (DDL) 语句
- 使用 bq 命令行工具的
bq update
命令 - 调用
tables.patch
API 方法 - 使用客户端库
要更新视图的到期时间,请执行以下操作:
控制台
在导航窗格中,选择视图。
在视图的“详细信息”页面上,点击详细信息标签页。
在视图信息右侧,点击修改图标(铅笔)。
在视图信息对话框中,对于视图过期,点击指定日期。
在日期选择器中,输入到期日期和时间,然后点击确定。
点击更新。更新后的到期时间会显示在视图信息部分中。
SQL
使用 ALTER VIEW SET OPTIONS
DDL 语句:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
ALTER VIEW DATASET_ID.MY_VIEW SET OPTIONS ( expiration_timestamp = TIMESTAMP('NEW_TIMESTAMP'));
替换以下内容:
- DATASET_ID:您的视图所属数据集的 ID
- MY_VIEW:要更新的视图的名称
- NEW_TIMESTAMP:TIMESTAMP 值
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
发出带 --expiration
标志的 bq update
命令。如果您要更新非默认项目中的视图,请按以下格式将项目 ID 添加到数据集名称中:project_id:dataset
。
bq update \ --expiration integer \ project_id:dataset.view
替换以下内容:
- integer:表的默认生命周期(以秒为单位)。最小值为 3600 秒(一小时)。到期时间以当前时间加上这个整数值为准。
- project_id:您的项目 ID
- dataset:要更新的视图所属数据集的名称
- view:要更新的视图的名称
示例
输入以下命令可将 mydataset
中 myview
的到期时间更新为 5 天(432000 秒)。mydataset
属于默认项目。
bq update \
--expiration 432000 \
mydataset.myview
输入以下命令可将 mydataset
中 myview
的到期时间更新为 5 天(432000 秒)。mydataset
属于 myotherproject
,而非默认项目。
bq update \
--expiration 432000 \
myotherproject:mydataset.myview
API
调用 tables.patch
方法并使用表资源中的 expirationTime
属性。由于 tables.update
方法会替换整个表资源,因此建议使用 tables.patch
方法。使用 REST API 时,视图的到期时间以毫秒为单位表示。
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 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
更新视图的说明
您可以通过以下方式更新视图的说明:
- 使用 Google Cloud 控制台
- 使用以 GoogleSQL 语法编写的数据定义语言 (DDL) 语句
- 使用 bq 命令行工具的
bq update
命令 - 调用
tables.patch
API 方法 - 使用客户端库
要更新视图的说明,请执行以下操作:
控制台
使用 Google Cloud 控制台创建视图时,您无法添加说明。创建视图后,您可以在详细信息页面上添加说明。
在探索器面板中,展开您的项目和数据集,然后选择视图。
点击详情标签页。
点击说明旁边的铅笔图标。
在对话框中输入说明。点击更新以保存新说明。
SQL
使用 ALTER VIEW SET OPTIONS
DDL 语句:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
ALTER VIEW DATASET_ID.MY_VIEW SET OPTIONS ( description = 'NEW_DESCRIPTION');
替换以下内容:
- DATASET_ID:您的视图所属数据集的 ID
- MY_VIEW:要更新的视图的名称
- NEW_DESCRIPTION:新视图说明
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
发出带 --description
标志的 bq update
命令。如果您要更新非默认项目中的视图,请按以下格式将项目 ID 添加到数据集名称中:[PROJECT_ID]:[DATASET]
。
bq update \ --description "description" \ project_id:dataset.view
替换以下内容:
- description:描述视图的文本,括在英文引号之间
- project_id:您的项目 ID。
- dataset:要更新的视图所属数据集的名称
- view:要更新的视图的名称
示例
输入以下命令,将 mydataset
中 myview
的说明更改为“Description of myview”。mydataset
属于默认项目。
bq update \
--description "Description of myview" \
mydataset.myview
输入以下命令,将 mydataset
中 myview
的说明更改为“Description of myview”。mydataset
属于 myotherproject
,而非默认项目。
bq update \
--description "Description of myview" \
myotherproject:mydataset.myview
API
调用 tables.patch
方法并使用 description
属性更新表资源中的视图说明。由于 tables.update
方法会替换整个表资源,因此建议使用 tables.patch
方法。
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 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
复制视图
您可以使用 Google Cloud 控制台复制视图。
您无法使用 bq 命令行工具、REST API 或客户端库复制视图,但可以复制目标数据集中的视图。
所需权限
如需在 Google Cloud 控制台中复制视图,您需要拥有源数据集和目标数据集的 IAM 权限。
在源数据集上,您需要以下权限:
bigquery.tables.get
bigquery.tables.getData
(访问视图的 SQL 查询引用的表时需要)
在目标数据集上,您需要以下权限:
bigquery.tables.create
(可让您在目标数据集中创建视图的副本)
以下每个预定义 IAM 角色都包含复制视图所需的权限:
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
此外,如果您拥有 bigquery.datasets.create
权限,则可以在自己创建的数据集中复制视图。除非您创建了目标数据集,否则还需要拥有目标数据集的访问权限。
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
复制视图
要复制视图,请执行以下操作:
在探索器面板中,展开您的项目和数据集,然后选择视图。
在详细信息面板中,点击复制视图。
在复制视图对话框中,执行以下操作:
- 在来源 (Source) 部分中,验证您的项目名称、数据集名称和表名称是否正确无误。
在目标 (Destination) 部分中执行如下设置:
- 对于项目名称,选择要将视图复制到哪个项目。
- 对于数据集名称,选择要包含所复制视图的数据集。
- 对于表名称,输入该视图的名称。您可以在框中输入新的视图名称,以便更改视图名称。如果要输入新名称,这个新名称必须遵循视图命名规则。
点击复制。
适用复制作业的限制。如需了解详情,请参阅配额和限制。
重命名视图
目前,只有在使用 Google Cloud 控制台复制视图时才能重命名视图。有关在复制视图时对视图进行重命名的说明,请参阅复制视图。
您无法使用 bq 命令行工具、API 或客户端库更改现有视图的名称。如有相应需要,您必须使用新名称重新创建视图。
删除视图
您可以通过以下方式删除视图:
- 使用 Google Cloud 控制台
- 使用 bq 命令行工具的
bq rm
命令 - 调用
tables.delete
API 方法
目前,无论使用何种方法,您每次只能删除一个视图。
若要在指定的时间段后自动删除视图,请设置数据集级别的默认到期时间,或在创建视图时设置到期时间。
删除已获授权的视图时,最多可能需要 24 小时才能从源数据集的已获授权的视图列表中移除已删除的视图。
删除视图也会删除与此视图关联的所有权限。重新创建已删除的视图时,您还必须手动重新配置之前与其关联的任何访问权限。
所需权限
如需删除视图,您需要拥有以下 IAM 权限:
bigquery.tables.delete
以下每个预定义 IAM 角色都包含删除视图所需的权限:
roles/bigquery.dataOwner
roles/bigquery.dataEditor
roles/bigquery.admin
此外,如果您拥有 bigquery.datasets.create
权限,则可以在自己创建的数据集中删除视图。
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
删除视图
删除视图的方法如下:
控制台
在 Google Cloud 控制台中,转到 BigQuery 页面。
在探索器面板中,展开您的项目和数据集,然后选择视图。
在详细信息面板中,点击删除视图。
在对话框中输入
"delete"
,然后点击删除进行确认。
SQL
使用 DROP VIEW
DDL 语句:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
DROP VIEW mydataset.myview;
替换以下内容:
- DATASET_ID:您的视图所属数据集的 ID
- MY_VIEW:要更新的视图的名称
- NEW_DESCRIPTION:新视图说明
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
使用带有 --table
标志(或 -t
快捷方式)的 bq rm
命令删除视图。当您使用 bq 命令行工具移除视图时,必须确认操作。您可以使用 --force
标志(或 -f
快捷方式)跳过确认。
如果该视图属于非默认项目中的数据集,请按以下格式将相应项目 ID 添加到数据集名称中:project_id:dataset
。
bq rm \ -f \ -t \ project_id:dataset.view
其中:
- project_id 是项目 ID。
- dataset 是包含该表的数据集的名称。
- view 是要删除的视图的名称。
示例:
您可以使用 bq 命令行工具运行 bq
命令。
在 Google Cloud 控制台控制台中,激活 Cloud Shell。
输入以下命令可从 mydataset
删除 myview
。mydataset
在默认项目中。
bq rm -t mydataset.myview
输入以下命令可从 mydataset
删除 myview
。mydataset
在 myotherproject
中,不在默认项目中。
bq rm -t myotherproject:mydataset.myview
输入以下命令可从 mydataset
删除 myview
。mydataset
在默认项目中。该命令使用 -f
快捷方式绕过确认。
bq rm -f -t mydataset.myview
API
调用 tables.delete
API 方法并使用 tableId
参数指定要删除的视图。
C#
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 C# 设置说明进行操作。 如需了解详情,请参阅 BigQuery C# API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Go
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Go 设置说明进行操作。 如需了解详情,请参阅 BigQuery Go API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Node.js
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 BigQuery Node.js API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
PHP
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 PHP 设置说明进行操作。 如需了解详情,请参阅 BigQuery PHP API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Ruby
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Ruby 设置说明进行操作。 如需了解详情,请参阅 BigQuery Ruby API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
视图安全性
如需控制对 BigQuery 中视图的访问权限,请参阅授权视图。