数仓题目1.0

数仓题目

1、能否简介一下当前这个项目

包含:
•项目做了什么
项目叫做:知行教育大数据分析平台(数仓开发项目)
目的:对海量的业务数据进行指标分析。
结果:对分析的结果做可视化的展示

•用到了什么技术
Hive ,Hue,Cloudera Manager,HDFS,Oozie,YARN,Zookeeper,Sqoop,拉链表…
•解决了什么问题
1.将各种数据源整合到一起统一数据中心,解决数据壁垒。
2.保留历史变更数据,提供对细节变化分析支持。
3.脏数据清洗,简化业务复杂结构数据。
•用于哪个行业?行业有什么痛点是需要项目解决的
数据量比较大,传统的业务数据库比如MySQL难以支撑,我们需要:分布式的、支持SQL的一种数据库(Hive)
数据分散,需要将数据集中存储
数据设计是针对业务设计的,分析比较困难,我们需要将它转换为分析比较好用的格式

2、什么是数据仓库呢?

定位为集中存储可以支持海量数据分析和计算的一种技术,可也以称之为数据分析专用的系统。

3、数据仓库和传统的业务数据库有什么区别?

区别
传统数据库保存当下数据,而数据仓库仓库保存了历史数据所有状态。
传统数据库会出现频繁数据更新。而数据仓库提取加工数据用来反哺业务,提供分析决策。
传统数据库擅长事务处理(OLTP)而数据仓库擅长数据分析。
传统数据库主要遵从范式模型(1NF,2NF,3NF,等等),从而尽可能减少数据冗余,保证引用完整性;而数据仓库强调数据分析的效率,复杂查询的速度,数据之间的相关性分析,所以在数据库模型上,数据仓库喜欢使用多维模型,从而提高数据分析的效率。
传统数据库一般是明细数据,而数据仓库包含一些汇总数据。

4、OLTP和OLAP分别是什么?有什么区别?

OLTP:Online Transaction Processing:在线(联机)事务处理OLAP:Online Analysis Processing:在线分析处理

OLTP
大白话:OLTP系统主要为了业务能够顺畅、稳定的运行
即联机事务处理,也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一,比如ERP系统,CRM系统,互联网电商系统等,这类系统的特点是事务操作频繁,数据量小。
OLAP
大白话:OLAP系统主要为了数据能够高效的分析处理
即联机分析处理,有时也称为决策支持系统(DSS),支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。这类系统的特点是没有事务性操作,主要是查询操作,数据量大。

5、项目是如何分层的

Ods:元数据,事务表所存放的位置,记录的是输入数据仓库数据的原始的样子或者经过少量的修改的样子
Dimen:元数据,与ods一样,只不过是维度表所存放的位置
Dwd:存储明细数据,此数据是最细粒度的事实数据。该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联。
Dwm:存储中间数据,为数据统计需要创建的中间表数据,此数据一般是对多个维度的聚合数据,此层数据通常来源于DWD层的数据。
Dws:存储宽表数据,此层数据是针对某个业务领域的聚合数据,应用层的数据通常来源与此层,为什么叫宽表,主要是为了应用层的需要在这一层将业务相关的所有数据统一汇集起来进行存储,方便业务层获取。此层数据通常来源与DWD和DWM层的数据。
Ads:存储数据的计算结果,就是可以直接拿取用的,无需在执行计算的数据。

–6、数仓一般怎么做分层处理呢?

Ods,dwd,dwm,dws,ads

7、数仓分层的作用是什么?

由于我们做数据分析,大体上在数仓中都是迭代的计算,这种计算就会分层次来进行。
数仓分层的作用是什么?
1.解耦合 分布执行 降低出问题的风险
2.用空间换时间 用多步换取最终使用的数据的高效性

8、项目中有做按照主题分析吗?若有,有哪些主题

有。
1.访问咨询主题看板.
2.意向客户主题看板.
3.有效线索主题看板.
4.报名用户看板.
5.学生出勤看板.

