当前位置: 首页 > news >正文

数仓建模流程

数仓建模简介

一句话总结

数仓建模中的“建模”是一个将数据有序组织和存储起来的过程,旨在提高数据的使用效率和降低使用成本。

详细描述

在数仓建模中,“建模”指的是构建数据模型,也就是数据的组织和存储方法。数据模型强调从业务、数据存取和使用角度合理存储数据,其目标是让数据有序地组织和存储起来,从而实现高性能、低成本、高效率、高质量的数据使用。
数据仓库建模的主要意义在于,通过合理的数据组织和存储方法,能够快速查询所需要的数据,减少数据的I/O吞吐,提高使用数据的效率。同时,它也能极大地减少不必要的数据冗余,实现计算结果复用,极大地降低存储和计算成本。
在数仓建模中,常见的模型包括维度模型等。维度模型通过事实和维度两个概念对复杂的业务进行呈现。其中,事实通常对应业务过程,而维度则对应业务过程发生时所处的环境。这种模型相对清晰、简洁,能够帮助人们更好地理解业务数据。
总之,数仓建模中的“建模”是一个将数据有序组织和存储起来的过程,旨在提高数据的使用效率和降低使用成本。

数仓建模流程

1. 业务调研

建模之前先梳理清楚,数据仓库涵盖哪些业务线,每个业务线包含哪些业务模块。我们可以参考阿里电商的这个图表进行梳理:
在这里插入图片描述
最终我们根据自己的业务线填写下面表格:

功能模板/业务线业务1业务2业务3
模块1
模块2
模块n

着重说明:建立一个好用的数仓,业务一定要非常熟悉。可能我们只有一个业务线(也可以是一个系统),这个业务线中包含哪些模块,开发系统的人,或者使用系统的业务人员是非常清楚的,可以沟通后进行梳理。

2. 需求调研
  1. 根据业务人员沟通需求,最终形成需求文档
  2. 开发需求需要哪些维度和度量
3. 数据域划分
  1. 数据域
    业务过程和维度的抽象。
    根据业务流程、根据系统、根据部门等等,需要注意的是,数据域的目的就是为更好的组织数仓中的数据,可以联想图书馆会把图书根据不同的专业放到不同的书架,只要可以更好的找到数据就可以划分为数据域。
    常见的一个划分思路:比如是构建一个集团的数仓,那么就可以根据部门划分,如果是构建某个部门的数仓,就可以根据业务系统、流程来划分。

  2. 如何划分
    根据业务流程、根据系统、根据部门等等,需要注意的是,数据域的目的就是为更好的组织数仓中的数据,可以联想图书馆会把图书根据不同的专业放到不同的书架,只要可以更好的找到数据就可以划分为数据域。

  3. 评判标准
    划分数据域时,既能涵盖当前业务需求,又能在新业务进入时,无影响的进入已有数据域中或者扩展新的数据域。

  4. 参考阿里电商
    在这里插入图片描述
    在这里插入图片描述

4. 构建总线矩阵
  1. 做两件事
  • 明确每个数据域下有哪些业务过程
  • 业务过程与哪些维度相关,并定义每个数据域下的业务过程和维度
  1. 总线矩阵模板
    在这里插入图片描述

  2. 参考阿里电商
    在这里插入图片描述

5.规范定义
  1. 规范定义
    主要是定义指标体系,原子指标、修饰词、时间周期和派生指标。
  2. 指标体系
    指标体系包含原子指标、派生指标、修饰类型、修饰词、时间周期。
  3. 原子指标/度量
    原子指标和度量含义相同,基于某一业务事件行为下的度量,是业务中不可再拆分的指标,具有明确业务含义的名词,如支付金额。
  4. 派生指标
    派生指标=一个原子指标+多个修饰词(可选)+时间周期。可以理解为对原子指标业务统计范围的圈定。如原子指标:支付金额,最近1天海外买家支付金额则为派生指标(最近一天为时间周期,海外为修饰词,买家作为维度,而不是修饰词)。
  5. 修饰类型
    是对修饰词的一种抽象划分。修饰类型从属于某个业务领域,如日志域的访问终端类型涵盖无线端、PC端等修饰词
6. 模型设计

主要包括维度即属性的规范定义,维表、明细事实表和汇总事实表的模型设计。

  1. 度量称为事实:我更喜欢把连续型的数值称为事实
  2. 环境描述称为维度:我更喜欢把离散型的字段称为维度。

维表和实时表模型设计内容较多,我们会放到后面讲解。

总结

根据我的经验,很多公司做数仓建模流程都和上面的类似,但又都不太相同,有的极其缩减,尤其是较小项目。因此我们在做的时候可以参考上面流程,但不要可以生搬硬套,有的时候甚至一个简单的事情,由于自己刻意要生搬硬套相关概念,导致迟迟不能入手开发。

一个简单的数仓项目,甚至可以简化到只要明确划分ods、dwd、dim、dws层级就可以使用。但是一个好用的数仓,显然就有更多的规范约束了。

http://www.lryc.cn/news/458464.html

相关文章:

  • Neo4j CQL语句 使用教程
  • STM32-HAL库 驱动DS18B20温度传感器 -- 2024.10.8
  • HTML 符号
  • 编译后的MySQL安装
  • Ubuntu安装Apache教程
  • Nginx跳转模块之location与rewrite
  • oracle col命令
  • ESP32接入扣子(Coze) API使用自定义智能体
  • 【JVM】如何判断对象是否可以被回收
  • CloseableHttpResponse 类(代表一个可关闭的 HTTP 响应)
  • C语言编程规范及命名规则
  • Pika 1.5 - Pika Labs最新推出的AI视频生成工具
  • Elon Musk 正式揭晓了特斯拉的Robotaxi和Robovan,这两款自动驾驶新车型成为发布会上的焦点
  • 博客摘录「 springboot+netty+mqtt服务端实现」2024年10月11日
  • Docker小白入门笔记
  • Unity 如何在 iOS 新增键盘 KeyCode 响应事件
  • pytorh学习笔记——波士顿房价预测
  • 让AI像人一样思考和使用工具,reAct机制详解
  • Linux系列-常见的指令(二)
  • Leecode刷题之路第17天之电话号码的字母组合
  • 2023牛客暑期多校训练营3(题解)
  • Magnum IO
  • Flink job的提交流程
  • git操作pull的时候出现冲突怎么解决
  • Sentinel 1.80(CVE-2021-44139)
  • 黑马程序员C++提高编程学习笔记
  • 力扣第1题:两数之和(图解版)
  • aws(学习笔记第三课) AWS CloudFormation
  • 浅学React和JSX
  • React 为什么 “虚拟 DOM 顶部有很多 provider“?