数仓及其维度(分层)建模(ODS DWD DWS DWT ADS)

2023-10-27

一. 数仓及其维度

1. 什么是数仓?

        数据仓库,简称数仓,( Data Warehouse )从逻辑上理解,数据库和数仓没有区别,都是通过数据库软件实现存放数据的地方,只不过从数据量来说,数据仓库要比数据库更庞大。

数仓主要是为企业制定决策,提供数据支持的。当业务简单,可以用数据库来存储,分析,制表。但当数据量几何式增长,需要跨机器整合时,数仓就是非常必要的了。

2. 数仓的特点

(1)集成性

        数仓中存储的数据来源于多个数据源,原始数据在不同数据源中的存储方式各不相同。要整合成为最终的数据集合,需要从数据源经过一系列抽取、清洗、转换的过程。

(2)稳定性

        数仓中保存的数据是历史记录,不允许被修改。用户只能通过分析工具进行查询和分析。

(3)动态性

        数仓的数据会随时间变化而定期更新,这里的定期更新不是指修改数据,一般是将业务系统发生变化的数据定期同步到数仓,和稳定性不冲突。不可更新是针对应用而言,即用户分析处理时不更新数据

(4)主题性

        传统数据库对应的业务不同,数仓需要根据需求,将不同数据源的数据进行整合,即数据一般都围绕某一业务主题进行建模。例如“贷款”主题、“存款”主题等。

(5)扩展性

        之所以有的大型数据仓库系统架构设计复杂,是因为考虑到了未来3-5年的扩展性,这样的话,未来不用太快花钱去重建数据仓库系统,就能很稳定运行。主要体现在数据建模的合理性,数据仓库方案中多出一些中间层,使海量数据流有足够的缓冲,不至于数据量大很多,就运行不起来了。

3. 数仓的数据哪里来?

(1)业务数据

        就是各行业在处理事务过程中产生的数据。比如用户在电商网站中登录、下单、支付等过程中,需要和网站后台数据库进行增删改查交互,产生的数据就是业务数据业务数据通常存储在MySQL、Oracle等数据库中。

(2)用户行为数据

        用户在使用产品过程中,通过埋点收集与客户端产品交互过程中产生的数据,并发往日志服务器进行保存。比如页面浏览、点击、停留、评论、点赞、收藏等。用户行为数据通常存储在日志文件中。

(3)爬虫数据

        通常事通过技术手段获取其他公司网站的数据。不建议同学们这样去做。

4. 什么是数仓的维度,为何要分层(分层的作用?)

        一个好的维度,决定着数仓的生死。数仓分层有利于:

(1)减少重复开发,在数据开发的过程中可以产生中间层,将公共逻辑下沉,减少重复计算;

(2)清晰数据结构,每个分层分工明确,方便开发人员理解;

(3)方便定位问题,通过分层了解数据血缘关系,在出问题的时候通过回溯定位问题;

(4)简单化复杂问题,和分治法思想类似,分而治之,将复杂的问题简单化,还能解耦

5. 数仓的维度建模和关系型建模的区别?

        数仓的关系型建模严格遵守三范式理论(第一范式:属性不可分割,第二范式:不能有部分函数型依赖,第三范式:不能有传递性函数依赖),数据冗余度低,但在大数据的场景下,查询效率低。

        维度模型相对清晰、简洁。以数据分析作为出发点,不遵循三范式,故数据存在一定的冗余。维度模型面向业务,将业务用事实表和维度表呈现出来,表结构简单,故查询简单,查询效率较高。

二. 典型维度建模

1. 一般分几层?

        不同的企业不同的业务类型服务不同的用户,没有定论说分3、4层还是5层,只有最合适的分层。一般的数仓包含:离线数仓、准实时、实时数仓;我们这里是采用T+1离线数仓,分为五层架构。

2. 典型分层及其大致介绍(简单理解和总结)

1.ODS(Operation Data Store)

        原始数据,此层保存最原始数据,并且备份,备份时可以压缩。

2.DWD(Data Warehouse Detail)

        数据清洗,脱敏,维度退化。

3.DWS(Data Warehouse Summary)

        DWS层就是关于各个主题的加工和使用,是宽表聚合值。

4.DWT(Data Warehouse Topic)

        和DWS同,不过DWS层单位是日,而DWT是对截止到当日、或者近7日、近30日的汇总。

5.ADS(Application Data Store)

        ADS层是面向业务定制的应用数据层。

三. 每层具体介绍

1.ODS

ODS主要完成:

(1)保持数据原貌不做任何修改,保留历史数据,储存起到备份数据作用;

(2)数据一般采用lzo、Snappy、parquet等压缩格式;

(3)创建分区表,防止后续的全表扫描,减少集群资源访问数仓的压力,一般按天存储在数仓中。

数据来源:

(1)前端埋点日志信息

        由Kafka和flume采集到HDFS上;前端埋点日志以JSON格式形式存在,又分为两部分:

启动日志和事件日志。

