【数据仓库】数仓分层方法
文章目录
- 一. 数仓分层的意义
- 1. 清晰数据结构。
- 2. 减少重复开发
- 3. 方便数据血缘追踪
- 4. 把复杂问题简单化
- 5. 屏蔽原始数据的异常
- 6. 数据仓库的可维护性
- 二. 如何进行数仓分层?
- 1. ODS层
- 2. DW层
- 2.1. DW层分类
- 2.2. DWD层
- 2.3. DWS
- 3. ADS层
- 4、层次调用规范
一. 数仓分层的意义
1. 清晰数据结构。
每一个数据分层都有它的作用域,这样我们能根据自己的需求会快定位到要使用那些层的哪些表。
例如:客户信息同时存在于核心系统、信贷系统、理财系统、资金系统,取数时该如何决策呢?数据仓库会对相同主题的数据进行统一建模,把复杂的数据关系梳理成条理清晰的数据模型,使用时就可避免上述问题了。
2. 减少重复开发
规范数据分层,开发一些通用的中间层数据,能够减少数据的重复计算。
数据的逐层加工原则,下层包含了上层数据加工所需要的全量数据,这样的加工方式避免了每个数据开发人员**都重新从源系统抽取数据进行加工。**极大地减少不必要的数据冗余,也能实现计算结果复用,极大地降低存储和计算成本。
3. 方便数据血缘追踪
简单来说,最终给业务呈现的是一个能直接使用的业务表,但是它的数据来源有很多,如果有一张来源表出问题了,分层后的数仓能够快速准确地定位到问题,并清楚它的危害范围。
4. 把复杂问题简单化
将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
5. 屏蔽原始数据的异常
源头系统可能极为繁杂,而且表命名、字段命名 、字段含义等可能五花八门,通过 DW 层来规范和屏蔽所有这些复杂性。如果源头系统业务发生变更,相关的变更由 DW 层来处理,对下游用户透明,无须改动下游用户的代码和逻辑。
6. 数据仓库的可维护性
分层的设计使得某一层的问题只在该层得到解决,无须更改下一层的代码和逻辑。
二. 如何进行数仓分层?
数据分层最基础的分层思想将数据分为三个层:数据引入层(ODS)、数据仓库层(DW)和数据服务层(ADS)。可以基于基础分层之上添加新的层次,来满足不同的业务需求。


