[数据仓库]分层概念,ODS,DM,DWD,DWS,DIM的概念
⼀. 各种名词解释
1.1 ODS是什么?
ODS层最好理解,基本上就是数据从源表拉过来,进⾏etl,⽐如mysql 映射到hive,那么到了hive⾥⾯就是ods层。
ODS 全称是 Operational Data Store,操作数据存储.“⾯向主题的”,数据运营层,也叫ODS层,是最接近数据源中数据的⼀层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL 之后,装⼊本层。本层的数据,总体上⼤多是按照源头业务系统的分类⽅式⽽分类的。但是,这⼀层⾯的数据却不等同于原始数据。在源数据装⼊这⼀层时,要进⾏诸如去噪(例如有⼀条数据中⼈的年龄是 300 岁,这种属于异常数据,就需要提前做⼀些处理)、去重(例如在个⼈资料表中,同⼀ ID 却有两条重复数据,在接⼊的时候需要做⼀步去重)、字段命名规范等⼀系列操作。
1.2 数据仓库层DW?
数据仓库层(DW),是数据仓库的主体.在这⾥,从 ODS 层中获得的数据按照主题建⽴各种数据模型。这⼀层和维度建模会有⽐较深的联系。
细分:
数据明细层:DWD(Data Warehouse Detail)
数据中间层:DWM(Data WareHouse Middle)
数据服务层:DWS(Data WareHouse Servce)
1.2.1 DWD明细层?
明细层(ODS, Operational Data Store,DWD: data warehouse detail)
概念:是数据仓库的细节数据层,是对STAGE层数据进⾏沉淀,减少了抽取的复杂性,同时ODS/DWD的信息模型组织主要遵循企业业务事务处理的形式,将各个专业数据进⾏集中,明细层跟stage层的粒度⼀致,属于分析的公共资源
数据⽣成⽅式:部分数据直接来⾃kafka,部分数据为接⼝层数据与历史数据合成。
这个stage层不是很清晰
1.2.2 DWM 轻度汇总层(MID或DWB, data warehouse basis)
概念:轻度汇总层数据仓库中DWD层和DM层之间的⼀个过渡层次,是对DWD层的⽣产数据进⾏轻度综合和汇总统计(可以把复杂的清洗,处理包含,如根据PV⽇志⽣成的会话数据)。轻度综合层与DWD的主要区别在于⼆者的应⽤领域不同,DWD的数据来源于⽣产型系统,并未满意⼀些不可预见的需求⽽进⾏沉淀;轻度综合层则⾯向分析型应⽤进⾏细粒度的统计和沉淀
数据⽣成⽅式:由明细层按照⼀定的业务需求⽣成轻度汇总表。明细层需要复杂清洗的数据和需要MR处理的数据也经过处理后接⼊到轻度汇总层。
⽇志存储⽅式:内表,parquet⽂件格式。
⽇志删除⽅式:长久存储。
表schema:⼀般按天创建分区,没有时间概念的按具体业务选择分区字段。
库与表命名。库名:dwb,表名:初步考虑格式为:dwb⽇期业务表名,待定。
旧数据更新⽅式:直接覆盖
1.2.3 DWS 主题层(DM,data market或DWS, data warehouse service)
概念:⼜称数据集市或宽表。按照业务划分,如流量、订单、⽤户等,⽣成字段⽐较多的宽表,⽤于提供后续的业务查询,OLAP分析,数据分发等。
数据⽣成⽅式:由轻度汇总层和明细层数据计算⽣成。
⽇志存储⽅式:使⽤impala内表,parquet⽂件格式。
⽇志删除⽅式:长久存储。
表schema:⼀般按天创建分区,没有时间概念的按具体业务选择分区字段。
库与表命名。库名:dm,表名:初步考虑格式为:dm⽇期业务表名,待定。
旧数据更新⽅式:直接覆盖
电销机器人源码下载1.3 APP?
数据产品层(APP),这⼀层是提供为数据产品使⽤的结果数据。
主要是提供给数据产品和数据分析使⽤的数据,⼀般会存放在 ES、Mysql 等系统中供线上系统使⽤,也可能会存在 Hive 或者 Druid 中供数据分析和数据挖掘使⽤。
如我们经常说的报表数据,或者说那种⼤宽表,⼀般就放在这⾥。
应⽤层(App)
概念:应⽤层是根据业务需要,由前⾯三层数据统计⽽出的结果,可以直接提供查询展现,或导⼊⾄Mysql中使⽤。
数据⽣成⽅式:由明细层、轻度汇总层,数据集市层⽣成,⼀般要求数据主要来源于集市层。
⽇志存储⽅式:使⽤impala内表,parquet⽂件格式。
⽇志删除⽅式:长久存储。
表schema:⼀般按天创建分区,没有时间概念的按具体业务选择分区字段。
库与表命名。库名:暂定apl,另外根据业务不同,不限定⼀定要⼀个库。(其实就叫app_)就好了
旧数据更新⽅式:直接覆盖。
【漫谈数据仓库】 如何优雅地设计数据分层
1.4 数据的来源
数据主要会有两个⼤的来源:
业务库,这⾥经常会使⽤ Sqoop 来抽取
我们业务库⽤的是databus来进⾏接收,处理kafka就好了。
在实时⽅⾯,可以考虑⽤ Canal 监听 Mysql 的 Binlog,实时接⼊即可。(有机会补⼀下这个canal)
埋点⽇志,线上系统会打⼊各种⽇志,这些⽇志⼀般以⽂件的形式保存,我们可以选择⽤ Flume 定时抽取,也可以⽤⽤ Spark Streaming 或者 Storm 来实时接⼊,当然,Kafka 也会是⼀个关键的⾓⾊。
还有使⽤filebeat收集⽇志,打到kafka,然后处理⽇志
注意: 在这层,理应不是简单的数据接⼊,⽽是要考虑⼀定的数据清洗,⽐如异常字段的处理、字段命名规范化、时间字段的统⼀等,⼀般这些很容易会被忽略,但是却⾄关重要。特别是后期我们做各种特征⾃动⽣成的时候,会⼗分有⽤。
1.5 ODS、DW → App层
电子版免费个人简历模板下载这⾥⾯也主要分两种类型:
mysql是什么系统每⽇定时任务型:⽐如我们典型的⽇计算任务,每天凌晨算前⼀天的数据,早上起来看报表。 这种任
务经常使⽤ Hive、Spark 或者⽣撸MR 程序来计算,最终结果写⼊ Hive、Hbase、Mysql、Es 或者 Redis 中。
实时数据:这部分主要是各种实时的系统使⽤,⽐如我们的实时推荐、实时⽤户画像,⼀般我们会⽤ Spark Streaming、Storm 或者Flink 来计算,最后会落⼊ Es、Hbase 或者 Redis 中。
1.6 维表层DIM?
维表层(Dimension)
最后补充⼀个维表层,维表层主要包含两部分数据:
⾼基数维度数据:⼀般是⽤户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别。
低基数维度数据:⼀般是配置表,⽐如枚举值对应的中⽂含义,或者⽇期维表。数据量可能是个位数或者⼏千⼏万。drupal7框架 中文文档
1.7 层级的简单分层图
见下图,对DWD层在进⾏加⼯的话,就是DWM层(MID层)(我们的数仓还是有很多dwm层的)shell编程语言学多久
【漫谈数据仓库】 如何优雅地设计数据分层
这⾥解释⼀下DWS、DWD、DIM和TMP的作⽤。
DWS:轻度汇总层,从ODS层中对⽤户的⾏为做⼀个初步的汇总,抽象出来⼀些通⽤的维度:时间、ip、id,并根据这些维度做⼀些统计值,⽐如⽤户每个时间段在不同登录ip购买的商品数等。这⾥做⼀层轻度的汇总会让计算更加的⾼效,在此基础上如果计算仅7天、30天、90天的⾏为的话会快很多。我们希望80%的业务都能通过我们的DWS层计算,⽽不是ODS。
DWD:这⼀层主要解决⼀些数据质量问题和数据的完整度问题。⽐如⽤户的资料信息来⾃于很多不同表,⽽且经常出现延迟丢数据等问题,为了⽅便各个使⽤⽅更好的使⽤数据,我们可以在这⼀层做⼀个屏蔽。(汇总多个表)
DIM:这⼀层⽐较单纯,举个例⼦就明⽩,⽐如国家代码和国家名、地理位置、中⽂名、国旗图⽚等信息就存在DIM层中。
什么叫下拉菜单TMP:每⼀层的计算都会有很多临时表,专设⼀个DWTMP层来存储我们数据仓库的临时表。
⼆. 问题
2.1 DWS 与 DWD?
问答⼀: dws 和 dwd 的关系
问:dws 和dwd 是并⾏⽽不是先后顺序?
答:并⾏的,dw 层
问:那其实对于同⼀个数据,这两个过程是串⾏的?
答:dws 会做汇总,dwd 和 ods 的粒度相同,这两层之间也没有依赖的关系
问:对呀,那这样 dws ⾥⾯的汇总没有经过数据质量和完整度的处理,或者单独做了这种质量相关的处理,为什么不在 dwd 之上再做汇总呢?我的疑问其实就是,dws的轻度汇总数据结果,有没有做数据质量的处理?
答:ods 直接到 dws 就好,没必要过 dwd,我举个例⼦,你的浏览商品⾏为,我做⼀层轻度汇总,就直接放在 dws 了。但是你的资料表,要从好多表凑成⼀份,我们从四五份个⼈资料表中凑出来了⼀份完整的资料表放在了 dwd 中。然后在 app 层,我们要出⼀张画像表,包含⽤户资料和⽤户近⼀年的⾏为,我们就直接从dwd中拿资料, 然后再在 dws 的基础上做⼀层统计,就成⼀个app表了。当然,这不是绝对,dws 和 dwd 有没有依赖关系主要看有没有这种需求。
2.2 ODS与DWD区别?
问:还是不太明⽩ ods 和 dwd 层的区别,有了 ods 层后感觉 dwd 没有什么⽤了。
答:嗯,我是这样理解的,站在⼀个理想的⾓度来讲,如果 ods 层的数据就⾮常规整,基本能满⾜我们绝⼤部分的需求,这当然是好的,这时候 dwd 层其实也没太⼤必要。 但是现实中接触的情况是 ods 层的数据很难保证质量,毕竟数据的来源多种多样,推送⽅也会有⾃⼰的推送逻辑,在这种情况下,我们就需要通过额外的⼀层 dwd 来屏蔽⼀些底层的差异。
问:我⼤概明⽩了,是不是说 dwd 主要是对 ods 层做⼀些数据清洗和规范化的操作,dws 主要是对 ods 层数据做⼀些轻度的汇总?
答:对的,可以⼤致这样理解。
2.3 app层⼲什么的?
问答三:app 层是⼲什么的?
问:感觉数据集市层是不是没地⽅放了,各个业务的数据集市表是应该在 dwd 还是在 app?
答:这个问题不太好回答,我感觉主要就是明确⼀下数据集市层是⼲什么的,如果你的数据集市层放的就是⼀些可以供业务⽅使⽤的宽表表,放在 app 层就⾏。如果你说的数据集市层是⼀个⽐较泛⼀点的概念,那么其实 dws、dwd、app 这些合起来都算是数据集市的内容。
问:那存到 Redis、ES 中的数据算是 app层吗?
答:算是的,我个⼈的理解,app 层主要存放⼀些相对成熟的表,能供业务侧使⽤的。这些表可以在 Hive 中,也可以是从 Hive 导⼊Redis 或者 ES 这种查询性能⽐较好的系统中。
三. 总结
另⼀个博主的图蛮好:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论