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
视图。
预测存储空间结算
如需预测数据集的每月存储结算费用,您可以使用此视图中的 logical
或 physical *_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 |
TABLE_CATALOG |
STRING |
该数据集所属项目的项目 ID |
PROJECT_NUMBER |
INT64 |
该数据集所属项目的项目编号 |
TABLE_SCHEMA |
STRING |
包含表或具体化视图的数据集的名称,也称为 datasetId |
TABLE_NAME |
STRING |
表或具体化视图的名称,也称为 tableId |
CREATION_TIME |
TIMESTAMP |
表的创建时间 |
DELETED |
BOOLEAN |
指示表是否已删除 |
STORAGE_LAST_MODIFIED_TIME |
TIMESTAMP |
数据写入表的最近时间。 |
TOTAL_ROWS |
INT64 |
表或具体化视图中的总行数 |
TOTAL_PARTITIONS |
INT64 |
表或具体化视图中存在的分区数量。未分区表会返回 0。 |
TOTAL_LOGICAL_BYTES |
INT64 |
表或具体化视图中的逻辑(非压缩)字节总数 |
ACTIVE_LOGICAL_BYTES |
INT64 |
存在时间不超过 90 天的逻辑(非压缩)字节数 |
LONG_TERM_LOGICAL_BYTES |
INT64 |
存在时间超过 90 天的逻辑(非压缩)字节数 |
TOTAL_PHYSICAL_BYTES |
INT64 |
用于存储的物理(压缩)字节总数,包括活跃、长期和时间旅行(已删除或已更改的数据)字节数 |
ACTIVE_PHYSICAL_BYTES |
INT64 |
存在时间短于 90 天的物理(压缩)字节数,包括时间旅行(删除或更改的数据)字节 |
LONG_TERM_PHYSICAL_BYTES |
INT64 |
存在时间超过 90 天的物理(非压缩)字节数 |
TIME_TRAVEL_PHYSICAL_BYTES |
INT64 |
时间旅行存储(删除或更改的数据)使用的物理(非压缩)字节数 |
FAIL_SAFE_PHYSICAL_BYTES |
INT64 |
故障安全存储(删除或更改的数据)使用的物理(非压缩)字节数 |
TABLE_TYPE |
STRING |
表的类型。 例如,“EXTERNAL”或“BASE TABLE” |
范围和语法
针对此视图的查询必须包含区域限定符。下表说明了此视图的区域范围:
视图名称 | 资源范围 | 区域范围 |
---|---|---|
[`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
区域。如果您要针对其他区域运行此查询,请相应更新价格变量。如需了解价格信息,请参阅存储价格。
在 Google Cloud 控制台中打开 BigQuery 页面。
在查询编辑器框中输入以下 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 > 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;
点击运行。
结果如下所示:
+--------------+--------------------+-----------------------+---------------------+------------------------+--------------------------+-----------------------------+------------------------------+----------------------------------+-------------------------------+----------------------------------+--------------------------------+ | 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 |