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