说下自己的理解:

数据仓库是分层的,通常情况下都是进行三层建模(当然也不是绝对的)。

例如上次说的商品订单数据表,表字段可能有非常多个,但是我们使用的时候可能只用到UID,PayTime,CreateTime, PayMoney,等字段。这个过程需要不断的过滤。每过滤一层就需要在新的一层储存一次。类比在Hive中有个表分区的概念,把一张大表按照业务需求拆分为两张表,减少了扫描的量级。

下面说下常用的分层类型:

业务数据层:包含 STG(数据缓冲层)与 ODS(操作数据层)两层,这两层数据结构与业务数据几乎一致。

STG:也叫数据准备区,定位是缓存来自 DB 抽取、消息、日志解析落地的临时数据,结构与业务系统保持一致;负责对垃圾数据、不规范数据进行清洗转换;该层只为 ODS 层服务;

ODS:操作数据层定位于业务明细数据保留区,负责保留数据接入时点后历史变更数据,数据原则上全量保留。模型设计依据业务表数据变更特性采取拉链、流水表两种形式。(据我所知通常在大数据环境下,通常采取快照的形式,拉链表不好维度后期)

公共数据层:细分为 DWD(明细数据层)、DWS(汇总数据层)、DIM(公共维度层) 三层,主要用于加工存放整合后的明细业务过程数据,以及经过轻度或重度汇总粒度公共维度指标数据。公共数据层作为仓库核心层,定位于业务视角,提炼出对数据仓库具有共性的数据访问、统计需求,从而构建面向支持应用、提供共享数据访问服务的公共数据。

DWD:这一层是整合后的业务过程明细数据,负责各业务场景垂直与水平数据整合、常用公共维度冗余加工,以及明细业务标签信息加工;

DWS:汇总数据层按照主题对共性维度指标数据进行轻度、高度聚合;

DIM:对维度进行统一标准化定义,实现维度信息共享。

下面这两层容易混淆,其实企业在搭建后的作用是基本一样的:

DM:数据集市层,DM层只关心自己需要的数据,不会考虑企业整体的业务架构,所以也可以单独建立

ADS:  数据应用层,也叫DM(数据集市)也叫APP(数据应用层),面向实际的数据需求,以DWD或者DWS层的数据为基础,组成的各种统计报表。

通常这个是数据仓库的最后一层数据,为应用层数据,直接可以给业务人员使用。比如某日某个日的支付成功率是多少、某专场的总的销售金额多少

为什么分层?:

我们肯定希望自己的数据能够有秩序地流转,数据的整个生命周期能够清晰明确被设计者和使用者感知到。直观来讲就是如下的左图这般层次清晰、依赖关系直观。

但是,大多数情况下,我们完成的数据体系却是依赖复杂、层级混乱的。在不知不觉的情况下,我们可能会做出一套表依赖结构混乱,甚至出现循环依赖的数据体系。

分层的好处:

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

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

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

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

我在工作当中技术所才采取的分层架构如下图:

数据模型的设计:

目前业界主要的模型设计方法论有两种,

一是Inmon 的范式建模方法,又叫 ER 建模,主张站在企业角度自上而下进行数据模型构建

二是Kimball的维度建模方法,主张从业务需求出发自下而上构建数据模型。

简单说下两种方法的对比:

我们采取的是第二种类。通常在实际的大数据环境下,业务系统数据体系庞杂,数据结构多样、变更频繁,并且需要快速响应各种复杂的业务需求,以上两种传统的理论都已无法满足互联网数仓需求。大多企业(我所了解的)会采用混合模型设计方式,以需求驱动为主、数据驱动为辅

在大数据环境下的数据分层中不同的层次中用的计算引擎和存储系统如下:

分别的作用为:

ODS:原始数据层

数据来源可能是通过Flume监控、Sqoop导入.......,Flume可以定义拦截器,进行数据ETL。Sqoop通过sql语句,进行数据ETL。

