「PARTITIONS」檢視畫面

INFORMATION_SCHEMA.PARTITIONS 檢視表中,每個分區都會自成一列。

您最多只能查詢 1000 個 INFORMATION_SCHEMA.PARTITIONS 檢視畫面。如要取得專案層級的分區資料,您可以將查詢拆分為多個查詢,然後彙整結果。如果超過上限,您可能會遇到類似下列的錯誤:

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

所需權限

如要查詢 INFORMATION_SCHEMA.PARTITIONS 檢視畫面,您必須具備下列身分與存取權管理 (IAM) 權限:

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

下列每個預先定義的 IAM 角色都包含上述權限:

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

如要進一步瞭解 BigQuery 權限,請參閱「使用身分與存取權管理功能控管存取權」。

結構定義

查詢 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 資料最近一次寫入分區的時間。用於計算分區是否符合長期儲存空間的資格。90 天後,分割區會自動從動態儲存空間轉換為長期儲存空間。詳情請參閱 BigQuery 儲存空間定價。當資料在分區內插入、載入、串流或修改時,這個欄位就會更新。涉及刪除記錄的修改可能不會反映。
STORAGE_TIER STRING 分區的儲存空間層級:
  • ACTIVE:分區會以「活動儲存空間」計費
  • LONG_TERM:分區會以長期儲存空間計費

範圍和語法

對這個檢視表執行的查詢必須包含資料集限定詞。如果查詢含有資料集限定條件,您必須具備該資料集的權限。詳情請參閱「語法」。下表說明這個檢視畫面的區域和資源範圍:

檢視表名稱 資源範圍 區域範圍
[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 |
+-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+