SCHEMATA_REPLICAS 视图

INFORMATION_SCHEMA.SCHEMATA_REPLICAS 视图包含有关架构副本的信息。

所需角色

如需获得查询 INFORMATION_SCHEMA.SCHEMATA_REPLICAS 视图所需的权限,请让管理员向您授予项目的 BigQuery Metadata Viewer (roles/bigquery.dataViewer) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

架构

INFORMATION_SCHEMA.SCHEMATA_REPLICAS 视图包含有关数据集副本的信息。INFORMATION_SCHEMA.SCHEMATA_REPLICAS 视图具有如下架构:
类型 说明
catalog_name STRING 该数据集所属项目的项目 ID。
schema_name STRING 数据集的数据集 ID。
replica_name STRING 副本的名称。
location STRING 在其中创建副本的单区域或多区域。
replica_primary_assigned BOOL 如果值为 TRUE,则副本具有主要分配。
replica_primary_assignment_complete BOOL 如果值为 TRUE,则表示主要分配完成。 如果值为 FALSE,则副本不是(或者尚且不是)主要副本,即使 replica_primary_assigned 等于 TRUE 也不例外。
creation_time TIMESTAMP 副本的创建时间。首次创建副本时,除非 creation_complete 等于 TRUE,否则它不会与主要副本完全同步。creation_time 的值在 creation_complete 等于 TRUE 之前设置。
creation_complete BOOL 如果值为 TRUE,则表示主要副本到辅助副本的初始完全同步已完成。
replication_time TIMESTAMP

replication_time 的值表示数据集过时。

副本中的某些表可能早于此时间戳。此值仅在次要区域可见。

如果数据集包含具有流式数据的表,则 replication_time 的值将不准确。

sync_status JSON 主副本和辅助副本之间的同步状态。如果副本是主副本,则返回 NULL

范围和语法

针对此视图的查询必须包含区域限定符。下表说明了此视图的区域范围:

