数仓面试题自我总结

文章介绍了数据仓库的分层结构,包括ODS层、DWD层、DWS层、DWT层和ADS层的作用,强调了数据分层对于简化数据清洗、解耦合、统一数据口径的重要性。同时,提到了根据业务复杂度选择不同分层场景,并列举了数据插入仓库的几种方式,如LOADDATA、INSERT...SELECT和SQOOP等。
摘要由CSDN通过智能技术生成

1、数据仓库分层

ODS层(原始数据层):
用于存放原始数据,数据不做任何修改,所以这相当于起到一个备份作用。因为在数仓建设当中,数据是最重要的,宁可多费一些磁盘空间,也要保证数据的完整性。所以即使ODS层下面所有层的表数据都没了,也是没有关系的,因为只要有ODS层在,其余所有层的数据都可以重新生成,因为它们归根结底都是建立在ODS层之上进行相关操作得到的。

DWD层(数据明细层):
负责对ODS层数据进行清洗,因为原始数据可能会包含大量的脏数据,是不能直接用的,再加上DWD下面的层是用来分析指标的,因此在这一层要确保所有数据都是正常可用的。而这一步业界也有一个专们的岗位叫ETL,而用于ETL的工具一般有Hive SQL、MapReduce、Spark SQL、Python、kettle、Informatica等等。但是注意: 在清洗的过程中,表的结构和粒度与ODS层是一致的,比如ODS层的表是以"星期"为粒度来统计用户的下单次数,那么DWD层也应该以"星期"为粒度。
关于粒度,可以从细到粗、但无法从粗到细。比如当前粒度是"星期",可以通过汇总的方式将粒度从"星期"变成"月",但是显然我们无法将"星期"分解成"天"。

DWS层(数据汇总层):
对DWD层数据进行轻度汇总,基本上是按天汇总。比如用户每下单一次,DWD层就会有一条记录;每评价一次、每点赞一次、每收藏一次,在DWD层都会各自对应一记录。所以DWS层一般会按照天来进行汇总,求出每个用户在每一天内总共下单多少次、点赞多少次、收藏多少次等等。所以本质上,就是将一张高表通过聚合、以及行转列的方式变成宽表。

DWT层:
对DWS层按照主题进行汇总,比如获取某个用户从创建以来直到现在,总共下单多少次。(有的数仓会有这层,有的没有,一般大型数仓层数较多,小型数仓层数较少) 

ADS层(数据应用层):
这一层就是负责提供报表数据比如:日活跃用户、日交易额等等我们可以从DWS层来统计相关指标;因此我们看到ADS层的数据可以来自于DWS、也可以来自于DWT,但是很少有来自于DWD层,因为这不符合数仓的建设规范。数仓的每一层都有它自己的规范,数据该从哪一层获取也有相应的规范,我们应该严格遵循。可能碰巧从ODS层来的数据比较干净、加上结构比较简单,我们从DWD层进行统计也能得到ADS层需要的数据,但即便如此也不要这么做,还是那句话,这不符合数仓的建设规范。

在分层中可能还会出现DM(Data Market 数据集市)层,一般是在大企业中会出现,因为数据集市是部门级别,他给某个局部范围内的管理人员提供服务,可以认为:多个数据集市构成数据仓库。

2、数据仓库为什么要分层?

通过数据分层管理可以简化数据清洗的过程,因为把原来一步的工作分到了多个步骤去完成,每一层的处理逻辑都相对简单和容易理解,从而达到解耦的目的,这样我们比较容易保证每一个步骤的正确性,当数据发生错误的时候,方便问题排查和追溯定位。

分层的核心思想就是解耦,再解耦,把复杂的问题简单化,这直接影响了数据架构到底分几层。

数据分层的好处:

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

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

统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径

复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题

分层场景: 

场景一:时间紧任务重,急于看结果

这种场景,直接连各个业务数据库,抽取数据到大数据平台,根据需求组合join或者汇总count、sum就行,就不要不分层了,将各个业务系统数据抽取到oracle,没有大数据平台就做了。

场景二:公司业务简单,且相对比较固定,数据来源不多,结构也很清晰,需求也不多

直接使用通用的数仓架构就行,ODS起到解耦业务数据库+异构数据源的问题,DWD解决数据脏乱差的问题,DWS服用的指标计算,ADS直接面向前台业务需求。

场景三:公司业务复杂,业务变化较快

那就多一层DWT层做汇总,多一层解耦,业务变化的时候,我们只改DWS层就好了,最多穿透到DWT层。业务变化的时候调整一下,工作量也不会太大,最重要的是能保证底层结构的稳定和数据分析的可持续性。

场景四:公司业务较为复杂,集团性公司,下辖多个部门,部门间业务内容交叉不大

可以在数仓通用分层架构上,增加一层DM层,也就是数据集市层,各个数据集市层,单独供数,甚至有单独的计算资源,这样可以避免因为计算任务代码混在一起、数据权限拆分等问题带来的数据变更成本。

3、向数据仓库中插入数据的方式有哪些?

load data:导入数据到hive中,这种情况适合提供了外部数据文件,然后将其导入hive仓库的表中。

insert ....select:通过查询insert ....select的形式往hive中导入数据,使用insert子句将查询结果插入表中,这是开发中往表里导入数据最常用的方式之一,主要用来项目开发中使用,多表关联计算等操作。

create....as:使用create....as 语句往hive表里装载数据

sqoop:使用sqoop等工具往hive里导入数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值