9、数据分析能决定企业未来发展,请辩证这个观点

完全同意,请说出原因
在当前我国,企业在运营过程中所产生的数据,在以每年50%的速度增加。这些数据在以及月累的情况已经汇聚成海量数据,如果去掉里面一些陈旧的数据,这些数据量也是非常可观的。
对于一个企业来说,不断的为产品扩展销售渠道和提升服务质量是至关重要的。在进行大量数据的分析的前提下,更好的分析数据,获取用户信息才能够更精准的获取市场动态,并且掌握市场对产品和服务的需求,从而更加优化产品及服务,提升产品的销售量。

10、什么是事实表,什么是维度表,有什么区别和联系

事实表,就是记录了一个个的事实(事件)信息的表。
维度表:记录的是一个事件或者实体的各个维度上的信息。
维度表与事实表区别
1、事实表就是你要关注的内容;
2、维度表就是你观察该事务的角度,是从哪个角度去观察这个内容的。

11、什么是指标,什么是维度,有什么区别和联系

维度:以不同的视角去看待数据。
指标:被看待的数据主题
维度与指标区别:
指标,是衡量事务发展程度的单位和方法,通常需要经过加和、平均等聚合统计才能得到,并且是在一定条件下的。
维度,是事务现象的某种特征,如性别,地区,时间都是维度。
维度是站着的,也就是上图的城市和浏览器这一列,
而指标是躺着的,也就是像旧金山的这一行,有会话数,每次会话浏览数,两个指标
维度和指标的关系
虽然维度和指标可以独立使用,但常见的还是相互结合使用。维度和指标的值以及这些值之间的关系,使您的数据具有了意义。为了挖掘尽可能多的深层次信息,维度通常与一个或多个指标关联在一起。。

12、数据仓库的主要特性是?

1. 主题性
数据仓库是一般从用户实际需求出发,将不同平台的数据源按设定主题进行划分整合,与传统的面向事务的操作型数据库不同,具有较高的抽象性。
2.集成性
数据仓库中存储的数据大部分来源于传统的数据库,但并不是将原有数据简单的直接导入,而是需要进行预处理。
3.稳定性
数据仓库中的数据主要为决策者分析提供数据依据。
4.动态性
数据仓库数据会随时间变化而定期更新,不可更新是针对应用而言,即用户分析处理时不更新数据。每隔一段固定的时间间隔后,抽取运行数据库系统中产生的数据,转换后集成到数据仓库中。

13、数据仓库主要解决了什么问题

请大体概述一下,企业中遇到什么问题,又用数仓解决了什么问题
数据仓库能够为业务部门提供准确、及时的的报表。虽然给业务系统也能够提供报表功能,但由于业务处理系统是为实现某个业务功能开发的,业务处理系统中的报表只能提供局部的信息,无法提供关于企业整体的信息,使管理人员有“只见树木,不见森林”的感觉。

14、一个企业一般构建几个数据仓库最好,并说明

一个,数据仓库是是为了便于多维分析和多角度展现而将数据按特定的模式进行存储所建立起来的关系型数据库,它的数据基于OLTP源系统。数据仓库中的数据是细节的、集成的、面向主题的,以OLAP系统的分析需求为目的。
一个数据仓库,多个子仓库

15、什么是缓慢渐变维?适用于什么场景?

缓慢渐变维是:维度数据会随着时间发生变化,变化速度比较缓慢,这种维度数据通常称作缓慢渐变维;由于数据仓库需要追溯历史变化,尤其是一些重要的数据,所以历史状态也需要采取一定的措施进行保存。
适用于当事实表数据量大,但数据是缓慢变化,需要跟踪历史状态。

16、什么是拉链表?适用于什么场景

拉链表是记录每条信息的生命周期,一旦一条信息的生命周期结束,就重新开始一条新纪录,并把当前日期放入生效日期。如果当前日期至今有效,在结束日期放入一个最大值,例如(9999-99-99)
业务场景:公司内部,员工的职级会随着时间的变化发生缓慢的变化,例如: 升职、离职等,针对此情况,采用拉链表的方式既可保留历史,也不影响使用。