视图名称 资源范围 区域范围
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.SCHEMATA_REPLICAS[_BY_PROJECT] 项目级 REGION
替换以下内容:

  • 可选:PROJECT_ID:您的 Google Cloud 项目的 ID。如果未指定,则使用默认项目。

  • REGION:任何数据集区域名称。例如 `region-us`

  • 示例

    本部分列出了 INFORMATION_SCHEMA.SCHEMATA_REPLICAS 视图的示例查询。

    示例:列出一个区域中所有复制的数据集

    以下示例列出了 US 区域中所有复制的数据集:

    SELECT * FROM `region-us`.INFORMATION_SCHEMA.SCHEMATA_REPLICAS;

    结果类似于以下内容:

    +---------------------+-------------------+--------------+----------+--------------------------+-------------------------------------+---------------------+-------------------+------------------+
    |    catalog_name     |    schema_name    | replica_name | location | replica_primary_assigned | replica_primary_assignment_complete |    creation_time    | creation_complete | replication_time |
    +---------------------+-------------------+--------------+----------+--------------------------+-------------------------------------+---------------------+-------------------+------------------+
    | myproject           | replica1          | us-east7     | us-east7 |                     true |                                true | 2023-04-17 20:42:45 |              true |             NULL |
    | myproject           | replica1          | us-east4     | us-east4 |                    false |                               false | 2023-04-17 20:44:26 |              true |             NULL |
    +---------------------+-------------------+--------------+----------+--------------------------+-------------------------------------+---------------------+-------------------+------------------+
    

    示例:列出复制的数据集以及每个数据集的主要副本

    以下示例列出了 US 区域中所有复制的数据集及其主要副本:

    SELECT
     catalog_name,
     schema_name,
     replica_name AS primary_replica_name,
     location AS primary_replica_location,
     replica_primary_assignment_complete AS is_primary,
    FROM
     `region-us`.INFORMATION_SCHEMA.SCHEMATA_REPLICAS
    WHERE
     replica_primary_assignment_complete = TRUE
     AND replica_primary_assigned = TRUE;

    结果类似于以下内容:

    +---------------------+-------------+----------------------+--------------------------+------------+
    |    catalog_name     | schema_name | primary_replica_name | primary_replica_location | is_primary |
    +---------------------+-------------+----------------------+--------------------------+------------+
    | myproject           | my_schema1  | us-east4             | us-east4                 |       true |
    | myproject           | my_schema2  | us                   | US                       |       true |
    | myproject           | my_schema2  | us                   | US                       |       true |
    +---------------------+-------------+----------------------+--------------------------+------------+
    

    示例:列出复制的数据集及其副本状态

    以下示例列出了所有复制的数据集及其副本状态:

    SELECT
      catalog_name,
      schema_name,
      replica_name,
      CASE
        WHEN (replica_primary_assignment_complete = TRUE AND replica_primary_assigned = TRUE) THEN 'PRIMARY'
        WHEN (replica_primary_assignment_complete = FALSE
        AND replica_primary_assigned = FALSE) THEN 'SECONDARY'
      ELSE
      'PENDING'
    END
      AS replica_state,
    FROM
      `region-us`.INFORMATION_SCHEMA.SCHEMATA_REPLICAS;

    结果类似于以下内容:

    +---------------------+-------------+--------------+---------------+
    |    catalog_name     | schema_name | replica_name | replica_state |
    +---------------------+-------------+--------------+---------------+
    | myproject           | my_schema1  | us-east4     | PRIMARY       |
    | myproject           | my_schema1  | my_replica   | SECONDARY     |
    +---------------------+-------------+--------------+---------------+
    

    示例:列出每个副本的创建时间以及初始回填是否已完成

    以下示例列出了所有副本及其创建时间。创建辅助副本时,在 creation_complete 等于 TRUE 之前,辅助副本的数据不会完全与主要副本同步。

    SELECT
     catalog_name,
     schema_name,
     replica_name,
     creation_time AS creation_time,
    FROM
     `region-us`.INFORMATION_SCHEMA.SCHEMATA_REPLICAS
    WHERE
     creation_complete = TRUE;

    结果类似于以下内容:

    +---------------------+-------------+--------------+---------------------+
    |    catalog_name     | schema_name | replica_name |    creation_time    |
    +---------------------+-------------+--------------+---------------------+
    | myproject           | my_schema1  | us-east4     | 2023-06-15 00:09:11 |
    | myproject           | my_schema2  | us           | 2023-06-15 00:19:27 |
    | myproject           | my_schema2  | my_replica2  | 2023-06-15 00:19:50 |
    | myproject           | my_schema1  | my_replica   | 2023-06-15 00:16:19 |
    +---------------------+-------------+--------------+---------------------+
    

    示例:显示最近同步的时间

    以下示例显示了辅助副本与主要副本同步的最新时间戳。

    您必须在包含辅助副本的区域中运行此查询。数据集中的某些表可能早于报告的复制时间。

    SELECT
     catalog_name,
     schema_name,
     replica_name,
     -- Calculate the replication lag in seconds.
     TIMESTAMP_DIFF(CURRENT_TIMESTAMP(), replication_time, SECOND) AS replication_lag_seconds, -- RLS
     -- Calculate the replication lag in minutes.
     TIMESTAMP_DIFF(CURRENT_TIMESTAMP(), replication_time, MINUTE) AS replication_lag_minutes, -- RLM
     -- Show the last sync time for easier interpretation.
     replication_time AS secondary_replica_fully_synced_as_of_time,
    FROM
     `region-us`.INFORMATION_SCHEMA.SCHEMATA_REPLICAS

    结果类似于以下内容:

    +---------------------+-------------+--------------+-----+-----+-------------------------------------------+
    |    catalog_name     | schema_name | replica_name | rls | rlm | secondary_replica_fully_synced_as_of_time |
    +---------------------+-------------+--------------+-----+-----+-------------------------------------------+
    | myproject           | my_schema1  | us-east4     |  23 |   0 |                       2023-06-15 00:18:49 |
    | myproject           | my_schema2  | us           |  67 |   1 |                       2023-06-15 00:22:49 |
    | myproject           | my_schema1  | my_replica   |  11 |   0 |                       2023-06-15 00:28:49 |
    | myproject           | my_schema2  | my_replica2  | 125 |   2 |                       2023-06-15 00:29:20 |
    +---------------------+-------------+--------------+-----+-----+-------------------------------------------+
    

    NULL 表示辅助副本从未完全同步到主要副本。