PARTITIONS 视图

INFORMATION_SCHEMA.PARTITIONS 视图包含每个分区对应的一行。

查询 INFORMATION_SCHEMA.PARTITIONS 视图的上限为 1,000 个表。如需获取项目级分区的数据,您可以将查询拆分为多个查询,然后联接结果。如果超出此限制,您可能会遇到类似于以下内容的错误:

INFORMATION_SCHEMA.PARTITIONS query attempted to read too many tables. Please add more restrictive filters.

所需权限

如需查询 INFORMATION_SCHEMA.PARTITIONS 视图,您需要拥有以下 Identity and Access Management (IAM) 权限:

  • bigquery.tables.get
  • bigquery.tables.getData
  • bigquery.tables.list

以下每个预定义的 IAM 角色均可提供上述权限:

  • roles/bigquery.admin
  • roles/bigquery.dataEditor
  • roles/bigquery.dataViewer

如需详细了解 BigQuery 权限,请参阅使用 IAM 进行访问权限控制

架构

当您查询 INFORMATION_SCHEMA.PARTITIONS 视图时,每个分区通常都会有一行对应的查询结果。唯一的例外情况是,__UNPARTITIONED__ 分区中同时包含长期存储层数据和活跃存储层数据。在这种情况下,该视图会为 __UNPARTITIONED__ 分区返回两行,每种存储层对应一行。

INFORMATION_SCHEMA.PARTITIONS 视图具有如下架构:

列名 数据类型
TABLE_CATALOG STRING 包含表的项目的项目 ID
TABLE_SCHEMA STRING 包含表的数据集的名称,也称为 datasetId
TABLE_NAME STRING 表的名称,也称为 tableId
PARTITION_ID STRING 单个分区的 ID。对于未分区的表,该值为 NULL。如果分区表包含在分区列中具有 NULL 值的行,则值为 __NULL__
TOTAL_ROWS INTEGER 分区中的总行数
TOTAL_LOGICAL_BYTES INTEGER 分区中的逻辑字节总数
LAST_MODIFIED_TIME TIMESTAMP 最近将数据写入分区的时间
STORAGE_TIER STRING 分区的存储层级:

范围和语法

针对此视图的查询必须包括数据集限定符。对于包含数据集限定符的查询,您必须拥有数据集的权限。如需了解详情,请参阅语法。下表说明了此视图的区域和资源范围:

视图名称 资源范围 区域范围
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.PARTITIONS 数据集级 数据集位置
请替换以下内容:

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

    • DATASET_ID:您的数据集的 ID。如需了解详情,请参阅数据集限定符

    示例

    示例 1

    以下示例计算了名为 mydataset 的数据集中所有表的每个存储层使用的逻辑字节数:

    SELECT
      storage_tier,
      SUM(total_logical_bytes) AS logical_bytes
    FROM
      `mydataset.INFORMATION_SCHEMA.PARTITIONS`
    GROUP BY
      storage_tier;

    结果类似于以下内容:

    +--------------+----------------+
    | storage_tier | logical_bytes  |
    +--------------+----------------+
    | LONG_TERM    |  1311495144879 |
    | ACTIVE       |    66757629240 |
    +--------------+----------------+
    

    示例 2

    以下示例会创建一个列,用于从 partition_id 字段中提取分区类型,并在表级别汇总公共 bigquery-public-data.covid19_usafacts 数据集的分区信息:

    SELECT
      table_name,
      CASE
        WHEN regexp_contains(partition_id, '^[0-9]{4}$') THEN 'YEAR'
        WHEN regexp_contains(partition_id, '^[0-9]{6}$') THEN 'MONTH'
        WHEN regexp_contains(partition_id, '^[0-9]{8}$') THEN 'DAY'
        WHEN regexp_contains(partition_id, '^[0-9]{10}$') THEN 'HOUR'
        END AS partition_type,
      min(partition_id) AS earliest_partition,
      max(partition_id) AS latest_partition_id,
      COUNT(partition_id) AS partition_count,
      sum(total_logical_bytes) AS sum_total_logical_bytes,
      max(last_modified_time) AS max_last_updated_time
    FROM `bigquery-public-data.covid19_usafacts.INFORMATION_SCHEMA.PARTITIONS`
    GROUP BY 1, 2;

    结果类似于以下内容:

    +-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+
    | table_name      | partition_type | earliest_partition | latest_partition_id | partition_count | sum_total_logical_bytes | max_last_updated_time          |
    +--------------+-------------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+
    | confirmed_cases | DAY            | 20221204           | 20221213            | 10              | 26847302                | 2022-12-13 00:09:25.604000 UTC |
    | deaths          | DAY            | 20221204           | 20221213            | 10              | 26847302                | 2022-12-13 00:09:24.709000 UTC |
    | summary         | DAY            | 20221204           | 20221213            | 10              | 241285338               | 2022-12-13 00:09:27.496000 UTC |
    +-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+