如何获取7天前表的记录数、大小等历史元数据信息
获取7天前表记录数与大小的可行方案
方法1:用时间旅行直接统计(高效快捷)
虽然information_schema.tables不支持时间旅行,但可以直接对目标表使用时间旅行语法,借助聚合函数快速计算记录数,再通过$ROW_SIZE估算表存储大小:
-- 计算7天前的记录数 SELECT COUNT(*) AS record_count FROM your_table_name AT(OFFSET => -604800); -- 7*24*60*60=604800秒 -- 估算7天前的表大小(字节) SELECT COUNT(*) * AVG($ROW_SIZE) AS table_size_bytes FROM your_table_name AT(OFFSET => -604800);
这种方式无需全表扫描,Snowflake会利用微分区统计信息加速计算,比直接遍历表数据更高效。
方法2:提前构建元数据快照表(适合频繁查询历史数据)
如果需要多次查询历史元数据,建议每天定时将information_schema.tables的关键数据快照到自定义表中:
-- 初始化快照表 CREATE TABLE table_metadata_history ( snapshot_dt DATE, schema_name VARCHAR, table_name VARCHAR, row_count NUMBER, total_size_bytes NUMBER ); -- 每日执行的快照插入脚本 INSERT INTO table_metadata_history SELECT CURRENT_DATE(), table_schema, table_name, table_rows, data_length + index_length FROM information_schema.tables WHERE table_schema = 'your_target_schema' AND table_name = 'your_target_table';
后续查询7天前的数据只需直接查快照表:
SELECT row_count, total_size_bytes FROM table_metadata_history WHERE snapshot_dt = DATEADD(DAY, -7, CURRENT_DATE()) AND table_name = 'your_target_table';
方法3:利用Snowflake的ACCOUNT_USAGE视图(精准存储数据)
Snowflake的ACCOUNT_USAGE.TABLE_STORAGE_METRICS视图会保留最多1年的表存储历史数据,可直接获取7天前的存储大小,搭配时间旅行的记录数查询即可:
-- 获取7天前的表存储大小 SELECT storage_bytes AS table_size_bytes FROM account_usage.table_storage_metrics WHERE table_name = 'your_target_table' AND date = DATEADD(DAY, -7, CURRENT_DATE());
内容的提问来源于stack exchange,提问作者Koushik Roy
相关产品推荐
相关产品推荐

