Redshift表大小查询:按指定日期范围获取特定表的大小(MB)
Redshift 查询特定日期范围内数据的大小(MB单位)
场景1:按日期分区的表
如果你的表是按日期字段分区的,可以直接通过系统表svv_table_partitions获取对应分区的存储大小,转换为MB单位:
查询各分区大小
SELECT tablename, partition, ROUND(size / 1024.0 / 1024.0, 2) AS size_mb FROM svv_table_partitions WHERE schemaname = 'your_schema_name' AND tablename = 'your_table_name' -- 将分区字符串转换为日期,匹配输入的DD-MM-YYYY格式 AND to_date(partition, 'DD-MM-YYYY') BETWEEN to_date('25-07-2021', 'DD-MM-YYYY') AND to_date('24-09-2022', 'DD-MM-YYYY') ORDER BY partition;
查询总大小(汇总所有符合条件的分区)
SELECT tablename, ROUND(SUM(size) / 1024.0 / 1024.0, 2) AS total_size_mb FROM svv_table_partitions WHERE schemaname = 'your_schema_name' AND tablename = 'your_table_name' AND to_date(partition, 'DD-MM-YYYY') BETWEEN to_date('25-07-2021', 'DD-MM-YYYY') AND to_date('24-09-2022', 'DD-MM-YYYY') GROUP BY tablename;
场景2:非分区表
非分区表没有单独的分区大小记录,需要通过估算来计算特定日期范围内数据的大小:
WITH table_overview AS ( -- 获取整个表的总大小和总行数 SELECT pg_total_relation_size('your_schema_name.your_table_name') AS total_bytes, COUNT(*) AS total_rows FROM your_schema_name.your_table_name ), filtered_data AS ( -- 获取符合日期条件的行数 SELECT COUNT(*) AS filtered_row_count FROM your_schema_name.your_table_name WHERE your_date_column BETWEEN to_date('25-07-2021', 'DD-MM-YYYY') AND to_date('24-09-2022', 'DD-MM-YYYY') ) -- 基于平均行大小估算目标数据的大小 SELECT ROUND((total_bytes * filtered_row_count)::FLOAT / total_rows / 1024 / 1024, 2) AS estimated_size_mb FROM table_overview, filtered_data;
注意事项
- 替换
your_schema_name、your_table_name和your_date_column为你实际的 schema、表名和日期字段名 - 非分区表的结果为估算值,因为每行数据的存储大小可能存在差异
- 访问
svv_table_partitions需要相应的系统权限,确保你的账号有权限查询该表 - 日期转换时,
to_date的第二个参数必须和输入的日期字符串格式严格匹配(这里是DD-MM-YYYY)
内容的提问来源于stack exchange,提问作者Ritwick Pandey
相关产品推荐
相关产品推荐

