这篇文章有些内容是概念上的厘清,有些是实践中获得的知识。相信看完这篇文章,你会对大数据领域常说的“模型”有了一定的体感
先说大数据中模型的概念,所谓模型,应该是现实事件的映射方式。但这么说又太过笼统,在数仓建设过程中,事实表与维度表之间的关系就是一种模型。说到这里,你可能开始困惑,什么是事实表和维度表呢?所以先介绍第一部分。
事实表和维度表
直接上例子。以汽车行业数据库表为例,大家可能认为下面是一张记录客户购买了什么车的统计表。但事实上,大的车企每天都有几千个订单,每年百万级别的订单(事实上如果只使用一张表,字段会更长),如果所有订单信息以下面在这种状态存储,在进行分析及修改等操作时效率会比较低。另外各个系统中如果不去进行维度的统一,最后会导致数据越来越难进行清洗分析,各个系统之间将会有很深的壁垒....
所以我们有必要将上面表格进行拆解。经过分析,可以看到此表至少可由四部分组成:明细表、经销商维度表、地区维度表、车型维度表、客户维度表
具体拆解如下:将上面一张表拆分出了一张明细表和四种维度。明细表对比上面的表格,把大量汉字替换成了数字/编码,这将对表格大小有大量的缩减。
当其中维度信息有修改时,比如修改了经销商名称,也只需要变更经销商维度表中一条记录即可,而明细表不用进行修改。
通过以上例子,我们对维度表就有了一些体感。因此,对维度表和事实表的定义如下:
事实表:表格中存储了能体现实际数据或事实,一般会由维度编码和事实数据组成。上图中明细表就是一张事实表。可能会有些人问,我在上面事实表中没看到数据呀?其实这样的明细表一条数就代表了一个订单,数量就是1,后续用来统计每日订单,只要进行sum操作就可以获得订单数了
维度表:表格中存放的有独立的层次和属性的数据。一般由维度编码和对应的维度名称组成
数据模型
了解了事实表和维度表后,终于可以介绍数据模型了。常见的数据模型有3种:星形、雪花形和星系形。这个很多文章中都有介绍,这里只简单总结下。
星形:类似下图,事实表和维度表通过主键外键关联,是最简单的模型
雪花形:类似下图,维度表不直接连接在事实表上,而是通过其他维度表进行来连接。这是星形的扩展,每个维度表又可以当成小的事实表。
星系模型:简单的说就是各种事实表之间共享维度。
至此,我们应该弄明白了事实表和维度表的概念。但其中出现的几个名词又让人心生困惑,“属性”是什么意思?下一篇将说明这个。
大家有什么问题欢迎留言一起讨论