所以很多情况下ods存放的ETL之后的原始数据。

这样就在在业务系统和数据仓库之间形成一个隔离层,保存的是原始数据或者ETL之后的原始数据,而且以后DW层需要使用数据则直接从ODS抽取,不用从源数据系统拿,很方便

DWD:数据明细层

是为企业所有级别的决策制定过程,提供所有类型数据支持的集合,包含所有主题的通用的集合

会在ods层基础上,可能做三件事:

1.结构和粒度与ods保持一致,对ods层数据进行再次清洗(去空、去脏数据,去超过极限的数据)

2.调整压缩算法、存储格式,在Hive中文件存储格式有四种:TEXTFILE 、SEQUENCEFILE、ORC、PARQUET,前面两种是行式存储,后面两种是列式存储。通常都使用ORC,parquet这两种进行存储,起码我这边是。

行式存储比较类似MYSQL的形式,符合面向对象的思想,相关的数据是保存在一起,比较符合面向对象的思维,因为一行数据就是一条记录。

列式存储则是:查询时只有涉及到的列才会被查询,不会把所有列都查询出来,即可以跳过不必要的列查询。由于每列的数据格式一样,所以压缩率高效,不仅节省储存空间也节省计算,提高效率。

查询速度:当数据量较大时,列式存储快,数据量小的时候,查询速度无明显区别。

3.看是否会进行维度退化,比如说地区这个维度,在mysql中分了国家、省份、城市三个维度,那么将其合并成一个维度! sql语句比较好实现,也就是三张表合并为一张表。

DWS:数据服务层

以dwd为基础,进行轻度汇总,一般聚集到以用户当日、设备当日、商家当日、商品当日等等的粒度。

在这层通常会有组成跨主题的宽表,比如一个用户的当日签到数、收藏数、评论数、抽奖数、订阅数、浏览商品数、添加购物车数、下单数、支付数等组成的多列表

这一层通常就是一张行为宽表,以时间(每天、每周、每月)统计用户(商品、商家)所做的所有事!!!(是最重要的中间表)

如果有了这一层,那么对于DM层的什么地区签到、收藏、总评论数等指标都能灵活实现

原始数据到ADS层:

由于随着业务需求的不断变化,对于实时计算的要求越来越高(数仓分为实时数仓和离线数仓)。比如大屏数据实时展示,实时监控系统,实时交易数据....等

这时后采用Spark streaming等实时计算引擎,把需要接收到的实时数据灌入Kafka里面(消息中间件),然后Spark streaming 去拉取Kafka里面的数据。

如果要做数据量大的实时处理,需要用分布式,否则数据量大的时候,一点一点去处理会处理到猴年马月

以后会粗略总结下大数据生态下的各个组件成员,【( ̄へ ̄)因为我没到达不精通】

