赞
踩
因作者近期正在投递数据开发岗位,所以会在此记录一些面试过程中的问题,持续更新,直到入职新公司为止
所谓的范式,就是我们在关系建模的时候所遵从的一些规范,而三范式,指的就是三条规范
优点:
缺点:
第一范式1NF核心原则就是:属性不可切。
这里所谓的属性,就是我们表中的字段,字段内容是不可切的,字段必须是原子性的,我们举个例子。
上面这张图就不符合第一范式,因为商品字段仍然可以进行切分,可以将【2台电脑】放在两个字段里存储
这个时候,就会说已经满足了第一范式(1NF)
第二范式2NF核心原则就是:不能存在部分依赖
在下面这个例子里,就不符合第二范式,因为【订单号】和【商品ID】作为联合主键,【实付金额】字段会由【订单号】和【商品ID】共同确定,但【订单下单日期】却和【商品ID】字段没有关系,由【订单号】字段就能确定,所以【订单下单日期】就存在部份依赖,这时候就不符合第二范式
而处理的方法也很简单,只需要在当前表里去掉【订单下单日期】,新建一张表,存放【订单号】和【订单下单日期】就可以了,在使用的时候,可以通过【订单号】进行关联
第三范式3NF核心原则:不能存在传递依赖
在下面这个例子里,就不符合第三范式,可以看到【订单下单时间】是【订单号】的时间属性,【店铺ID】也是可以直接通过【订单号】查询得到,但【店铺所在地区】却不是通过【订单号】直接获取,而是由【店铺ID】获得的,所以这里就存在传递依赖,因此不符合第三范式
解决方式也很简单,拆成两张表就可以了
其实这3个规范条件,说白了就是在确定表里的主键,定好唯一维度,表里也不存其他的信息,字段都是和主键直接有关的内容,也正是因为这样,所以会需要很多张表,才能满足复杂的业务需求
说白了,就是客户端、NAMENODE、DATANODE三者之间的联动,里面涉及的通信手段过于专业了
一般分为4层,
1.贴源层 ODS:数据与业务系统保持一致
2.明细层 DWD:数据明细层对ods层进行数据清洗, 标准化,数据仍满足3NF模型(三范式),为分析运算做准备
3.数据汇总层 DWS:按照分析主题进行汇总,存储类型非3NF,注重数据聚合,复杂查询,处理性能更优的数仓模型,如维度模型。
4.数据应用层 ADS :用来存储查询结果,数据应用层也称为数据集市,对接外部系统,方便前端业务快读查询
1.清晰数据结构:方便数据血缘追踪。
2.把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的部分,比较简单和容易理解
3.减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算
4.屏蔽原始数据的异常:屏蔽业务的影响,不必改一次业务就需要重新接入数据
范式建模:
优点:能够结合业务系统的数据模型,较方便的实现数据仓库的模型;同一份数据只存放在一个地方,没有数据冗余,保证了数据一致性;数据解耦,方便维护。
缺点:表的数量多;查询时关联表较多使得查询性能降低。
维度建模:
优点:模型结构简单,面向分析,为了提高查询性能可以增加数据冗余,反规范化的设计,开发周期短,能够快速迭代。
缺点:数据会大量冗余,预处理阶段开销大,后期维护麻烦;还有一个问题就是不能保证数据口径一致性
星型模型:当所有维表都直接连接到事实表上时,整个图解就像星星一样
雪花模型:当有一个或多个维表没有直接连接到事实表上,而是通过其他维度表连接到事实表上时,其图解就像多个雪花连接在一起
维度建模一般按照以下四个步骤:
选择业务过程→声明粒度→确认维度→确认事实
1.选择业务过程:
在业务系统中,挑选我们感兴趣的业务线,比如下单业务,支付业务,退款业务,物流业务,一条业务线对应一张事实表。
2.声明粒度:
数据粒度指数据仓库的数据中保存数据的细化程度或综合程度的级别。声明粒度意味着精确定义事实表中的一行数据表示什么,应该尽可能选择最小粒度,以此来应各种各样的需求。
典型的粒度声明如下:
订单事实表中一行数据表示的是一个订单中的一个商品项。
支付事实表中一行数据表示的是一个支付记录。
3.确定维度:
维度的主要作用是描述业务是事实,主要表示的是“谁,何处,何时”等信息。
确定维度的原则是:后续需求中是否要分析相关维度的指标。例如,需要统计,什么时间下的订单多,哪个地区下的订单多,哪个用户下的订单多。需要确定的维度就包括:时间维度、地区维度、用户维度。
4.确定事实:
此处的“事实”一词,指的是业务中的度量值(次数、个数、件数、金额,可以进行累加),例如订单金额、下单次数等。
在DWD层,以业务过程为建模驱动,基于每个具体业务过程的特点,构建最细粒度的明细层事实表。事实表可做适当的宽表化处理。
事实表和维度表的关联比较灵活,但是为了应对更复杂的业务需求,可以将能关联上的表尽量关联上。
事实表中的每行数据代表一个业务事件(下单、支付、退款、评价等)。“事实”这个术语表示的是业务事件的度量值(可统计次数、个数、金额等)
1.事务型事实表:
以每个事务或事件为单位,例如一个销售订单记录,一笔支付记录等,作为事实表里的一行数据。一旦事务被提交,事实表数据被插入,数据就不再进行更改,其更新方式为增量更新
2.周期型快照事实表:
周期型快照事实表中不会保留所有数据,只保留固定时间间隔的数据,例如每天或者每月的销售额,或每月的账户余额等
3.累积型快照事实表:
累计快照事实表用于跟踪业务事实的变化。例如,数据仓库中可能需要累积或者存储订单从下订单开始,到订单商品被打包、运输、和签收的各个业务阶段的时间点数据来跟踪订单声明周期的进展情况。当这个业务过程进行时,事实表的记录也要不断更新
当一个维度没有数据仓库需要的任何数据的时候就可以退化此维度,需要把退化的相关数据迁移到事实表中,然后删除退化的维度。退化维度没有对应的维表,但可以获取与之相关的事实
退化维度优点:
1.减少事实表和维度表的关联
2.该技术减少维度的数量, 简化维度数据仓库模式。 简单的模式比复杂的更容易理解, 也有更好的查询性能。
3.如果存在退化维,ETL的过程会变得非常容易
4.可以让group by 等操作变得更快
拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息
优点:(1)保留了数据的历史信息;(2)节省存储空间;
OLTP(Online transaction processing):在线/联机事务处理。典型的OLTP类操作都比较简单,主要是对数据库中的数据进行增删改查,操作主体一般是产品的用户。
OLAP(Online analytical processing):指联机分析处理。通过分析数据库中的数据来得出一些结论性的东西。比如给老总们看的报表,用于进行市场开拓的用户行为统计,不同维度的汇总分析结果等等。操作主体一般是运营、销售和市场等团队人员。
单次OLTP处理的数据量比较小,所涉及的表非常有限,一般仅一两张表。而OLAP是为了从大量的数据中找出某种规律性的东西,经常用到count()、sum()和avg()等聚合方法,用于了解现状并为将来的计划/决策提供数据支撑,所以对多张表的数据进行连接汇总非常普遍。
在MapReduce的shuffle阶段共有三次排序,分别是:
1.Map的溢写(spill)阶段:根据分区及key进行快速排序;
2.Map合并溢写文件阶段:将同一个分区的多个溢写文件经过多轮归并排序最终合并为一个文件;
3.Reduce输入阶段:将同一个分区,不同map task的数据文件进行归并排序
窄依赖的好处:
宽依赖的好处:
Spark的transform和action算子的区别
Spark的RDD特性
SparkSQL的执行过程是什么
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。