数据仓库分层——DWD DWS ADS 傻傻分不清楚
大家好,我是怀瑾握瑜,一只大数据萌新,家有两只吞金兽,嘉与嘉,上能 code 下能 teach 的全能奶爸
如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~
数据仓库简介
数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。
互联网时代,由于上网用户剧增,特别是移动互联网时代,海量的网络设备,导致了海量的数据产生,企业需要也希望从这些海量数据中挖掘有效信息,如行为日志数据,业务数据,爬虫数据等等中提炼出有价值信息。但传统的关系型数据库由于本身技术限制,无法很好承担这么大数据量存储和分析的任务,现代大数据技术应运而生。而数仓就是做这些海量数据存储的地方 。
数据仓库分层
数仓数据分层,就跟代码分层一样。如果所有数据都放在一层,就跟代码都放在一个文件,肯定是可以运行的,但带来的问题就是阅读性差,复用性和维护性降低。
数仓的分层的每一层都有自己的职责,同时都是基于下一层或者下面多层做数据处理之后的结果。
使用数据分层机制,相当于提炼黄金的流程,逐步逐步将有价值信息进行汇总聚合。这样就跟分步操作一样,最终提炼出想要的结果.同时就算原始数据丢失了,只要中间结果还在,依然可以保证最上层数据的稳定性,类似加了一层缓冲一样。
模型设计
1. ODS 层
这一层又叫做贴源层,就是接近数据源的一层,需要存储的数据量是最大的,存储的数据也是最原始,最真实未经过太多处理的数据。
ODS 层数据还起到一个数据备份作用,如果是比较特殊行业,在 ODS 层的数据会保留一年甚至多年具体还看数据量和存储压力以及存储预算决定。
一个很经典的模型,就是外部往 Kafka 推送数据,然后使用 Flume 把数据落盘到 HDFS 上。
一般 ODS 都是原始数据,而原始数据因为种种原因会有很多问题,比如:
字段缺失
数据字段不统一
格式错误
关键信息丢失等等
数据来源混杂
数据类型不一,例如 json,xml,text,csv 的,压缩了的,没有压缩
这些问题可以在 ODS 落盘时进行处理,也可以放到下一层,也就是 DWD 层进行处理,这个可以根据具体业务进行判断。
ODS 层建立表时,如果使用 hive 进行处理,一般建立外部表,外部表的特点除了文件地址可以指定外,删表时数据不会被删除。
数据量很大时,就需要考虑区分存储,比如 HIVE 表的按天分区等。
ODS 是可能是整个数据仓库中最占用空间的层级,因此对该层的数据优化需要持续关注
2. DWD 层
DWD 又叫做数据明细表,会有 ETL,也就是 extract transform load 提取转换加载处理,逻辑会比较复杂,这时候如果使用 hive,一般无法满足要求,这些逻辑一般都是编写代码实现,然后使用脚本进行周期性如每天调用。
这也是离线批处理的第一步,大量的原始数据逐条筛选处理,需要处理的内容包括但不限于如下:
去除废弃字段,去除格式错误的信息
去除丢失了关键字段的信息
数据规范化,因为大数据处理的数据可能来资源不同,这时候可能相同业务数据字段,数据类型,空值等都不一样,这时候需要在 DWD 层做抹平,否则后续处理使用时,会造成很大的困扰
如后续有业务需要,需要对 DWD 层数据进行水平或垂直切割 DWD 层的数据单纯从条数上看可能和 ODS 差不多,但是经过清洗过后,占用的存储空间会小很多。
3. DWS 层
DWS 俗称的数据服务层,一般使用主题建模或维度建模等方式
主题建模
顾名思义,围绕某一个业务主体进行数据建模,将相关数据抽离提取出来
将流量会话按照天、月进行聚合
将每日活跃用户进行聚合
将某样商品按用户或时间聚合
维度建模
根据业务需要,提前将后续数据查询处理需要的维度数据抽离处理出来,方便后续查询使用
将运营位维度数据聚合
将渠道拉新维度数据聚合
DWS 层一般都是存储与一定业务相关的数据,可以说是一种结果数据,建模数据,所以与 DWD 相比数据占用空间会更小。
234234
12312
4. DM 层
DM 层即数据集市层,是以某个业务应用为出发点而建设的局部 DW,通常是星形或雪花结构的数据。DM 只关心自己需要的数据,它需要结构清晰、针对性强。
从数据粒度来说,这层的数据是轻度汇总级的数据,已经不存在明细数据了
从时间上看,用户通常只需要分析近几年(如近 3 年的数据)的即可
DM 层已经很接近最终用户使用的数据了,所以对于该层的数据最好覆盖面越广越好,而很多时候为了减少 DM 层的工作量,会去返推 DWS 层的业务逻辑,使 DM 更多只聚焦与业务而不是逻辑或运算。
5. ADS 层
ADS 层叫应用服务层,一般就直接对接 OLAP 分析,或者业务层数据调用接口了。
这是最顶层,一般都是结果类型数据,可以直接拿去使用或者展示的数据了,也是对数据抽离分析程度最高的一层数据。
这一层是需求最明确的一层,根据业务需求来决定数据维度和结果分析。
该层首要考虑的,一般是查询效率问题,所以针对不同的业务系统,需要考虑使用不同的数据库进行存储。
结束语
如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~
版权声明: 本文为 InfoQ 作者【怀瑾握瑜的嘉与嘉】的原创文章。
原文链接:【http://xie.infoq.cn/article/d2605a7159ec87609e34164c7】。文章转载请联系作者。
评论