1、数据库和数据仓库区别
数据库与数据仓库的区别实际讲的是OLTP与OLAP的区别。
联机事务处理OLTP(On-Line Transaction Processing)
传统数据库的增、删、改、查。
联机分析处理OLAP(On-Line Analytical Processing)
数据仓库的数据分析。
2、数仓建模的2套理论
范式建模和维度建模
范式建模是面向应用,遵循第三范式,以消除数据冗余为目标的设计技术。
3NF建模:
1)每个属性的值唯一,不具有多义性; 即数据不可分割
2) 每个非主属性必须完全依赖于整个主键,而非主键的一部分。一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来,即不能存在部分依赖
3)每个非主属性不能依赖于其他关系中的属性,因为这样的话,这种属性应该归到其他关系中去。即消除传递依赖.
维度建模是面向分析,为了提高查询性能可以增加数据冗余,反规范化的设计技术。
3、星型模型与雪花模型区别
星型模型:即由一个事实表和一组维度表组成,每个维表都有一个维度作为主键。事实表居中,多个维表呈辐射状分布在四周,并与事实表关联,形成一个星型结构
雪花模型:在星型模型的基础上,基于范式理论进一步层次化,将某些维表扩展成事实表,最终形成雪花状结构
星座模型:基于多个事实表,共享一些维度表
星型模型因为数据的冗余所以很多统计查询不需要做外部的连接,因此一般情况下星型模型效率比雪花型模型要高。
星型结构不用考虑很多正规化的因素,设计与实现都比较简单。
雪花模型由于去除了冗余,有些统计就需要通过表的联接才能产生,所以效率不一定有星型模型高,但是设计上比较规范。
正规化也是一种比较复杂的过程,相应的数据库结构设计、数据的 ETL、以及后期的维护都要复杂一些。
因此在冗余可以接受的前提下,实际运用中星型模型使用更多,也更有效率。
4、数仓分层
ODS(Operation Data Store)层:数据操作层,存储原始数据。
DWD层:数据明细层,是由ODS层进行数据清洗而来的,一般是通过 MR/hive + UDF对这一层的数据时行脏数据的清先,并且将非结构化数据变成结构化数据。
DWS层:数据汇总层,这里把DWD层的数据进行JOIN形成汇总的数据(轻度join),以便下一层进行统计,另外还可能涉及到写UDF做业务字段的转换。
DWS层会形成宽表(带有数据冗余,字段多,维度多)
如果在这层直接出指标,会查询多余的数据。
ADS(Application Data Service)层:数据应用层,用于存储应用的数据。
为了能快速出报表,可以在ADS层搞个DM(数据集市)
DM(数据集市):
以某个应用为出发点而建设的局部DW,在这里可以理解为 为分析指标建设跟指标相关的数据集合。
5、数仓分层的好处
清晰数据结构、数据来源追踪、减少重复开发、把复杂问题简单化等。
6、数仓数据来源有哪些?
业务库数据源:mysql,oracle,mongo
日志数据:nginx日志,埋点日志
爬虫数据
7、全量表,增量表及拉链表的理解
全量表: 每天的所有的最新状态的数据。
1、全量表,有无变化,都要报
2、每次上报的数据都是所有的数据(变化的 + 没有变化的)
增量表:新增数据,增量数据是上次导出之后的新数据。
1、记录每次增加的量,而不是总量;
2、增量表,只报变化量,无变化不用报
3、业务库表中需有主键及创建时间,修改时间
拉链表:维护历史状态,以及最新状态数据
适用情况:
1.数据量比较大
2.表中的部分字段会被更新
3.需要查看某一个时间点或者时间段的历史快照信息
查看某一个订单在历史某一个时间点的状态
某一个用户在过去某一段时间,下单次数
4.更新的比例和频率不是很大
如果表中信息变化不是很大,每天都保留一份全量,那么每次全量中会保存很多不变的信息,对存储是极大的浪费
优点
1、满足反应数据的历史状态
2、最大程度节省存储
原文:https://www.cnblogs.com/maiyoums/p/14402633.html