数据仓库面试题

1.Hive的执行过程?

1)解析器parser:进来一个SQL字符串,将SQL解析,解析的结果是AST(抽象语法树见官网详细解释以及使用)AST本质还是字符串

2)遍历AST Tree,抽象出查询的基本组成单元QueryBlock

3)逻辑执行计划解析,遍历QueryBlock,翻译为执行操作树OperatorTree

4)逻辑执行计划优化,将OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量

5)物理执行计划解析,生成MapReduce任务

6)物理执行计划优化,对MapReduce任务进行变换

7)生成最终的执行计划并运行

2.数据质量如何保证

1.技术层面:做好ETL程序,考虑数据的格式不规范等问题,例如2013-30-08 2013\8\30 20130830 2013-08-40 等,统一清洗转换成一致性数据2013-08-30,并且做好数据质量的监控和告警

2.流程层面:管理应该从源头开始,数据源产生的质量问题会影响后面每一个步骤,数据源也可以设立告警系统,通过邮件等方式进行告知

3.从业务的角度讲,数据仓库是基于业务的,很多数据质量的问题也和业务挂钩,这个就要具体问题具体分析

3.数据仓库建模方法

1.范式建模:这种方法就是依赖于三范式理论,优点是实现比较方便,缺点是不够灵活

2.维度建模法:比较常见的是星型模型,这种方式可以紧密的围绕业务,但是会存在一定的数据冗余

3.实体建模法:将一个业务过程划分为实体、事件、说明三个部分,比如小明开车去学校上学,小明、学校为实体,上学为事件,开车去为说明

数仓建模理论:维度建模

数据库建模:范式建模

4.数仓模型

星型模型、雪花模型、星座模型
星形模型中有一张事实表,以及若干维表,维表直接和事实表相连。
雪花模型中,维表可能不一定和事实表直接相连,会进行拆分,拆分的原则是消除冗余,拆分的结果是维表可能和事实表关联,也可能是维表关联。
星座模型是由星型模型延伸而来,星型模型是基于一张事实表而星座模式是基于多张事实表,并且共享维度表信息,也就是两张事实表连着同一张维表,算是一种更复杂的星型模型。

5.数仓分层

为什么要分层:

首先说下分层的核心目的:解耦

1.数据隔离:业务发生变化之后只需要修改部分层的数据,不需要从数据源头开始修改。

2.增强数据安全性:通过分层,可以更方便的对每层数据的权限进行管理,对于不同的开发人员和业务人员屏蔽一些敏感信息。

3.数据结构清晰:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解

4.减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算

数仓要分为几层:

分层的核心目的是为了解耦。
直接从数据库里面出报表,可不可以,当然可以。但是如果后端的数据库发生一点点修改,整个数据设计都得修改,前台业务,数据处理逻辑,后端数据库完全锁死。
每张表都单独一层,一共分个七八层可不可以,当然也可以。但是这样数据链路就很长,管控难度巨大,而且一旦发生问题,想要追查错误源头基本不可能。
因此,既不能完全不分层,也不能分太多层。我们有ODS层,是为了保存原始数据,有DWD明细层,是为了解决数据脏乱差的问题,保证后续有一个干净的数据,有汇总层是为了沉淀公共逻辑,实现数据复用,有ADM是为了搭报表,这就是在不断的解耦的过程。


那么如何根据业务的实际场景设计分层:
(1)如果时间紧,需求重,业务今天提需求,明天就要上线,那就没时间做分层了,直接拿数据库数据出报表
(2)如果业务比较简单,变化也不大,可以做三层。ODS+DWD+ADM,ODS起到解耦业务数据库+多源异构数据融合的作用,DWD解决数据脏乱差的问题,ADM直接面向业务需求。
(3)如果说业务比较复杂,涉及到多个部门之间,可以就做四层。ODS+DWD+DWS+ADM。多一层DWS可以对数据进行汇总,沉淀公共逻辑,起到数据复用的效果。当业务发生变化的时候,只需要修改DWS层就可以了,也实现了解耦的功能,最多再修改下DWD,工作量不会太大,底层数据的稳定性也可以保障。
(4)如果说从公司的情况来看,四层还是不够,也可以根据实际需求再加一层。

6. 数仓和传统数据库的区别

数仓面向主题,传统数据库面向应用

数仓容量比传统数据库要大很多

数仓数据和经过多重加工和提炼的,传统数据库数据是详细的

数仓保留了历史数据,传统数据库保留当前数据

数仓相对冗余,传统数据库不冗余

7.编写特别复杂的sql有没有什么好的解决方法

UDF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值