TABLE_STORAGE 视图

INFORMATION_SCHEMA.TABLE_STORAGE 视图提供表和具体化视图的存储空间用量的当前快照。查询 INFORMATION_SCHEMA.TABLE_STORAGE 视图时,查询结果包含当前项目的每个表或物化视图对应的一行。INFORMATION_SCHEMA.TABLE_STORAGE 视图中的数据并非实时保存,更新通常会延迟几秒钟到几分钟。仅由分区或表到期引起的存储更改,或由对数据集时间旅行窗口修改引起的存储更改,最长可能需要一天才会在 INFORMATION_SCHEMA.TABLE_STORAGE 视图中反映。

表存储视图为您提供一种便捷的方法来观察当前存储空间消耗情况,并且还提供了有关存储空间是使用逻辑未压缩字节、物理压缩字节还是时间旅行字节的详细信息。这些信息可以帮助您完成规划未来发展和了解表的更新模式等任务。

*_BYTES 列中包含的数据

表存储视图中的 *_BYTES 列包含您的存储空间用量(以字节计)的相关信息。此信息根据具体化视图及以下类型的表的存储空间用量来确定:

  • 通过创建和使用表中所述的任何方法创建的永久表。
  • 通过会话创建的临时表。系统会将这些表放入具有生成名称(如“_c018003e063d09570001ef33ae401fad6ab92a6a”)的数据集中。
  • 多语句查询(“脚本”)中创建的临时表。系统会将这些表放入具有生成名称(如“_script72280c173c88442c3a7200183a50eeeaa4073719”)的数据集中。

查询结果缓存中存储的数据不会产生费用,因此不会计入 *_BYTES 列的值。

克隆和快照会显示 *_BYTES 列值,就像它们是完整的表一样,而不是显示基表所占用存储空间的增量,因此这些值是过高的估计值。您的账单会正确反映存储空间用量的增量。 如需详细了解克隆和快照存储和计费的增量字节数,请参阅 TABLE_STORAGE_USAGE_TIMELINE 视图

预测存储空间结算

如需预测数据集的每月存储结算费用,您可以使用此视图中的 logicalphysical *_BYTES 列,具体取决于数据集使用的数据集存储计费模型。请注意,这只是粗略的预测值,确切的结算金额根据 BigQuery 存储结算基础架构的使用情况并在 Cloud Billing 中显示计算得出。

对于使用逻辑结算模式的数据集,您可以按如下方式预测未来的每月存储费用:

((ACTIVE_LOGICAL_BYTES 值 / POW(1024, 3)) * 活跃逻辑字节价格) + ((LONG_TERM_LOGICAL_BYTES 值 / POW(1024, 3)) * 长期逻辑字节价格)

表的 ACTIVE_LOGICAL_BYTES 值反映了该表当前使用的活跃字节数。

对于使用物理计费模型的数据集,您可以按如下方式预测存储费用:

((ACTIVE_PHYSICAL_BYTES + FAIL_SAFE_PHYSICAL_BYTES 值 / POW(1024, 3)) * 活跃物理字节价格) + ((LONG_TERM_PHYSICAL_BYTES 值 / POW(1024, 3)) * 长期物理字节价格)

表的 ACTIVE_PHYSICAL_BYTES 值反映了该表当前使用的活跃字节数,加上该表用于时间旅行的字节数。

如需单独查看表的活跃字节数,请从 ACTIVE_PHYSICAL_BYTES 值中减去 TIME_TRAVEL_PHYSICAL_BYTES 值。

如需了解详情,请参阅存储价格

所需的角色

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

此预定义角色可提供查询 INFORMATION_SCHEMA.TABLE_STORAGE 视图所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

查询 INFORMATION_SCHEMA.TABLE_STORAGE 视图需要以下权限:

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

您也可以使用自定义角色或其他预定义角色来获取这些权限。

架构

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