1. ODS层
数据引入层(ODS,Operational Data Store,又称数据基础层),是最接近数据源中数据的一层,这将原始数据几乎无处理地存放在数据仓库系统中,结构上与源系统基本保持一致。
这一层的主要职责是解决数据孤岛问题,保证数据集成完整性;数据与源系统表一致,体现非易失性;定期同步,增加表同步时间戳,体现时变性。
ODS层数据的来源方式:
- 业务库
离线:hive、flink批模式、sqoop定时调度。
实时:在实时方面, 可以考虑用canal监听mysql的binlog,实时接入即可。
-
埋点日志
-
线上系统会打入各种日志,这些日志一般以文件的形式保存,
离线:用flume定时抽取。
实时:用spark streaming或者Flink来实时接入存放到kafka中。
- 消息队列:来自ActiveMQ、Kafka的数据等。
2. DW层
数仓层(DW, data warehouse)是核心设计的一层,本层将从 ODS 层中获得的数据按照主题建立各种数据模型,每一个主题对应一个宏观的分析领域,数据仓库层排除对决策无用的数据,提供特定主题的简明视图。在DW层会保存BI系统中所有的历史数据,例如保存10年的数据。
DW存放明细事实数据、维表数据及公共指标汇总数据。
- 明细事实数据、维表数据一般根据ODS层数据加工生成。
- 公共指标汇总数据一般根据维表数据和明细事实数据加工生成。
2.1. DW层分类
DW层又可以细分为维度层(DIM)、明细数据层(DWD)和汇总数据层(DWS)。
分层作用:
- 通过维度模型方法,可以定义维度模型主键与事实模型中外键关系,减少数据冗余,也提高明细数据表的易用性。
- 在汇总数据层同样可以关联复用统计粒度中的维度,采取更多的宽表化手段构建公共指标数据层,提升公共指标的复用性,减少重复加工。
分类:
- 维度层(DIM,Dimension):以维度作为建模驱动,创建各维度表。为了避免在维度模型中冗余关联维度的属性,基于雪花模型构建维度表。
- 明细数据层(DWD,Data Warehouse Detail):以业务过程作为建模驱动,构建最细粒度的明细事实表。
- 汇总数据层(DWS,Data Warehouse Summary):以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标表。为上层提供公共指标,建立汇总宽表、明细事实表。
2.2. DWD层
DWD层做了哪些事?
1.数据清洗过滤
去除废弃字段,去除格式错误的信息
去除丢失了关键字段的信息
过滤核心字段无意义的数据,比如订单表中订单id为null,支付表中支付id为空
对手机号、身份证号等敏感数据脱敏
2.数据映射,转换
如boolean,有使用0 1标识,也有使用true false标识的
如字符串空值,有使用"",也有使用null,的,统一为null即可
如日期格式,这种就差异性更大,需要根据实际业务数据决定,不过一般都是格式化为YYYY-MM-dd HH:mm:ss 这类标准格式
2.3. DWS
DWS( data warehouse service)数据服务层,汇总层宽表
DWS是根据DWD层基础数据按各个维度ID进行粗粒度汇总聚合,如按交易来源,交易类型进行汇合。整合汇总成分析某一个主题域的服务数据,一般是宽表。
该层数据表会相对比较少,大多都是宽表(一张表会涵盖比较多的业务内容,表中的字段较多)。按照主题划分,如订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。
比如用户每个时间段在不同登录ip购买的商品数等。这里做一层轻度的汇总会让计算更加的高效,在此基础上如果计算7天、30天、90天的行为会快很多。80%的业务都能通过DWS层计算,而不是ODS。
公共汇总事实表命名规范:
dws_{业务板块缩写/pub}_{数据域缩写}_{数据粒度缩写}[_{自定义表命名标签缩写}]_{统计时间周期范围缩写}。
关于统计实际周期范围缩写,缺省情况下,离线计算应该包括最近一天(_1d),最近N天(_nd)和历史截至当天(_td)三个表。如果出现_nd的表字段过多需要拆分时,只允许以一个统计周期单元作为原子拆分。即一个统计周期拆分一个表,例如最近7天(_1w)拆分一个表。不允许拆分出来的一个表存储多个统计周期。
对于小时表(无论是天刷新还是小时刷新),都用_hh来表示。对于分钟表(无论是天刷新还是小时刷新),都用_mm来表示。
举例如下:
dws_asale_trd_byr_subpay_1d(买家粒度交易分阶段付款一日汇总事实表)
dws_asale_trd_byr_subpay_td(买家粒度分阶段付款截至当日汇总表)
dws_asale_trd_byr_cod_nd(买家粒度货到付款交易汇总事实表)
dws_asale_itm_slr_td(卖家粒度商品截至当日存量汇总表)
dws_asale_itm_slr_hh(卖家粒度商品小时汇总表)—维度为小时
dws_asale_itm_slr_mm(卖家粒度商品分钟汇总表)—维度为分钟
3. ADS层
数据应用层(ADS,Application Data Store)存放着数据产品个性化的统计指标数据,报表数据。
应用层主要是各个业务方或者部门基于DWD和DWS建立的数据集市(Data Market, DM),一般来说应用层的数据来源于DW层,而且相对于DW层,应用层只包含部门或者业务方面自己关心的明细层和汇总层的数据。
APP 层:为应用层,这层数据是完全为了满足具体的分析需求而构建的数据,也是星形或雪花结构的数据。如我们经常说的报表数据,或者说那种大宽表,一般就放在这里。包括前端报表、分析图表、KPI、仪表盘、OLAP、专题等分析,面向最终结果用户。
应用层是根据业务需要,由前面三层数据统计而出的结果,可以直接提供查询展现,或导入至Mysql中使用。
4、层次调用规范
-
禁止反向调用
-
ODS 只能被 DWD 调用。
-
DWD 可以被 DWS 和 ADS 调用。
-
DWS 只能被 ADS 调用。
-
数据应用可以调用 DWD、DWS、ADS,但建议优先考虑使用汇总度高的数据。
ODS->DWD->DWS>ADS
ODS->DWD->ADS
参考:
https://dbaplus.cn/news-73-4907-1.html
相关文章:
【数据仓库】数仓分层方法
文章目录 一. 数仓分层的意义1. 清晰数据结构。2. 减少重复开发3. 方便数据血缘追踪4. 把复杂问题简单化5. 屏蔽原始数据的异常6. 数据仓库的可维护性 二. 如何进行数仓分层?1. ODS层2. DW层2.1. DW层分类2.2. DWD层2.3. DWS 3. ADS层 4、层次调用规范 一. 数仓分层…...
Linux网络——自定义协议
目录 一.什么是协议 二.协议与报文 三.自定义协议 1.封装套接字 2.构建请求与响应 3.序列化和反序列化 4.报头添加和去除 5.报文读取 四.服务器端程序 五.客户端程序 一.什么是协议 协议在生活中泛指:双方或多方为了完成某项任务或达成某种目的而制定的共…...
【OpenCV实现图像:用OpenCV图像处理技巧之巧用直方图】
文章目录 概要前置条件统计数据分析直方图均衡化原理小结 概要 图像处理是计算机视觉领域中的重要组成部分,而直方图在图像处理中扮演着关键的角色。如何巧妙地运用OpenCV库中的图像处理技巧,特别是直方图相关的方法,来提高图像质量、改善细…...
【Android】画面卡顿优化列表流畅度四之Glide几个常用参数设置
好像是一年前快两年了,笔者解析过glide的源码,也是因为觉得自己熟悉一些,也就没太关注过项目里glide的具体使用对当前业务的影响;主要是自负,还有就是真没有碰到过这样的数据加载情况。暴露了经验还是不太足够 有兴趣的…...
js控制手机蓝牙
要使用JavaScript控制手机蓝牙,您需要使用Web Bluetooth API。这是一种新的Web API,可以让Web应用程序访问和控制蓝牙设备。 以下是一些步骤,以便您开始使用Web Bluetooth API: 检查浏览器支持:首先,您需要…...
C++11 原始字符串字面量R“()“
原始字符串字面量(Raw String Literals) R"()"是C11引入的一项特性,它允许创建不需要转义字符的字符串字面量。字符串中包含特殊字符、换行符和其他转义字符时,不需要反斜杠转义它们。 原始(Raw):不用使用反…...
【Vue原理解析】之虚拟DOM
Vue.js是一款流行的JavaScript框架,它采用了虚拟DOM(Virtual DOM)的概念来提高性能和开发效率。虚拟DOM是Vue.js的核心之一,它通过在内存中构建一个轻量级的DOM树来代替直接操作真实的DOM,从而减少了对真实DOM的操作次…...
HCIE-灾备技术和安全服务
灾备技术 灾备包含两个概念:容灾、备份 备份是为了保证数据的完整性,数据不丢失。全量备份、增量备份,备份数据还原。 容灾是为了保证业务的连续性,尽可能不断业务。 快照:保存的不是底层块数据,保存的是逻…...
【图论实战】Boost学习 01:基本操作
文章目录 头文件图的构建图的可视化基本操作 头文件 #include <boost/graph/adjacency_list.hpp> #include <boost/graph/graphviz.hpp> #include <boost/graph/properties.hpp> #include <boost/property_map/property_map.hpp> #include <boost/…...
Rust 中的引用与借用
目录 1、引用与借用 1.1 可变引用 1.2 悬垂引用 1.3 引用的规则 2、slice 类型 2.1 字符串字面量其实就是一个slice 2.2 总结 1、引用与借用 在之前我们将String 类型的值返回给调用函数,这样会导致这个String会被移动到函数中,这样在原来的作用域…...
Azure 机器学习:在 Azure 机器学习中使用 Azure OpenAI 模型
目录 一、环境准备二、Azure 机器学习中的 OpenAI 模型是什么?三、在机器学习中访问 Azure OpenAI 模型连接到 Azure OpenAI部署 Azure OpenAI 模型 四、使用自己的训练数据微调 Azure OpenAI 模型使用工作室微调微调设置训练数据自定义微调参数部署微调的模型 使用…...
XML Web 服务 Eclipse实现中的sun-jaxws.xml文件
说明 在sun-jaxws.xml文件,可以配置endpoint、handler-chain等内容。在这个文件中配置的内容会覆盖在Java代码中使用注解属性配置的的内容。 这个文件根据自己的项目内容修改完成以后,作为web应用的一部分部署到web容器中(放到web应用的WEB…...
16.1 二次根式 教学设计及课堂检测设计
课堂检测如下:...
Android数据流的狂欢:Channel与Flow
在 Android 应用程序的开发中,处理异步数据流是一个常见的需求。为了更好地应对这些需求,Kotlin 协程引入了 Channel 和 Flow,它们提供了强大的工具来处理数据流,实现生产者-消费者模式,以及构建响应式应用程序。 本文…...
Java 单元测试最佳实践:如何充分利用测试自动化
单元测试是众所周知的做法,但还有很大的改进空间!在这篇文章中,我们讨论最有效的单元测试最佳实践,包括在此过程中最大化自动化工具的方法。我们还将讨论代码覆盖率、模拟依赖关系和整体测试策略。 什么是单元测试? 单…...
windows系统用于 SDN 的软件负载均衡器 (SLB)
适用于:Azure Stack HCI 版本 22H2 和 21H2;Windows Server 2022、Windows Server 2019、Windows Server 2016 软件负载均衡器包括哪些内容? 软件负载均衡器提供以下功能: 适用于北/南和东/西 TCP/UDP 流量的第 4 层 (L4) 负载均…...
漏洞复现--IP-guard flexpaper RCE
免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…...
Electron-vue出现GET http://localhost:9080/__webpack_hmr net::ERR_ABORTED解决方案
GET http://localhost:9080/__webpack_hmr net::ERR_ABORTED解决方案 使用版本解决方案解决总结 使用版本 以下是我解决此问题时使用的electron和vue等的一些版本信息 【附】经过测试 electron 的版本为 13.1.4 时也能解决 解决方案 将项目下的 .electron-vue/dev-runner.js…...
Linux---(六)自动化构建工具 make/Makefile
文章目录 一、make/Makefile二、快速查看(1)建立Makefile文件(2)编辑Makefile文件(3)解释(4)效果展示 三、背后的基本知识、原理(1)如何清理对应的临时文件呢…...
谷歌:编写干净的代码以减少认知负荷
您是否曾经阅读过代码却发现很难理解?您可能正在经历认知负荷! 认知负荷是指完成一项任务所需的脑力劳动量。阅读代码时,您必须记住变量值、条件逻辑、循环索引、数据结构状态和接口契约等信息。随着代码变得更加复杂,认知负荷也…...
Windows 10终极清理:一键彻底卸载OneDrive完整指南
Windows 10终极清理:一键彻底卸载OneDrive完整指南 【免费下载链接】OneDrive-Uninstaller Batch script to completely uninstall OneDrive in Windows 10 项目地址: https://gitcode.com/gh_mirrors/on/OneDrive-Uninstaller 还在为Windows 10自带的OneDri…...
零基础玩转OpenClaw:Qwen3-14B镜像云端体验指南
零基础玩转OpenClaw:Qwen3-14B镜像云端体验指南 1. 为什么选择云端体验OpenClaw? 去年冬天,我第一次尝试在本地笔记本上部署OpenClaw时,经历了整整两天的环境配置噩梦。从CUDA版本冲突到Python依赖地狱,最后连显卡驱…...
Mod Loader:重新定义GTA系列模组管理的技术架构与实践指南
Mod Loader:重新定义GTA系列模组管理的技术架构与实践指南 【免费下载链接】modloader Mod Loader for GTA III, Vice City and San Andreas 项目地址: https://gitcode.com/gh_mirrors/mo/modloader 一、核心痛点解析:传统模组管理的三大技术瓶颈…...
Citra模拟器全方位指南:从安装到优化的3DS游戏体验提升方案
Citra模拟器全方位指南:从安装到优化的3DS游戏体验提升方案 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/gh_mirrors/cit/citra Citra作为一款开源高性能的Nintendo 3DS模拟器,为Windows、Linux和macOS用户提供…...
Loop:3分钟快速掌握Mac窗口管理终极方案
Loop:3分钟快速掌握Mac窗口管理终极方案 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop Loop是一款免费开源的Mac窗口管理工具,通过径向菜单和智能快捷键系统,让窗口…...
B站视频转文字:如何用AI技术轻松提取视频内容?
B站视频转文字:如何用AI技术轻松提取视频内容? 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 在信息爆炸的时代,视频已成…...
新手福音:通过快马ccswitch模型轻松生成你的第一个博客页面代码
作为一名刚接触编程的新手,想要搭建个人博客主页却不知从何下手,这确实是个常见难题。最近我在InsCode(快马)平台尝试了ccswitch模型,发现它特别适合零基础学习者快速入门。下面分享我的实践过程,希望能帮到同样想入门前端开发的朋…...
3分钟搞定Axure中文界面:终极汉化指南让原型设计更简单
3分钟搞定Axure中文界面:终极汉化指南让原型设计更简单 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure …...
EPM7256AETC100-10N:Altera MAX 7000A系列CPLD,256宏单元,TQFP-100封装
做数字电路设计的人都遇到过这种尴尬:需要几个逻辑门、需要做个地址译码、需要把几个信号拼一下——专门放一颗MCU太浪费,用分立门电路又占地方,改一版PCB还得等两周。EPM7256AETC100-10N给出的答案很简单:把256个宏单元、5000个可…...
书匠策AI:学术江湖里的“论文剑客”,助你披荆斩棘!
书匠策AI官网:www.shujiangce.com | 微信公众号搜一搜:书匠策AI 在学术的江湖里,写期刊论文就像是一场“闯关游戏”——选题、查文献、搭框架、写内容、调格式……每一关都充满挑战,稍有不慎就可能“Game Over”。但别怕…...
