管理物化视图
本文档介绍了如何在 BigQuery 中管理物化视图。
BigQuery 管理物化视图包括以下操作:
如需详细了解物化视图,请参阅以下内容:
准备工作
授予为用户提供执行本文档中的每个任务所需权限的 Identity and Access Management (IAM) 角色。执行任务所需的权限(如果有)列出在任务的“所需权限”部分中。
更改物化视图
您可以通过 Google Cloud 控制台更改物化视图,也可以通过将数据定义语言 (DDL) 与 ALTER MATERIALIZED
VIEW
和 SET OPTIONS
搭配使用来通过 bq 命令行工具进行更改。如需查看物化视图选项列表,请参阅 materialized_view_set_options_list
。
下面展示了一个将 enable_refresh
设置为 true
的示例。根据您的用例按需进行调整。
所需权限
如需更改物化视图,您需要拥有 bigquery.tables.get
和 bigquery.tables.update
IAM 权限。
以下每个预定义 IAM 角色都包含更改物化视图所需的权限:
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
如需详细了解 BigQuery Identity and Access Management (IAM),请参阅预定义角色和权限。
SQL
如需更改物化视图,请使用 ALTER MATERIALIZED VIEW SET OPTIONS
DDL 语句:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW SET OPTIONS (enable_refresh = true);
替换以下内容:
PROJECT
:包含物化视图的项目的名称DATASET
:包含物化视图的数据集的名称MATERIALIZED_VIEW
:要更改的物化视图的名称
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
运行 bq update
命令:
bq update \ --enable_refresh=true \ --refresh_interval_ms= \ PROJECT.DATASET.MATERIALIZED_VIEW
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
列出物化视图
您可以通过 Google Cloud 控制台、bq 命令行工具或 BigQuery API 列出物化视图。
所需权限
如需列出数据集中的物化视图,您需要拥有 bigquery.tables.list
IAM 权限。
以下每个预定义 IAM 角色都包含列出数据集中的物化视图所需的权限:
roles/bigquery.user
roles/bigquery.metadataViewer
roles/bigquery.dataViewer
roles/bigquery.dataOwner
roles/bigquery.dataEditor
roles/bigquery.admin
如需详细了解 IAM 中的 IAM 角色和权限,请参阅预定义的角色和权限。
列出物化视图的过程与列出表的过程完全相同。如需列出数据集中的物化视图,请执行以下操作:
控制台
在浏览器面板中,展开您的项目并选择数据集。
滚动列表,查看数据集中的表。表、视图和物化视图由不同的图标进行标识。
bq
发出 bq ls
命令。--format
标志可用于控制输出。如果您要列出非默认项目中的物化视图,请按照以下格式将项目 ID 添加到数据集:project_id:dataset
。
bq ls --format=pretty project_id:dataset
其中:
- project_id 是您的项目 ID。
- dataset 是数据集的名称。
运行该命令时,Type
字段会显示表类型。例如:
+-------------------------+--------------------+----------------------+-------------------+ | tableId | Type | Labels | Time Partitioning | +-------------------------+--------------------+----------------------+-------------------+ | mytable | TABLE | department:shipping | | | mymatview | MATERIALIZED_VIEW | | | +-------------------------+--------------------+----------------------+-------------------+
示例:
输入以下命令可列出默认项目的数据集 mydataset
中的物化视图。
bq ls --format=pretty mydataset
输入以下命令可列出 myotherproject
的数据集 mydataset
中的物化视图。
bq ls --format=pretty myotherproject:mydataset
API
如需使用 API 列出物化视图,请调用 tables.list
方法。
Go
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Go 设置说明进行操作。 如需了解详情,请参阅 BigQuery Go API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
获取有关物化视图的信息
您可以使用 SQL、bq 命令行工具或 BigQuery API 获取物化视图的相关信息。
所需权限
如需查询有关物化视图的信息,您需要拥有以下 Identity and Access Management (IAM) 权限:
bigquery.tables.get
bigquery.tables.list
bigquery.routines.get
bigquery.routines.list
以下每个预定义的 IAM 角色均可提供上述权限:
roles/bigquery.metadataViewer
roles/bigquery.dataViewer
roles/bigquery.admin
如需详细了解 BigQuery 权限,请参阅使用 IAM 进行访问权限控制。
如需获取有关物化视图的信息,包括任何依赖的物化视图副本,请执行以下操作:
SQL
如需获取有关物化视图的信息,请查询 INFORMATION_SCHEMA.TABLES
视图:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
SELECT * FROM PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.TABLES WHERE table_type = 'MATERIALIZED VIEW';
请替换以下内容:
PROJECT_ID
:包含物化视图的项目的名称DATASET_ID
:包含物化视图的数据集的名称
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
使用 bq show
命令:
bq show --project=project_id --format=prettyjson dataset.materialized_view
替换以下内容:
- project_id:项目 ID。 您只需添加此标志,即可获取与默认项目不同的其他项目中物化视图的相关信息。
- dataset:包含物化视图的数据集的名称。
- materialized_view:您要获取相关信息的物化视图的名称。
示例:
输入以下命令,可显示 myproject
项目的 report_views
数据集中的物化视图 my_mv
的相关信息。
bq show --project=myproject --format=prettyjson report_views.my_mv
API
如需使用 API 获取物化视图信息,请调用 tables.get
方法。
删除物化视图
您可以通过 Google Cloud 控制台、bq 命令行工具或 API 删除物化视图。
删除物化视图也会删除与此物化视图关联的所有权限。重新创建已删除的物化视图时,您还必须手动重新配置之前与其关联的任何访问权限。
所需权限
如需删除物化视图,您需要拥有 bigquery.tables.delete
IAM 权限。
以下每个预定义 IAM 角色都包含删除物化视图所需的权限:
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
如需详细了解 BigQuery Identity and Access Management (IAM),请参阅预定义角色和权限。
SQL
如需删除物化视图,请使用 DROP MATERIALIZED VIEW
DDL 语句:
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中,输入以下语句:
DROP MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW;
替换以下内容:
PROJECT
:包含物化视图的项目的名称DATASET
:包含物化视图的数据集的名称MATERIALIZED_VIEW
:要删除的物化视图的名称
点击
运行。
如需详细了解如何运行查询,请参阅运行交互式查询。
bq
使用 bq rm
命令删除物化视图。
API
调用 tables.delete
方法并为 projectId
、datasetId
和 tableId
参数指定值:
- 为项目 ID 分配
projectId
参数。 - 为数据集 ID 分配
datasetId
参数。 - 为要删除的物化视图的表 ID 分配
tableId
参数。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
刷新物化视图
刷新物化视图会更新该视图的缓存数据,以反映其基表的当前状态。
当您查询物化视图时,BigQuery 会返回缓存的物化视图数据和从基表检索的数据的结果。如果可能,BigQuery 仅读取自从上次刷新视图以来所做的更改。虽然在刷新物化视图期间可能不会包含最近流式传输的数据,但无论是否使用了物化视图,查询都会始终读取流式传输的数据。
直接从基表返回查询结果所产生的计算费用,要高于从缓存的物化视图数据返回结果所产生的计算费用。定期刷新物化视图缓存的数据可减少直接从基表返回的数据量,从而降低计算费用。
本部分介绍了如何执行以下操作:
自动刷新
您可以随时启用或停用自动刷新。自动刷新作业由 bigquery-adminbot@system.gserviceaccount.com
服务账号执行,并显示在物化视图项目的作业历史记录中。
默认情况下,物化视图中缓存的数据会在更改基表(例如插入或删除行)后的 5 到 30 分钟内从基表自动刷新。
您可以设置刷新频率上限,以管理缓存数据的自动刷新频率,从而管理物化视图的费用和查询性能。
启用和停用自动刷新
如需在创建物化视图时停用自动刷新功能,请将 enable_refresh
设置为 false
。
CREATE MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW PARTITION BY RANGE_BUCKET(column_name, buckets) OPTIONS (enable_refresh = false) AS SELECT ...
对于现有物化视图,您可以使用 ALTER MATERIALIZED VIEW
修改 enable_refresh
值。
ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW SET OPTIONS (enable_refresh = true);
设置频率上限
您可以对自动刷新运行频率配置频率上限。默认情况下,物化视图的刷新频率不超过每 30 分钟刷新一次。
您可以随时更改刷新频率上限。
如需在创建物化视图时设置刷新频率上限,请将 DDL 中的 refresh_interval_minutes
(或 API 和 bq 命令行工具中的 refresh_interval_ms
)设置为所需的值。
CREATE MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW OPTIONS (enable_refresh = true, refresh_interval_minutes = 60) AS SELECT ...
同样,您可以在修改物化视图时设置频率上限。此示例假定您已启用自动刷新,但只想更改频率上限:
ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW SET OPTIONS (refresh_interval_minutes = 60);
刷新频率最小上限为 1 分钟。刷新频率最大上限为 7 天。
您可以随时手动刷新物化视图,其时间不受频率上限的约束。
尽力而为
系统会尽最大努力执行自动刷新。BigQuery 会尝试在基表更改后的 5 分钟内开始刷新(如果上一次刷新是在 30 分钟之前执行的),但无法保证刷新操作会在这个时间开始,也无法保证其完成时间。
自动刷新的处理方式与具有批量优先级的查询类似。如果物化视图的项目当前没有容量,则刷新会延迟。如果项目包含多个最终证明其刷新开销较大的视图,则每个视图可能会相对于其基表出现显著延迟。
手动刷新
您可以随时手动刷新物化视图。
所需权限
如需手动刷新物化视图,您需要拥有 bigquery.tables.getData
、bigquery.tables.update
和 bigquery.tables.updateData
IAM 权限。
以下预定义的 IAM 角色均包含手动刷新物化视图所需的权限:
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
如需详细了解 BigQuery Identity and Access Management (IAM),请参阅预定义角色和权限。
如需更新物化视图中的数据,请调用 BQ.REFRESH_MATERIALIZED_VIEW
系统过程。调用此过程后,BigQuery 会识别在基表中发生的更改并将这些更改应用到物化视图。刷新完成后,对运行 BQ.REFRESH_MATERIALIZED_VIEW
的查询也将完成。
CALL BQ.REFRESH_MATERIALIZED_VIEW('PROJECT.DATASET.MATERIALIZED_VIEW');
监控物化视图
您可以使用 BigQuery API 获取有关物化视图和物化视图刷新作业的信息。 如需了解详情,请参阅监控物化视图。