列名 数据类型
PROJECT_ID STRING 该数据集所属项目的项目 ID。
PROJECT_NUMBER INT64 该数据集所属项目的项目编号。
TABLE_CATALOG STRING 该数据集所属项目的项目 ID。
TABLE_SCHEMA STRING 包含表或物化视图的数据集的名称,也称为 datasetId
TABLE_NAME STRING 表或物化视图的名称,也称为 tableId
CREATION_TIME TIMESTAMP 表的创建时间。
TOTAL_ROWS INT64 表或物化视图中的总行数。
TOTAL_PARTITIONS INT64 表或具体化视图中存在的分区数量。未分区表会返回 0。
TOTAL_LOGICAL_BYTES INT64 表或物化视图中的逻辑(非压缩)字节总数。
ACTIVE_LOGICAL_BYTES INT64 存在时间不超过 90 天的逻辑(非压缩)字节数。
LONG_TERM_LOGICAL_BYTES INT64 存在时间超过 90 天的逻辑(非压缩)字节数。
CURRENT_PHYSICAL_BYTES INT64 所有分区中当前用于表存储的物理字节总数。
TOTAL_PHYSICAL_BYTES INT64 用于存储的物理(压缩)字节总数,包括活跃、长期和时间旅行(已删除或已更改的数据)字节数。不包括故障安全(在时间旅行窗口后保留的已删除或已更改数据)字节数。
ACTIVE_PHYSICAL_BYTES INT64 存在时间短于 90 天的物理(压缩)字节数,包括时间旅行(已删除或已更改的数据)字节数。
LONG_TERM_PHYSICAL_BYTES INT64 存在时间超过 90 天的物理(压缩)字节数。
TIME_TRAVEL_PHYSICAL_BYTES INT64 时间旅行存储(已删除或已更改的数据)使用的物理(压缩)字节数。
STORAGE_LAST_MODIFIED_TIME TIMESTAMP 数据最近一次写入表的时间。
DELETED BOOLEAN 指示表是否已删除。
TABLE_TYPE STRING 表的类型。 例如 EXTERNALBASE TABLE
FAIL_SAFE_PHYSICAL_BYTES INT64 故障安全存储(已删除或已更改的数据)使用的物理(压缩)字节数。
LAST_METADATA_INDEX_REFRESH_TIME TIMESTAMP 表的上次元数据索引刷新时间。

范围和语法

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

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

  • 可选:PROJECT_ID:您的 Google Cloud 项目的 ID。如果未指定,则使用默认项目。
+ REGION:任何数据集区域名称。 例如 region-us

以下示例演示了如何返回指定项目中的表的存储信息:

SELECT * FROM `myProject`.`region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE;

以下示例演示了如何返回指定区域中的表的存储信息:

SELECT * FROM `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_PROJECT;

示例

示例 1:

以下示例显示了当前项目需付费的逻辑总字节数。

SELECT
  SUM(total_logical_bytes) AS total_logical_bytes