17、什么是维度的分层和分级?什么是上钻和下卷?

分级:分级可以简单理解为将不同颗粒度的流程按照粗细分为不同的级别。
分层:简单想,只要有上下或者左右关系,都可以叫做分层。
上钻:自下而上,从当前数据回归到上层数据。
下卷:自上而下, 从当前数据继续向下获取下层数据。

18、请简述数据集市

数据集市:数据集市也叫数据市场,是一个从操作的数据和其他的为某个特殊的专业人员团体服务的数据源中收集数据的仓库。

19、请简述维度退化,以及其作用

将维度退化到事实表中,减少事实表和维度表的关联

20、请简述以下层级的主要作用

Ods,dimen
存储元数据,记录的是输入数据仓库数据的原始的样子或者经过少量的修改的样子

dwd
存储明细数据,此数据是最细粒度的事实数据

dwm
存储中间数据,为数据统计需要创建的中间表数据,此数据一般是对多个维度的聚合数据,此层数据通常来源于DWD层的数据。

dws
存储宽表数据,此层数据是针对某个业务领域的聚合数据。

ads(app)
存储数据的计算结果,就是可以直接拿取用的,无需在执行计算的数据。

—21、请简述项目中5个看板各自的建模

怎么分层,为什么这样分层
1.访问咨询主题看板.
业务来源–> Ods -->dwd–>dwm–>dws
2.意向客户主题看板.
业务来源–> Ods -->dwd–>dwm–>dws
3.有效线索主题看板.
业务来源–> Ods -->dwd–>dwm–>dws
4.报名用户看板.
业务来源–> Ods -->dwd–>dwm–>dws
5.学生出勤看板.
业务来源–> Ods -->dwm–>dws
因为 所有dws已经足够满足需求,都不需要ADS,第5个看板甚至不需要dwd(数据预处理)

—22、请简述SCD2的实现方法(最少2种,多了不限)

1.按天增加一个表
2.增加两列(开始时间,结束时间)(拉链表)

23、请用三个单词来总结数仓分层的主要工作内容

输入(ODS原始数据存储)
处理(DW 数据迭代计算)
输出 (ADS存储分析的结果)

24、什么是版本控制工具

就好比git他就是一款版本控制工具,
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况以及回溯的系统。 任何类型的文件都可以进行版本控制。

25、什么是git

Git是目前世界上最先进的分布式版本控制系统,
Git有什么特点?简单来说就是:高端大气上档次!

26、.git文件夹的作用

执行了git init初始化后,当前文件夹的文件都将置于git管理工具的管理与跟踪当中。这个命令会在当前目录下生成.git文件夹,如果不要git管理了,直接删除这个.git目录即可。

27、什么是本地库什么是远程库

本地数据库:一2113般指的是你自5261己电脑4102上安装的数据库1653。
远程数据库:一般指的回是你自己电脑以外的答电脑上安装的数据库。

28、在大数据框架中,压缩的作用是什么?

压缩是一种通过特定的算法来减小计算机文件大小的机制。
就是通过运行CPU来降低硬盘使用,
因为CPU的速度远大于硬盘同时也远大于网络传输速度

29、请简述行存储和列存储各自的优缺点和适用场景

列存储,每个文件存储一个列,多个文件存储多个列,多个文件合成一张二维表
优点:列过滤,列查找,针对列相关操作更快。扩展列,增删列很容易。列单独存储
列相关查询、过滤性能更快
扩展列、删除列更简单
列单独存储,每个列均可以进行单独排序,性能更好
列单独存储,可以针对每个列的数据类型设置针对性的压缩算法,使得压缩率更好
数据加载可以选择指定的列加载到内存中。更加节省内存。
数仓的特性很大一部分是针对列的过滤,列的搜索,列的匹配,所以很多数仓结构比较适合使用列存储
列存储也比较适合做OLAP
缺点:整行相关操作性能低。同时对事务的支持性不行(因为把列都拆开存储,每个列单独做事务,整体还要同步很麻烦)

