一、Hadoop相关
1.简述hive 的计算引擎
2.数仓常用的计算引擎比较
3.简述shuffer过程
4.如何处理半结构化和非结构化数据
例如:采用FastDFS分布式来存储非结构化数据,然后mysql中存储对应的url
hadoop中 照片,pdf无法处理的,邮件,weblog如果可以转化成文本可以处理,导入hdfs,然后通过hadoop处理,
处理的方式有写mapreduce,pig,hive,mahout,其中pig和hive是写sql的,mahout用机器学习算法的,最基础的还是写mapreduce的java
5.常用的调度工具
6.azkaba二次开发
《二次开发》
二、离线数仓
1.简述一个完整的数仓项目流程
2.详细描述数据抽取到ODS层的数据处理过程(银行数仓)?
3.描述DWD事实表的建表规则和逻辑。
实体表,一般是指一个现实存在的业务对象,比如用户,商品,商家,销售员等等。
事务型事实表,一般指随着业务发生不断产生的数据。特点是一旦发生不会再变化。一般比如,交易流水,操作日志,出库入库记录等等。
周期型事实表,一般指随着业务发生不断产生的数据。与事务型不同的是,数据会随着业务周期性的推进而变化。
比如订单,其中订单状态会周期性变化。再比如,请假、贷款申请,随着批复状态在周期性变化。
4.简述事实表和ODS层的关系,例如一对一,一对多等具体建表关系
5.描述DWS维度表和事实表的关系(码表以外的数据)
维度表,一般是指对应一些业务状态,编号的解释表。也可以称之为码表。比如地区表,订单状态,支付方式,审批状态,商品分类等等。
6.dws层建模思路
7.一般ods数据存储只有一两年,当ods后期发现不规范,需要添加字段等,如何保留历史数据?
8.事实表中多表融合的表如何标注数据来源于不同表
9.当增量抽取数据时,原表没有时间戳等标识,抽取数据时如何区分增量和存量数据?
如果数据可能存在修改,又没有时间戳简单操作很难增量;
如果真想增量,那么简单的方式就是建立一个触发器和一张记录变更的表,后期增量更新就用变更表配合原表来就行增量抽取。
还有一个方式就需要改动原表了,增加一个最后修改时间的字段;
如果数据只存在新增,那么可以给予自增主键来进行增量。
10.指标宽表建一张还是多张?
11.对于指标连带指标的情况如何存储到宽表?
12.前端报表需要多类报表融合在一起,后端数据如何存储
13.解释分布式存储
14.解释什么是广播
15.解释什么是数据倾斜
16.解释什么是拉链表
拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。
17.如下情景怎么解决?
(1)有一些表的数据量很大,比如一张用户表,大约10亿条记录,50个字段,这种表,即使使用ORC压缩,单张表的存储也会超过100G,在HDFS使用双备份或者三备份的话就更大一些。
(2)表中的部分字段会被update更新操作,如用户联系方式,产品的描述信息,订单的状态等等。
(3)需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史某一个时间点的状态。
(4)表中的记录变化的比例和频率不是很大,比如,总共有10亿的用户,每天新增和发生变化的有200万左右,变化的比例占的很小。
若不使用拉链表,解决方案此处给出两种:
方案一:每天只留最新的一份,比如我们每天抽取最新的一份全量数据到Hive中。(占无法查看历史数据)
方案二:每天保留一份全量的切片数据。(存储空间占用量大,无法确定数据生命周期,保留多少份全量无法控制)
此时可以考虑**使用拉链表。**首先它在空间上做了一个取舍,虽说不像方案一那样占用量那么小,但是它每日的增量可能只有方案二的千分之一甚至是万分之一。其次它能满足方案二所能满足的需求,既能获取最新的数据,也能添加筛选条件也获取历史的数据。
三、Hive相关
1.case when不支持子查询如何处理 参考:《Hive中case when不支持子查询的解决方法》
四、数据库相关