数据仓库—stg层_数据产品-数据仓库分层建模相关推荐

  1. 数据仓库—stg层_有赞数据仓库实践之路

    原标题:有赞数据仓库实践之路 一.大数据环境下的有赞数仓 关于数据仓库,在维基百科中将它定义为 用于报表和数据分析的系统,是商务智能 Business Intelligence 的核心部分.在数据仓库 ...

  2. 数据仓库—stg层_数据仓库之Hive快速入门 - 离线实时数仓架构

    数据仓库VS数据库 数据仓库的定义: 数据仓库是将多个数据源的数据经过ETL(Extract(抽取).Transform(转换).Load(加载))理之后,按照一定的主题集成起来提供决策支持和联机分析 ...

  3. 数据仓库—stg层_马蜂窝数据仓库的架构、模型与应用实践

    (马蜂窝技术原创内容,公众号ID:mfwtech) 一.马蜂窝数据仓库与数据中台 最近几年,数据中台概念的热度一直不减.2018 年起,马蜂窝也开始了自己的数据中台探索之路. 数据中台到底是什么?要不 ...

  4. 数据仓库—stg层_手把手教你创建BI数据仓库STG层

    致力做一个首先想的是怎么帮助别人的人 点赞再看,谢谢支持 数仓分层 通常建立数据仓库,都会分层建模,一般分为3层,STG层,DW层,DM层. STG层 STG层一般为贴源层,字面意思就是和源系统贴近的 ...

  5. 数据仓库—stg层_数据仓库(一):认识数据仓库

    刚接触数据仓库是在我的第一份实习工作--数据中心数据管理系统开发,它是一个B/S架构的应用,与一般的项目不同的是,系统是以数据仓库来进行数据存取的,这是我第一次听说数仓这个词,感觉它庞大而且神秘,不知 ...

  6. 数据产品经理修炼手册_数据产品经理需要了解的大数据平台架构

    了解大数据平台的基础架构有助于我们清楚数据是怎么流转与处理的,在每一层的结构中数据是以什么形式存储的,当我们听到工程师们谈论到这些内容时,不至于一无所知. 本文内容偏基础,适合像作为入门了解. 文不如 ...

  7. 虚幻蓝图数据传递_数据产品的战略蓝图

    虚幻蓝图数据传递 In today's business climate, strategic moats are built with data. Long gone are the days wh ...

  8. 产品功能树图_数据产品经理之图表设计

    本文介绍了数据产品经理需要懂的常用图表设计,并针对19种图表的定义.适用场景.优缺点,进行了分析说明. 概述 数据产品经理在日常产品设计时经常需要设计一些图表来对数据进行更好的展现,也能方便用户更好的 ...

  9. sql 某列数据全部为0则不显示该列_数据产品经理养成记(五):汇总分析

    学会了如何查找数据后,接下来就要对数据进行分析处理,比如求和.平均值.加总等等.这些对数据的加工处理通过汇总函数来实现.汇总函数在之前的两篇文章中都有涉及,这里采用概念--案例--总结的方式,集中介绍 ...

最新文章

  1. CentOS 6.5 LVM磁盘管理学习笔记
  2. 96. Leetcode 494. 目标和 (动态规划-背包问题)
  3. 机器学习中 True Positives(真正例TP)、False Positives(假正例FP)、True Negatives(真负例TN)和 False Negatives(假负例FN)指什么
  4. C++反汇编第五讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式....
  5. 中汽中心软件测评中心与紫光国微达成芯片认证合作
  6. 第 5 章 单例设计模式
  7. Protobuf使用手册--中文版
  8. SPSS怎么筛选无效数据
  9. 300最不常用的springboot计算机毕业设计题目汇总,总有你需要用到的
  10. 吉林大学考研计算机系分数线,吉林大学考研计算机分数线相关交流问答贴 小木虫论坛-学术科研互动平台...
  11. TextWrangler——一款不知为何而生的编辑器
  12. C语言中fopen函数使用举例及打开方式列表
  13. 深度学习 -- SSD 算法流程详解
  14. layui中导航元素的简单使用
  15. Arduino语法详解,部分带注释(学习笔记)
  16. Word文档目录自动生成和页码设置
  17. 安卓手机google商店的账号切换退出方式
  18. 密码编码学与网络安全(2):对称密码之传统加密技术
  19. IDEA--输入法无法输入中文
  20. DevOps:5大工具

热门文章

  1. 瞰见|迷失的开源乌托邦
  2. 获取当前所在地的天气
  3. php 支付宝 支付 prepay_id,支付宝微信统一支付
  4. UX、UI、 IA和IxD
  5. 职业生涯规划中的刺猬理念
  6. LF4J: No SLF4J providers were found. SLF4J: Defaulting to no-operation (NOP) logger implemen
  7. 谷歌研究员走火入魔事件曝光:认为AI已具备人格,被罚带薪休假,聊天记录让网友San值狂掉...
  8. MZOJ #82 总统竞选
  9. JavaScript快速入门到高级 JS精品视频课程
  10. Windows 7 bluetooth 外围设备 解决方案