行存储,数据行存储,一个文件可表达一个二维表。
优点:
概念简单容易理解,和很多现实中的数据模型概念相通,比如CSV文件,文本数据文件等
概念简单容易理解是一个很大的优势,毕竟性能低点可以忍,难以理解就不可以忍了。
人天生懒。
针对行操作更快捷
事务支持比较好
缺点:
针对列的操作性能比列存储低,因为无论操作哪个列都要取出来整行数据
只能针对整行数据选定压缩算法,无法针对列选定,压缩率不高(对比列存储)
排序只可基于某一个列排序,然后整体行和行之间排序(索引等额外的解决方案除外,这里只是指原始状态下)
扩展列、删除列不方便

30、什么是Hive的分区?什么是Hive的分桶?

Hive的分区:Hive分区的概念与传统关系型数据库分区不同。
传统数据库的分区方式:就oracle而言,分区独立存在于段里,里面存储真实的数据,在数据进行插入的时候自动分配分区。
Hive的分区方式:由于Hive实际是存储在HDFS上的抽象,Hive的一个分区名对应一个目录名,子分区名就是子目录名,并不是一个实际字段。按照数据表的某列或某些列分为多个区,区从形式上是文件夹(HDFS里的文件夹)
Hive的分桶:分桶:并非所有的数据集都可形成合理的分区,特别之前所提到过的要确定合适的划分大小的疑虑。对于每一个表或者分区,可以进一步细分成桶,桶是对数据进行更细粒度的划分。Hive默认采用对某一列的每个数据进行hash(哈希),使用hashcode对 桶的个数求余,确定该条记录放入哪个桶中。
Hive的分区与分桶区别:
1.Hive的分区是文件夹,Hive的分桶是文件
2.分桶随机分割数据库,分区是非随机分割数据库。因为分桶是按照列的哈希函数进行分割的,相对比较平均;而分区是按照列的值来进行分割的,容易造成数据倾斜。
3.分桶是对应不同的文件(细粒度),分区是对应不同的文件夹(粗粒度)。桶是更为细粒度的数据范围划分,分桶的比分区获得更高的查询处理效率,使取样更高效。

31、Hive中静态分区、动态分区、混合分区分别是什么

1.静态分区
需要手动指定参数,(通俗来讲:就是固定了)
2.动态分区
基于查询参数的位置去推断分区的名称,从而建立分区
3.混合分区
就是混合使用静态分区和动态分区来创建目标表的分区
注意:在使用 混合分区时,静态分区的字段必须放到动态分区字段的前面

32、什么是Map Join,有什么好处,主要原理是什么

Map Join:map join是直接在map阶段完成数据的合并,
好处:由于在map是进行了join操作,省去了reduce运行的效率也会高很多,
主要原理:Map Join简单说就是在Map阶段将小表读入内存,顺序扫描大表完成Join。

33、如何显式的告知Hive执行任务要走MapJoin

在查询中加入:/*+mapjoin(表)*/

34、什么是Bucket Map Join,有什么好处,主要原理是什么

大表对大表的场景下,无法使用MapJoin(因为大表指的就是超过了Map Join允许的大小阈值)
我们可以使用Bucket-Map Join来进行优化。
表整体无法在Map中hold住,可以将表的分桶在Map中hold
相当于,两个表的分桶和分桶之间,做局部的Map Join

35、什么是SMB Join,有什么好处,主要原理是什么

Sorted Merge Bucket Join
MapJoin优化了整表的Join流程(整表在Map内存中Join)
BucketMapJoin优化了表的局部Join(桶文件和桶文件之间在Map端的内存中Join)
SMB Join 优化的是,在shuffle过程中的性能提升。
MapReduce执行流程,Map和Reduce之间有Shuffle,Shuffle是需要耗费一定的时间的。
如果提供的数据就是已排好序的,Shuffle就可以被加速吧
SMB的核心就是:
在BucketMapJoin的基础上,对桶文件进行排序
通俗说就是:分桶 + 桶排序