FROM
  `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE;

结果类似于以下内容:

+---------------------+
| total_logical_bytes |
+---------------------+
| 971329178274633     |
+---------------------+
示例 2:

以下示例展示了如何预测未来 30 天内每个数据集的逻辑结算模型和物理结算模型之间的价格差异。此示例假定在未来的 30 天内(自运行查询之时起),存储空间用量保持不变。请注意,预测仅限于基表,不包括数据集中的所有其他类型的表。

此查询的价格变量中使用的价格适用于 us-central1 区域。如果您要针对其他区域运行此查询,请相应更新价格变量。如需了解价格信息,请参阅存储价格

  1. 在 Google Cloud 控制台中打开 BigQuery 页面。

    转到 BigQuery 页面

  2. 查询编辑器框中输入以下 GoogleSQL 查询。 INFORMATION_SCHEMA 要求使用 GoogleSQL 语法。GoogleSQL 是 Google Cloud 控制台中的默认语法。

    DECLARE active_logical_gib_price FLOAT64 DEFAULT 0.02;
    DECLARE long_term_logical_gib_price FLOAT64 DEFAULT 0.01;
    DECLARE active_physical_gib_price FLOAT64 DEFAULT 0.04;
    DECLARE long_term_physical_gib_price FLOAT64 DEFAULT 0.02;
    
    WITH
     storage_sizes AS (
       SELECT
         table_schema AS dataset_name,
         -- Logical
         SUM(IF(deleted=false, active_logical_bytes, 0)) / power(1024, 3) AS active_logical_gib,
         SUM(IF(deleted=false, long_term_logical_bytes, 0)) / power(1024, 3) AS long_term_logical_gib,
         -- Physical
         SUM(active_physical_bytes) / power(1024, 3) AS active_physical_gib,
         SUM(active_physical_bytes - time_travel_physical_bytes) / power(1024, 3) AS active_no_tt_physical_gib,
         SUM(long_term_physical_bytes) / power(1024, 3) AS long_term_physical_gib,
         -- Restorable previously deleted physical
         SUM(time_travel_physical_bytes) / power(1024, 3) AS time_travel_physical_gib,
         SUM(fail_safe_physical_bytes) / power(1024, 3) AS fail_safe_physical_gib,
       FROM
         `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_PROJECT
       WHERE total_physical_bytes + fail_safe_physical_bytes > 0
         -- Base the forecast on base tables only for highest precision results
         AND table_type  = 'BASE TABLE'
         GROUP BY 1
     )
    SELECT
      dataset_name,
      -- Logical
      ROUND(active_logical_gib, 2) AS active_logical_gib,
      ROUND(long_term_logical_gib, 2) AS long_term_logical_gib,
      -- Physical
      ROUND(active_physical_gib, 2) AS active_physical_gib,
      ROUND(long_term_physical_gib, 2) AS long_term_physical_gib,
      ROUND(time_travel_physical_gib, 2) AS time_travel_physical_gib,
      ROUND(fail_safe_physical_gib, 2) AS fail_safe_physical_gib,
      -- Compression ratio
      ROUND(SAFE_DIVIDE(active_logical_gib, active_no_tt_physical_gib), 2) AS active_compression_ratio,
      ROUND(SAFE_DIVIDE(long_term_logical_gib, long_term_physical_gib), 2) AS long_term_compression_ratio,
      -- Forecast costs logical
      ROUND(active_logical_gib * active_logical_gib_price, 2) AS forecast_active_logical_cost,
      ROUND(long_term_logical_gib * long_term_logical_gib_price, 2) AS forecast_long_term_logical_cost,
      -- Forecast costs physical
      ROUND((active_no_tt_physical_gib + time_travel_physical_gib + fail_safe_physical_gib) * active_physical_gib_price, 2) AS forecast_active_physical_cost,
      ROUND(long_term_physical_gib * long_term_physical_gib_price, 2) AS forecast_long_term_physical_cost,
      -- Forecast costs total
      ROUND(((active_logical_gib * active_logical_gib_price) + (long_term_logical_gib * long_term_logical_gib_price)) -
         (((active_no_tt_physical_gib + time_travel_physical_gib + fail_safe_physical_gib) * active_physical_gib_price) + (long_term_physical_gib * long_term_physical_gib_price)), 2) AS forecast_total_cost_difference
    FROM
      storage_sizes
    ORDER BY
      (forecast_active_logical_cost + forecast_active_physical_cost) DESC;
  3. 点击运行

结果如下所示:

+--------------+--------------------+-----------------------+---------------------+------------------------+--------------------------+-----------------------------+------------------------------+----------------------------------+-------------------------------+----------------------------------+--------------------------------+
| dataset_name | active_logical_gib | long_term_logical_gib | active_physical_gib | long_term_physical_gib | active_compression_ratio | long_term_compression_ratio | forecast_active_logical_cost | forecaset_long_term_logical_cost | forecast_active_physical_cost | forecast_long_term_physical_cost | forecast_total_cost_difference |
+--------------+--------------------+-----------------------+---------------------+------------------------+--------------------------+-----------------------------+------------------------------+----------------------------------+-------------------------------+----------------------------------+--------------------------------+
| dataset1     |               10.0 |                  10.0 |                 1.0 |                    1.0 |                     10.0 |                        10.0 |                          0.2 |                              0.1 |                          0.04 |                             0.02 |                           0.24 |