【数据仓库】数仓分层方法详解与层次调用规范

文章目录

  • 一. 数仓分层的意义
    • 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存放明细事实数据、维表数据及公共指标汇总数据。

  1. 明细事实数据、维表数据一般根据ODS层数据加工生成。
  2. 公共指标汇总数据一般根据维表数据和明细事实数据加工生成。

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/143921.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Echarts

以umi为例 首先是下载两个插件(echarts和echarts-for-react) npm npm install --save echarts-for-react npm install echarts yarn yarn add echarts-for-react yarn add echarts 接下来是在tsx或jsx中引入使用 import ReactEcharts from "echa…

selenium报错:没有打开网页或selenium.common.exceptions.NoSuchDriverException

文章目录 问题解决方法 问题 当selenium的环境配置没有问题,但在使用selenium访问浏览器时并没有打开网页,或者出现selenium.common.exceptions.NoSuchDriverException报错信息(如下图所示)。 以上问题可能的原因是没有配置chrom…

Alter database open fails with ORA-00600 kcratr_nab_less_than_odr

Alter database open fails with ORA-00600 kcratr_nab_less_than_odr (Doc ID 1296264.1)​编辑To Bottom APPLIES TO: Oracle Database - Enterprise Edition - Version 11.2.0.1 to 11.2.0.1 [Release 11.2] Oracle Database - Enterprise Edition - Version 12.1.0.1 to …

保护多个子域名——通配符证书

在当今的互联网世界中,许多组织和企业拥有复杂的网站结构,包含许多不同的子域名。而为每个子域名单独购买和管理SSL证书可能会相当繁琐。解决这一问题的理想选择就是通配符证书。 一、什么是通配符SSL证书? 通配符SSL证书又叫泛域名证书&am…

智能电网阻抗模拟的应用背景

智能电网阻抗模拟是一种利用计算机模拟技术,对智能电网中各种电力设备和电力系统的阻抗特性进行模拟和分析的方法。智能电网是指通过信息通信技术和先进的控制策略,实现电力系统高效、安全、可靠和可持续运行的电网。在智能电网中,各种电力设…

Spring全家桶源码解析--2.4 Spring bean 的依赖注入--@Resource

文章目录 前言一、Resource 作用:二、Resource 源码实现:2.1 Resource 注入点获取:2.2 Resource 对注入点依赖注入: 三、 总结 前言 Spring 中不仅可以使用Spring 包中的Autowired 还可以使用java 层面提供的Resource 进行依赖注…

阿里云学生及教师优惠活动,学生用户享3折购买优惠,教师享5折购买优惠

阿里云推出高校计划“云工开物”,助力高校师生云上“创世界”,学生用户享300元优惠券和3折购买优惠,教师享5折购买优惠。“云工开物”将倾力支持高校教师云上科研提速,取得有世界级影响力的成果;助力高校学生在云上探索…

无代码:解决非程序员的开发难题

最近,有个小型企业的负责人找上我,说他公司需要一个内部管理系统,来提高工作和协作效率,但他没有编程经验,也不打算花费大量时间和金钱雇佣专业的开发团队,他问我有没有什么解决方案。 针对这个问题&#…

FusionDiff:第一个基于扩散模型实现的多聚焦图像融合的论文

文章目录 1. 论文介绍2. 研究动机3. 模型结构3.1 网络架构3.2 前向扩散过程3.3 逆向扩散过程3.4 训练和推理过程 4. 小样本学习4. 实验结果 1. 论文介绍 题目:FusionDiff: Multi-focus image fusion using denoising diffusion probabilistic models 作者&#xf…

ARPG----C++学习记录05 Section9 动画蓝图,腿部ik

这节课比较难懂,我也不是很理解 动画蓝图 新建一个动画蓝图。首先新建一个人物蓝图的变量用来获取人物的属性,使用第一行蓝图来初始化,当人物为Echo时获取它的movement组件,存为变量。然后动画的每一帧都从movement组件里拿出xy的速度用作后边…

软件外包的需求整理技巧

在软件开发中,整理需求是确保项目成功的重要步骤之一。以下是一些整理需求的技巧,这些技巧有助于确保需求的清晰性、完整性和可行性,为项目的成功打下坚实的基础。北京木奇移动技术有限公司,专业的软件外包开发公司,欢…

有什么方法可以改善CRM实施投资回报?

数据统计显示,几乎70%以上CRM客户管理系统项目的投资回报是负数。这意味着超过半数的CRM项目的结果是失败的。那么我们有什么方法可以改善CRM实施投资回报吗?当然有,下面我们就来说一说。 如何改善CRM实施投资回报 首先,您选择的…

新品 | 飞凌嵌入式FCU2601工商业储能EMS能量控制单元发布

FCU2601嵌入式控制单元是飞凌嵌入式为锂电池储能行业设计的EMS能量控制单元产品,设计兼具高性能,多接口,低功耗,广泛满足各类储能系统的本地能源管理应用需求。 FCU2601嵌入式控制单元综合考虑到了储能行业不同场景的差异化需求&…

RT1170的ITM SWO配置,实现printf输出及PC指针的采样分析

最近公司准备启动一个新的项目,使用NXP的MIMXRT1170芯片作为主控,在熟悉芯片的过程中发现RT1176具备ITM和SWO功能模块,于是针对之前项目中因工程庞大导致调试困难的问题,决定使用SWO输出调试信息,这样既可以节省硬件的…

Python生成随机数插件Faker的用法

目录 引言 一、Faker库的安装 二、Faker库的基本用法 1、导入Faker类 2、创建Faker对象 3、使用Faker对象生成随机数据 三、Faker库的高级用法 1、自定义数据生成规则 2、使用子模块进行特定领域的数据生成 3、与其他库结合使用 四、Faker库的应用场景 1、单元测试…

虚拟化加密磁盘密钥设置方案浅析 — TKS1

虚拟化加密磁盘密钥设置方案浅析 前言密钥设置方案密钥管理服务-KMS密钥设置方案-TKS1 两级加密设计弱熵密码派生密钥切分存储 前言 虚拟化组件可以使用多种加密算法对虚拟机磁盘的原始内容进行加解密,比如AES、RSA、SM2/SM3/SM4等,用户写入的数据经过加…

医院安全(不良)事件管理系统源码 不良事件报告全套源码

不良事件管理系统是一种专为企业或组织设计的软件工具,用于跟踪、记录和管理不良事件。该系统可以有效地整合不良事件的收集、分类、分析和报告,帮助企业及时识别和处理不良事件,从而降低风险和损失。通过实时监控和自动化报告,该…

富文本组件vue-quill-editor使用

版本:"vue-quill-editor": "^3.0.6", 1.全局引入 import VueQuillEditor from vue-quill-editor import quill/dist/quill.core.css import quill/dist/quill.snow.css import quill/dist/quill.bubble.cssVue.use(VueQuillEditor) 2.使用&am…

轻量封装WebGPU渲染系统示例<30>- 绘制线段(源码)

原理说明: WebGPU提供了绘制基本线条非机制,只要render pipeline primitive对应的 topology属性指定为line-list或者line-strip即可绘制对应的线条。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxg…

移远EC600U-CN开发板 11.14

控件探索-仪表(lv.meter) 1. 显示一个简单的仪表盘 def set_value(indic, v):meter.set_indicator_value(indic, v)# # A simple meter # meter lv.meter(scr) meter.center() meter.set_size(200, 200)# Add a scale first scale meter.add_scale()…