(2)业务系统数据

        由mysql数据库数据通过sqoop这种数据同步工具,采集到HDFS上;

2.DWD

        DWD层是对事实表的处理,代表的是业务的最小粒度层。任何数据的记录都可以从这一层获取,为后续的DWS和DWT层做准备。还有对日志行为进行解析,以及对业务数据采用维度模型的方式重新建模(维度退化)。

DWD主要完成:

1. 数据清洗
(1)空值去除
(2)过滤核心字段无意义的数据,比如订单表中订单 id 为 null,支付表中支付 id 为空
(3)将用户行为宽表和业务表进行数据一致性处理

        清洗的手段包括Sql、mr、rdd、kettle、Python等等。清洗掉数据不能太多也不能很少。合理范围:1 万条数据清洗掉 1 条。

2. 脱敏
        对手机号、身份证号等敏感数据脱敏

3. 维度退化
        对业务数据传过来的表进行维度退化和降维。(商品一级二级三级、省市县、年月日)

4. 压缩

        LZO,列式存储 parquet

3.DWS

        DWS层就是关于各个主题的加工和使用,这层是宽表聚合值,是各个事实表的聚合值。这里做轻度的汇总会让以后的计算更加的高效,如:统计各个主题对象计算7天、30天、90天的行为, 应对特殊需求(例如,购买行为,统计商品复购率)会快很多不必走ODS层反复拿数据做加工。     

        这层会把每个用户单日的行为聚合起来组成一张多列宽表,以便之后关联用户维度信息后进行,不同角度的统计分析。

        涉及的主题包括:访客主题、用户主题、商品主题、优惠券主题、活动主题、地区主题等,更详细可参考【6】.

      

4.DWT

        这层涉及的主题和DWS层一样包括:访客主题、用户主题、商品主题、优惠券主题、活动主题、地区主题等。只不过DWS层的粒度是对当日用户汇总信息,而DWT层是对截止到当日、或者近7日、近30日等的汇总信息。

        以用户主题这个来举列:

*DWS层:用户主题层是记录某一个用户在某一天的汇总行为。

*DWT层:用户主题层是记录某一个用户截止在当日的汇总行为。

5.ADS

ADS层数据是专门给业务使用的数据层,这层是面向业务定制的应用数据层。

ADS主要完成:

(1)提供为数据产品使用的结果数据、指标等。

(2)提供给数据产品和数据分析使用的数据,一般会存放在 ES、MySQL等系统中供线上系统使用,也可能会存在 Hive 或者 Druid 中供数据分析和数据挖掘使用。如报表数据,或者说那种大宽表。

        这个项目中ADS层也是包含有多个主题:设备主题、会员主题、商品主题、营销主题、地区主题、访客主题、用户主题、订单主题、优惠券主题、活动主题等等。每个主题都包含多个指标的计算。

参考来源:

【1】CSDN:大数据的奇妙冒险,通俗易懂:什么是数仓。

【2】b站:尚硅谷:数仓4.0。尚硅谷的个人空间_哔哩哔哩_bilibili

【3】知乎:张飞的猪,数据仓库(1)什么是数据仓库,数仓有什么特点。

【4】墨天轮:畅谈Fintech,数仓(十八)数仓建模以及分层总结。

【5】CSDN:billows9297,数仓分层(ODS、DWD、DWS、DWT、ADS)和数仓建模

billows9297

【6】博客园:Kris12,数据仓库1.4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数仓及其维度(分层)建模(ODS DWD DWS DWT ADS) 的相关文章

  • 软件测试经验分享

    软件测试 一个熟悉又略显陌生的词汇 不同人对软件测试有不同的理解 如果把软件比作一片辽阔的区域 地形复杂 设置有许多个目的地 每个目的地都有多条道路可以到达 每条道路上都可能埋藏了威力不一的地雷 测试人员的职责就是在用户进入这片区域之前 试

