数据仓库分层很多文章都有写,差异虽然不大,但是总是有一些点会让人疑惑,现在自己根据看过的文章总结一下自己对数仓的认识,方便以后回看,也让自己对数仓的认知保持一致
1.数据仓库特点:
主题性:从公司的业务出发,分析的的是宏观领域:比如供应商主题、商品主题、客户主题和仓库主题。
集成性:数据仓库存储的数据可能来自不同的数据源,存储方式也不相同,集成便于管理和查询。
稳定性:数据仓库保存的数据是一系列历史快照,不允许修改,只能查询
动态性:数仓会定期接受新的集成数据,反映数据的最新变化,当数据超过数仓存储期限或者对分析无用时,数仓会删除这些数据。数仓的结构和维护信息存储在数仓的元数据里。
2.数仓分层:
第一层:ODS层(操作数据层)和DIM层(维度数据层),ODS层的数据是业务数据库原始数据的复制,目的是为了在业务数据库和数据仓库之间形成隔离。在源数据进入这一层时,通常需要数据清洗,如业务字段提取、去掉不需要的字段,脏数据处理等。DIM层主要保存的是维度数据,比如城市、时间等。
第二层:DWD层(明细数据层),DWD层的数据是根据ODS层和DIM层的数据做轻度汇总,同时也会对数据进行再次清洗(去除脏数据、超极限数据等),所以DWD层保存的是经过处理的标准数据。DWD层的数据结构和粒度与ODS层保持一致,但是汇总了DIM层的维度数据,比如在ODS层只能看到客户端的ID,在DWD层还能看到客户端名称。
第三层:DWS层(汇总数据层),是以DWD层的数据为基础进行汇总计算的数据。DWD层的数据既包含细粒度的宽表,也包含粗粒度的汇总表。比如打车业务,有基于用户、订单、司机、车辆等细粒度的宽表,也有基于维度组合的(如用户日下单量汇总,司机接单量汇总)。
个人认为数据指标字典里面的数据指标开发主要在DWD和DWS层体现,不知道是否正确。
第四层:ADS层(应用数据层),ADS层是基于DWS层数据进行处理,主要是为了给数据可视化应用提供数据,后端工程师将数据结果以接口的形式提供给前端或者其他应用的开发。
3.为什么使用数仓?
除了上文提到的数仓的特点之外,数仓主要在应对数据指标开发过程中的需求变更,也更加灵活高效。
(1)数据指标口径发生变化:随着业务目标的变化,数据指标统计逻辑也发生变化
比如统计订单的交易额,之前的口径是包含所有订单的金额,现在改为包含所有已支付的订单金额。此时如果是传统的数据库,需要走需求变更流程才能解决
如果是数仓分层建模,ADS、DWD层的数据都不需要变化(原始数据没有变化,商户指标显示内容也没有变化),只需要在DWD层增加筛选订单状态为“已支付”的统计逻辑并测试数据准确性即可,不需要重新发布接口。
(2)增加数据指标的统计维度:
比如要查看商城当月的交易额,现在增加客户端维度,分为安卓,IOS端分别查看,如果进行分层建模,由于在DIM层已经包含了客户端的维度,在DWD和DWS层也已经丰富了交易额的维度(客户端、城市等),只需要后端开发工程师在通过接口提取ADS层数据时,新增维度“安卓端”和“IOS”端并重新发布接口即可,不需要数据开发工程师的参与
总之,数仓分层是为了避免数据开发过程中的“重复造车”。
注:本文内容是自学大数据的时候查资料或者看书总结而来,部分借鉴了大神们的著作,部分来自自己的浅薄愚见,想利用写文章的方式倒逼自己学习,如有大神看到有错漏的地方也欢迎批评指正,在下会根据各位的意见定时修改,也希望能和各位对大数据有兴趣的童鞋一起学习进步,谢谢