创建具体化视图副本

本文档介绍了如何在 BigQuery 中创建具体化视图副本。您可以使用具体化视图副本,使 Amazon Simple Storage Service (Amazon S3) 数据在本地可用于联接。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  5. 确保您的 Google Cloud 项目已启用结算功能

所需权限

授予为用户提供执行本文档中的每个任务所需权限的 Identity and Access Management (IAM) 角色。

如需创建具体化视图副本,您需要拥有以下 IAM 权限:

  • bigquery.tables.create
  • bigquery.tables.get
  • bigquery.tables.getData
  • bigquery.tables.replicateData
  • bigquery.jobs.create

以下每个预定义 IAM 角色都包含创建具体化视图所需的权限:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

如需详细了解 BigQuery Identity and Access Management (IAM),请参阅 BigQuery 中的 IAM 简介

前提条件

在创建具体化视图副本之前,您必须完成以下任务:

  1. 支持 Amazon S3 的区域创建数据集
  2. 在您在第 1 步创建的数据集中创建 Amazon S3 BigLake 表。创建表时启用元数据缓存
  3. 在您在第 1 步创建的数据集中,基于 Amazon S3 BigLake 表创建具体化视图。您还可以在支持 Amazon S3 的区域中的其他数据集中创建具体化视图。
  4. 在包含创建具体化视图的查询中使用的来源 Amazon S3 BigLake 表的数据集中对具体化视图进行授权
  5. 如果您为 Amazon S3 BigLake 表配置了手动元数据缓存刷新,请运行 BQ.REFRESH_EXTERNAL_METADATA_CACHE 系统过程来刷新元数据缓存。
  6. 运行 BQ.REFRESH_MATERIALIZED_VIEW 系统过程以刷新具体化视图。

创建具体化视图副本

如需创建具体化视图副本,请使用 CREATE MATERIALIZED VIEW AS REPLICA OF 语句

CREATE MATERIALIZED VIEW PROJECT_ID.BQ_DATASET.REPLICA_NAME
OPTIONS(replication_interval_seconds=REPLICATION_INTERVAL)
AS REPLICA OF PROJECT_ID.S3_DATASET.MATERIALIZED_VIEW_NAME;

替换以下内容:

  • PROJECT_ID:您要在其中创建具体化视图副本的项目的名称,例如 myproject
  • BQ_DATASET:您要在其中创建具体化视图副本的 BigQuery 数据集的名称,例如 bq_dataset。该数据集必须位于映射到来源具体化视图的区域的 BigQuery 区域中。
  • REPLICA_NAME:您要创建的具体化视图副本的名称,例如 my_mv_replica
  • REPLICATION_INTERVAL:指定将数据从来源具体化视图复制到副本的频率(以秒为单位)。必须是一个介于 60 到 3,600 的值(包括 60 和 3,600)。默认值为 300(5 分钟)。
  • S3_DATASET:包含来源具体化视图的数据集的名称,例如 s3_dataset
  • MATERIALIZED_VIEW_NAME:要复制的具体化视图的名称,例如 my_mv

以下示例会在 bq_dataset 中创建一个名为 mv_replica 的具体化视图副本:

CREATE MATERIALIZED VIEW `myproject.bq_dataset.mv_replica`
OPTIONS(
  replication_interval_seconds=600
)
AS REPLICA OF `myproject.s3_dataset.my_s3_mv`

创建具体化视图副本后,复制过程将轮询来源具体化视图以查看是否存在更改,并将数据复制到具体化视图副本,按照您在 replication_interval_seconds 选项中指定的时间间隔刷新数据。如果您在第一次回填完成之前查询副本,则会收到 backfill in progress 错误。您可以在首次复制完成后查询具体化视图副本中的数据。