如何查询BigQuery各数据表的历史存储大小以开展成本管控?
BigQuery 历史表存储大小获取方案
你尝试的两种方法不可行的核心原因是__Tables__属于BigQuery内置的元数据虚拟视图,仅返回实时聚合的表元数据,本身没有持久化的历史快照,因此既不支持快照复制操作,也不支持时间穿越语法。
以下是经过验证的可行方案:
- 方案1:使用官方内置存储历史视图(优先选择)
BigQuery 内置的INFORMATION_SCHEMA.TABLE_STORAGE_USAGE_HISTORY视图按天聚合了所有表的存储用量数据,默认保留180天的统计结果,完全适配存储成本回溯需求,示例查询语句如下:
使用时替换语句中的区域参数即可直接得到每日各表的存储大小变动情况。注意:该视图仅保留最近180天的统计数据,如果需要查询超过180天的历史数据,需提前配置自定义的元数据落库任务,此前未配置的场景下无法回溯超期数据。SELECT table_id, DATE(usage_start_time) AS usage_date, total_logical_bytes / POWER(1024,3) AS total_storage_gb, active_logical_bytes / POWER(1024,3) AS active_storage_gb, long_term_logical_bytes / POWER(1024,3) AS long_term_storage_gb FROM `region-你的数据集所在区域`.INFORMATION_SCHEMA.TABLE_STORAGE_USAGE_HISTORY WHERE usage_start_time BETWEEN "2021-08-01" AND "2021-09-01" ORDER BY usage_date DESC, total_storage_gb DESC - 方案2:少量表指定时间点查询
如果仅需要查询少数目标表指定时间点的存储大小,可直接对目标表使用时间旅行功能查询,支持查询表的时间旅行窗口内的数据(默认7天,最长可配置为49天),bq命令行示例如下:bq show --format=json 项目ID.数据集ID.表名@1630422245000 | jq '.numBytes' - 方案3:长期存储用量留存方案
若后续需要长期留存存储用量数据用于成本分析,可配置每日定时任务,将__Tables__的查询结果写入自定义的持久化表中长期存储,后续回溯时直接查询该自定义表即可,无时间限制。
内容的提问来源于stack exchange,提问作者Belkachait08
相关产品推荐
相关产品推荐