—36、请简述Hive的执行原理

1.Antlr 定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree
2.遍历AST Tree,抽象出查询的基本组成单元QueryBlock
3.遍历QueryBlock,翻译为执行操作树OperatorTree
4.逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量
5.遍历OperatorTree,翻译为MapReduce任务
6.物理层优化器进行MapReduce任务的变换,生成最终的执行计划

Antlr

Hive使用Antlr实现SQL的词法和语法解析。Antlr是一种语言识别的工具,可以用来构造领域语言。
这里不详细介绍Antlr,只需要了解使用Antlr构造特定的语言只需要编写一个语法文件,定义词法和语法替换规则即可,Antlr完成了词法分析、语法分析、语义分析、中间代码生成的过程。

AST Tree

经过词法和语法解析后,如果需要对表达式做进一步的处理,使用 Antlr 的抽象语法树语法Abstract Syntax Tree,在语法分析的同时将输入语句转换成抽象语法树,后续在遍历语法树时完成进一步的处理。

QueryBlock

QueryBlock是一条SQL最基本的组成单元,包括三个部分:输入源,计算过程,输出。简单来讲一个QueryBlock就是一个子查询。

Operator

Hive最终生成的MapReduce任务,Map阶段和Reduce阶段均由OperatorTree组成。逻辑操作符,就是在Map阶段或者Reduce阶段完成单一特定的操作

37、你们的原始数据一共有多张数据表?

customer_appeal 线索申诉表
customer_appeal_test(临时)
customer_clue 客户线索表
customer_clue_tmp (临时)
customer_relationship 客户意向表
customer_relationship_tmp(临时)
student_leave_apply_ods 学生请假申请表
student_signin_ods 学生打卡记录表
web_chat_ems 用户访问表
web_chat_text_ems 用户访问副表
class_studying_student_count_dimen 班级在读学生人数
class_time_dimen 班级作息时间表
course_table_upload_detail_dimen 班级课表
Customer 客户静态信息表
employee 员工表
itcast_clazz 报名课程表
itcast_school 学校表
itcast_subject 学科表
scrm_department 部门表
Ods层和dimen层所有的表
—38、业务上用到哪些表?
student_attendance_dwm 学生出勤表
class_attendance_dwm 班级出勤表 (正常出勤和迟到)
class_leave_dwm 班级请假表
truant_dwm 班级旷课表
class_attendance_dws 班级出勤数据汇总表

39、一共有多少个分析需求?

一共有40个需求:
1.访问咨询主题看板.
这个看板有9个需求
2.意向客户主题看板.
这个看板有7个需求
3.有效线索主题看板.
这个看板有4个需求
4.报名用户看板.
这个看板有11个需求
5.学生出勤看板.
这个看板有9个需求

—40、列举几个你实现得需求?

比如第5个看板:
班级出勤人数:统计指定时间段内,不同班级的出勤人数。
班级出勤率:出勤率=出勤人数/当日在读学员人数。
班级迟到人数:统计指定时间段内,不同班级的迟到人数。
班级迟到率:迟到率=迟到人数/当日在读学员人数
班级请假人数:统计指定时间段内,不同班级的请假人数。
班级请假率:请假率=请假人数/当日在读学员人数。
班级旷课人数::统计指定时间段内,不同班级的旷课人数。跨天数据直接累加。旷课人数=当日在读学员人数-出勤人数-请假人数。
班级旷课率:统计指定时间段内,不同班级的学生旷课率。旷课率=旷课人数/当日在读学员人数。
需要用到所有的表:
course_table_upload_detail 班级课表、
tbh_student_signin_record 学生打卡记录表、
tbh_class_time_table 班级作息时间表、
class_studying_student_count班级在读学生人数、
student_leave_apply学生请假申请表

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔界小皮蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值