随机推荐

  • BroadcastChannel:weex跨页面通信

    场景如下 一个列表页面用于展示所有未完成的作业 点击列表的某一项 会跳转到该项作业的详细信息界面 可以在这里将作业标记为已完成 一旦标记后 列表中就不应该再存在此作业了 在这里 列表相当于一个主页面 详细信息界面是子页面 主界面浏览到第10
  • 如何使用Java反射机制获取类的所有构造函数呢?

    转自 如何使用Java反射机制获取类的所有构造函数呢 下文讲述使用Java反射获取一个类的所有构造方法分享 如下所示 实现思路 1 forName 获取指定的Class对象 2 getConstructors 可返回一个构造函数对象数组 例
  • 自定义maven插件 Hello, mojo.

    文章目录 pom xml GreetingMojo java 运行 install install 报错 配置代理 pom xml 中添加配置 参考文档 https maven apache org guides plugin guide
  • CSS3 transition 属性过渡效果 详解

    CSS3 transition 允许 CSS 元素的属性值在一定的时间区间内平滑地过渡 我们可以在不使用 Flash 动画或 JavaScript 的情况下 在元素从一种样式变换为另一种样式时为元素添加效果 这种效果可以在鼠标单击 获得焦点
  • mmcv与cuda,pytorch版本匹配要求

    mmcv与cuda pytorch版本兼容要求 见mmcv官方文档 https mmcv readthedocs io zh CN latest get started installation html pip 安装部分 目前网页上默认最
  • 【SQL注入13】referer注入基础及实践(基于BurpSuite工具和Sqli-labs-less19靶机平台)

    目录 1 概述 2 实验简介 2 1 实验平台 2 2 实验目标 3 实验过程 3 1 前戏 3 2 判断注入点及注入类型 3 3 获取库名表名字段名字段内容 3 4 实验结果 4 总结 1 概述 Referer 是 HTTP 请求头的一部
  • 小程序能当成 App 吗?FinCip:能

    如果早些年提问 把小程序当成 App 使用 本身就是一件天方夜谭的问题 好像业务人员不再关注研发工程师是否能够按期交付代码 而是想自己在屏幕上点击几下光标 编程软件就能快速生成无数个页面和应用 时光荏苒一去不返 如今的低代码产品早都把 拖拉
  • Google 的开源技术protobuf 简介与例子

    今天来介绍一下 Protocol Buffers 以下简称protobuf 这个玩意儿 本来俺在构思 生产者 消费者模式 系列的下一个帖子 关于生产者和消费者之间的数据传输格式 由于里面扯到了protobuf 想想干脆单独开一个帖子算了 p
  • 登录注册代码

    服务器的建立 服务器中的代码 浏览器代码 MyHttpManager代码 Main代码 注册界面的代码 文本文档流程图 服务器的建立 1 右键在web里面找到Dynamic web project 建立一个服务器 在Java Resourc
  • Error: JAVA_HOME is not set and java could not be found in PATH.

    CSDN话题挑战赛第2期 参赛话题 学习笔记 目录 前言 问题 解决办法 测试 启动成功 查看状态 关闭服务 前言 因为zookeeper服务器多 每一次启动 关闭和查看状态都很麻烦 所以通过shell脚本启动zookeeper集群 写完的
  • 二叉树、队列、栈、广义表(二)数据结构与算法(十八)

    数据结构与算法 一 软件设计 十七 https blog csdn net ke1ying article details 129220378 线性表 队列与栈 队列 先进先出 栈 先进后出 循环队列 队投和队尾连接起来 队空的条件 Hea
  • sqlserver跨服务器查询性能,sqlserver 多表查询不同数据库服务器上的表

    第一种方法 创建链接服务器 exec sp addlinkedserver srv lnk sqloledb 条码数据库IP地址 exec sp addlinkedsrvlogin srv lnk false null 用户名 密码 go
  • Android Studio 升级 Flamingo 后 Gradle 又挂了

    1 Gradle 7 2 才支持 Java 17 Unsupported Java Your build is currently configured to use Java 17 0 6 and Gradle 5 0 Possible
  • 求最小素因子和最大素因子

    转载自 https blog csdn net wsniyufang article details 6623576 include
  • ERR_UNKNOWN_URL_SCHEME 导致的可能问题

    今晚在做跨域测试的时候 明明已经用了 jsoup去处理 但却一直报 ERR UNKNOWN URL SCHEME 错误 然后就是百度找答案 但是也没有解决问题 然后看了一下自己请求的地址是下面这样的 前面没有加上 http 所以我在前面加上
  • Docker+Nginx:实现网站部署的灵活性与高效性

    Hi I m Huuuui 这次为大家简单介绍一下docker环境中去部署nginx 希望能够帮到大家 环境 1 拉取nginx镜像 拉取镜像 docker pull nginx 查看镜像 docker images 2 本地创建映射文件夹
  • E罗斯宝藏网站,收藏起来一定用的到!

    网站叫做https rutracker org 收藏起来总有一天你会用得到 你可以在这里获取各种资源 例如Adobe全家桶 Windows系统 以及各种游戏和3a大作电影等 当初为了打击盗版被封禁 现在因为各大公司对E罗斯的制裁 该网站已被
  • 数据库开发技术

    第一次作业 一 单选题 共40题 80分 1 单选题 2分 单选题 在E R模型中 实体间的联系用 图标来表示 A 矩形 B 直线 C 菱形 D 椭圆 我的答案 C 菱形 正确答案 C 菱形 2分 2 单选题 2分 单选题 设R是一个关系模
  • antd中form表单的正则校验

    以下面input为例
  • 数仓及其维度(分层)建模(ODS DWD DWS DWT ADS)

    一 数仓及其维度 1 什么是数仓 数据仓库 简称数仓 Data Warehouse 从逻辑上理解 数据库和数仓没有区别 都是通过数据库软件实现存放数据的地方 只不过从数据量来说 数据仓库要比数据库更庞大 数仓主要是为企业制定决策 提供数据支