PARTITIONS 视图

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

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

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 视图时,每个分区都会有一行对应的查询结果。

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 |
+-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+