第一篇:数据仓库分层概念

一 为什么要对数据仓库分层?
1)用空间换时间,通过大量的预处理来提升应用系统的用户体验(效率),因此数据仓库会存在大量冗余的数据;
(2)如果不分层的话,如果源业务系统的业务规则发生变化将会影响整个数据清洗过程,工作量巨大;
(3)通过数据分层管理可以简化数据清洗的过程,因为把原来一步的工作分到了多个步骤去完成,相当于把一个复杂的工作拆成了多个简单的工作,把一个大的黑盒变成了一个白盒,每一层的处理逻辑都相对简单和容易理解,这样我们比较容易保证每一个步骤的正确性,当数据发生错误的时候,往往我们只需要局部调整某个步骤即可。

二  数据分层

1. ODS 数据准备层(operational data store (操作存储数据层)原汁原味的数据集

功能:ODS层是数据仓库准备区,为DWD层提供基础原始数据,可减少对业务系统的影响

建模方式及原则:从业务系统增量抽取、保留时间由业务需求决定、可分表进行周期存储、数据不做清洗转换与业务系统数据模型保持一致、按主题逻辑划分

2. DWD 数据明细层(data warehouse detail(数仓库详细层)增加合并操作

功能:为DW层提供来源明细数据,提供业务系统细节数据的长期沉淀,为未来分析类需求的扩展提供历史数据支撑

建模方式及原则:数据模型与ODS层一致,不做清晰转换处理、为支持数据重跑可额外增加数据业务日期字段、可按年月日进行分表、用增量ODS层数据和前一天DWD相关表进行merge处理

所做事情:在源数据装入这一层时,要进行诸如去噪(例如去掉明显偏离正常水平的银行刷卡信息)、去重(例如银行账户信息、公安局人口信息中均含有人的姓名,但是只保留一份即可)、提脏(例如有的人的银行卡被盗刷,在十分钟内同时有两笔分别在中国和日本的刷卡信息,这便是脏数据)、业务提取、单位统一、砍字段(例如用于支撑前端系统工作,但是在数据挖掘中不需要的字段)、业务判别等多项工作。

3. DW(B/S) 数据汇总层(数据清洗合并聚合汇总

功能:为DW、ST层提供细粒度数据,细化成DWB合DWS;

DWB(data warehouse basis 数据仓库基础层  轻度汇总层)是根据DWD明细数据经行清晰转换,如维度转代理键、身份证清洗、会员注册来源清晰、字段合并、空值处理、脏数据处理、IP清晰转换、账号余额清洗、资金来源清洗等;

DWS(data warehouse service 数据仓库服务层 主题层)是根据DWB层数据按各个维度ID进行粗粒度汇总聚合,如按交易来源,交易类型进行汇合

所做事情:数据仓库的主体,在这里从DWD层中获得的数据按照主题建立各种数据模型。例如以研究人的旅游消费为主题的数据集中,便可以结合航空公司的登机出行信息,以及银联系统的刷卡记录,进行结合分析,产生数据集。在这里,我们需要了解四个概念:维(dimension)、事实(Fact)、指标(Index)和粒度( Granularity)。
DM层:数据集市,从数据的时间跨度来说,通常是DW层的一部分,按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等

4. DM 数据集市层(Dictionary Data Layer 字典成 | 渠道,黑白名单 各类加工,业务服务

功能:可以是一些宽表,是根据DW层数据按照各种维度或多种维度组合把需要查询的一些事实字段进行汇总统计并作为单独的列进行存储;满足一些特定查询、数据挖掘应用;应用集市数据存储

建模方式及原则:尽量减少数据访问时计算,优化检索;维度建模,星型模型;事实拉宽,度量预先计算;分表存储

5. ST 数据应用层(应用层 | 直接导出,展示)

功能:ST层面向用户应用和分析需求,包括前端报表、分析图表、KPI、仪表盘、OLAP、专题等分析,面向最终结果用户;

适合作OLAP、报表模型,如ROLAP,MOLAP;根据DW层经过聚合汇总统计后的粗粒度事实表

建模方式及原则:保持数据量小;维度建模,星形模型;各位维度代理键+度量;增加数据业务日期字段,支持数据重跑;不分表存储

三  数据流向

原始数据->ODS

这里其实就是我们现在大数据技术发挥作用的一个主要战场。 我们的数据主要会有两个大的来源:
1、业务库,这里经常会使用sqoop来抽取,比如我们每天定时抽取一次。在实时方面,可以考虑用canal监听mysql的binlog,实时接入即可。
2、埋点日志,线上系统会打入各种日志,这些日志一般以文件的形式保存,我们可以选择用flume定时抽取,也可以用用spark streaming或者storm来实时接入,当然,flume+kafka是企业常用的组合。
其它数据源会比较多样性,这和具体的业务相关,不再赘述

ODS–> App层

这里面也主要分两种类型:
1、每日定时任务型:比如我们典型的日计算任务,每天凌晨算前一天的数据,早上起来看报表。 这种任务经常使用Hive、Spark或者MR程序来计算,最终结果写入Hive、Hbase、Mysql、Es或者Redis中。
2、实时数据:这部分主要是各种实时的系统使用,比如我们的实时推荐、实时用户画像,一般我们会用Spark Streaming、Storm或者Flink来计算,最后会落入Es、Hbase或者Redis中。

DW --> App层

DW分析完的数据,一般借助sqoop传输到关系型数据库如mysql,App层根据业务需要,以可视化的形式展示给决策层(BOSS)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章