创建物化视图副本

本文档介绍了如何在 BigQuery 中创建物化视图副本。物化视图副本是 BigQuery 数据集中外部 Amazon Simple Storage Service (Amazon S3)、Apache Iceberg 或 Salesforce Data Cloud 数据的复制,以便在 BigQuery 中本地提供数据,从而帮助您避免数据出站流量费用并提高查询性能。

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 确保您拥有必要的 Identity and Access Management (IAM) 权限,以便执行本文档中的任务。

所需的角色

如需获得执行本文档中任务所需的权限,请让您的管理员向您授予 BigQuery Admin (roles/bigquery.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含执行本文档中的任务所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需执行本文档中的任务,您需要拥有以下权限:

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

您也可以使用自定义角色或其他预定义角色来获取这些权限。

如需详细了解 BigQuery IAM,请参阅 BigQuery 中的 IAM 简介

为物化视图副本准备数据集

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

  1. 支持 Amazon S3 的区域创建数据集
  2. 在您在上一步中创建的数据集中创建一个来源表。该来源表可以是以下任意表类型:

创建物化视图副本

从下列选项中选择一项:

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 探索器窗格中,找到要创建视图副本的项目和数据集,然后依次点击 查看操作 > 创建表

  3. 创建表对话框的来源部分中,执行以下操作:

    1. 对于基于以下数据源创建表,选择现有表/视图
    2. 对于项目,请输入来源表或视图所在的项目。
    3. 数据集部分,输入来源表或视图所在的数据集。
    4. 对于视图,请输入要复制的来源表或视图。如果您选择视图,则该视图必须是已获授权的视图;如果不是,则用于生成该视图的所有表必须位于该视图的数据集中。
  4. 可选:对于本地物化视图最长过时期限,请为本地物化视图输入 max_staleness

  5. 创建表对话框的目标部分,执行以下操作:

    1. 对于项目,请输入要在其中创建物化视图副本的项目。
    2. 数据集部分,输入要在其中创建物化视图副本的数据集。
    3. 对于副本物化视图名称,请为副本输入一个名称。
  6. 可选:为物化视图副本指定标记高级选项。如果您未为本地物化视图数据集指定数据集,系统会在与来源数据相同的项目和区域中自动创建一个数据集,并将其命名为 bq_auto_generated_local_mv_dataset。如果您未为本地物化视图名称指定名称,系统会在与来源数据相同的项目和区域中自动创建一个名称,并为其指定前缀 bq_auto_generated_local_mv_

  7. 点击创建表

系统会在源数据集中创建新的本地物化视图(如果未指定)并对其进行授权。然后,系统会在目标数据集中创建物化视图副本。

SQL

  1. 在您创建的数据集中,对基表创建一个物化视图。您还可以在 Amazon S3 区域中的其他数据集中创建物化视图。
  2. 对包含创建物化视图的查询中使用的来源表的数据集授权物化视图
  3. 如果您为来源表配置了手动元数据缓存刷新,请运行 BQ.REFRESH_EXTERNAL_METADATA_CACHE 系统过程以刷新元数据缓存。
  4. 运行 BQ.REFRESH_MATERIALIZED_VIEW 系统过程以刷新物化视图。
  5. 使用 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_secondsmax_staleness 选项中指定的时间间隔刷新数据。如果您在第一次回填完成之前查询副本,则会收到 backfill in progress 错误。您可以在首次复制完成后查询物化视图副本中的数据。