Redshift基于Glue(S3)数据创建物化视图的性能最优方案咨询
基于Glue(S3数据源)的物化视图方案性能对比
三种方案说明
选项1
CREATE MATERIALIZED VIEW VVV AS (SELECT day, ... FROM A GROUP BY day) JOIN (SELECT day, ... FROM B GROUP BY day) ON A.day = B.day JOIN (SELECT day, ... FROM C GROUP BY day) ON B.day = C.day
查询时直接从VVV读取结果。
选项2
CREATE MATERIALIZED VIEW V1 AS SELECT day, ... FROM A GROUP BY day; CREATE MATERIALIZED VIEW V2 AS SELECT day, ... FROM B GROUP BY day; CREATE MATERIALIZED VIEW V3 AS SELECT day, ... FROM C GROUP BY day;
查询时执行SELECT * FROM V1 JOIN V2 ON V1.day = V2.day JOIN V3 ON V2.day = V3.day。
选项3
CREATE MATERIALIZED VIEW V1 AS SELECT * FROM A; CREATE MATERIALIZED VIEW V2 AS SELECT * FROM B; CREATE MATERIALIZED VIEW V3 AS SELECT * FROM C;
查询时执行SELECT ... FROM (SELECT day, ... FROM V1 GROUP BY day) JOIN (...) ON ... JOIN (...) ON ...。
性能最优方案:选项2
各方案优劣分析
选项3(性能最差):
物化视图存储原表全量数据,查询时需要实时对百万级数据做按日聚合,再执行关联操作。聚合和关联的计算量极大,IO开销高,完全没发挥物化视图预计算的优势,直接排除。选项1:
预计算了所有聚合和关联逻辑,查询时直接读最终结果,IO开销最小。但缺点明显:- 刷新成本极高:只要A/B/C任意一个表的日数据更新,整个物化视图需要重新执行三次聚合+两次关联的全量计算,百万级数据下刷新耗时久、资源占用大。
- 维护灵活性差:如果后续要调整单个表的聚合逻辑,必须重建整个大视图,成本很高。
选项2(最优选择):
- 查询性能接近选项1:每个物化视图仅存储对应表的日聚合结果,数据量大幅压缩(百万级原表按日聚合后通常仅数百条数据),关联三个小表的计算量可忽略,查询速度几乎和直接读预关联结果的选项1持平。
- 刷新成本低:单个表数据更新时,仅需刷新对应的聚合视图,无需重新计算其他表的聚合和关联逻辑,资源占用小、刷新速度快。
- 维护灵活:调整某张表的聚合规则时,只需重建单个物化视图即可,不影响其他视图的使用。
结合Glue和S3的特性,选项2在查询性能、维护成本、灵活性上达到最优平衡,是百万级表场景下的最佳选择。
内容的提问来源于stack exchange,提问作者IT All
相关产品推荐
相关产品推荐

