如何查询Time Travel实际存储数据量及表的可用时间回溯深度
Snowflake Time Travel 相关问题解答
1. Time Travel 实际存储的数据量
Time Travel占用的存储是表所有未过期的历史版本数据总和,不会和当前活跃表的存储重复计量,包含两类内容:
- DML操作(增删改、合并等)产生的旧数据版本
- 表结构变更、数据重集群等操作产生的历史元数据和对应数据版本
你可以通过以下SQL查询指定表的Time Travel实际存储用量:
SELECT TABLE_NAME, TIME_TRAVEL_BYTES, ROUND(TIME_TRAVEL_BYTES / 1024 / 1024 / 1024, 2) AS TIME_TRAVEL_GB FROM INFORMATION_SCHEMA.TABLE_STORAGE_METRICS WHERE TABLE_CATALOG = '你的数据库名' AND TABLE_SCHEMA = '你的Schema名' AND TABLE_NAME = '你的表名';
返回的TIME_TRAVEL_BYTES就是该表当前Time Travel实际占用的存储大小。
2. 单张表实际可用的Time Travel回溯范围查询
配置的保留天数是理论最大回溯上限,实际可回溯范围受表创建时间、历史数据清理进度影响,完全可以通过系统视图提前查询可用范围,避免查询报错。
查询最早可回溯时间点
执行以下SQL即可拿到指定表当前能回溯到的最早时间:
SELECT MIN(QUERY_START_TIME) AS earliest_time_travel_available FROM TABLE(INFORMATION_SCHEMA.TABLE_HISTORY( TABLE_NAME => '你的数据库名.你的Schema名.你的表名' ));
只要你要查询的时间点在earliest_time_travel_available到当前时间之间,就可以正常使用Time Travel功能,不会出现数据不存在的报错。
查询所有可用快照区间
如果需要确认特定时间点是否有有效快照,可以查询所有可用的快照时间区间:
SELECT MIN_CREATED_ON, MAX_CREATED_ON FROM TABLE(INFORMATION_SCHEMA.TABLE_HISTORY( TABLE_NAME => '你的数据库名.你的Schema名.你的表名' )) ORDER BY MIN_CREATED_ON ASC;
内容的提问来源于stack exchange,提问作者patrick_at_snowflake
相关产品推荐
相关产品推荐

