在数据仓库建模领域中,有两大主流建模思想,ER建模和维度建模(当然还有datavault、anchor等等)。
ER建模的核心思想是从全企业的高度去设计三范式模型,用实体关系模型描述企业业务。出发点是整合各系统数据,为数据分析决策服务,但不直接用于分析决策。
维度建模是从分析决策的需求出发构建模型,重点关注如何快速完成需求分析。典型代表是星形模型,以及一些特殊场景下使用雪花模型。
光从三范式模型和星形模型的区别其实就可以看出,更适合hive的就是星形模型。
hive一般使用的引擎就是mapreduce,mapreduce的设计初衷是海里数据的批量处理,在复杂的联表查询方面,反而可能比不上传统数据库,尤其是mpp架构的传统数据库。三范式模型势必会存在很多分散的表,在做数据分析或者报表加工的时候就必须要多表连接,大大降低了使用效率。
当然使用hive做为数据仓库时,也不能完全遵从维度建模的思想。大家得在维度建模思想上适当做一些改进。
比如大家可以使用星形模型完全替代雪花模型,雪花模型除了节约一部分存储外,在hive中没有其他优势。
同时大家在星形模型的事实表中可以冗余更多常用的维度信息,摒弃代理键使用快照方式处理缓慢变化维等。
因为目前阶段,hdfs的存储成本是明显低于计算资源成本,大家可以采取用空间换时间的策略,从而提升下游使用的易用性和使用性能的提升。
所以说,维度建模是适合hive的。