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

最终我们根据自己的业务线填写下面表格:
| 功能模板/业务线 | 业务1 | 业务2 | 业务3 |
|---|---|---|---|
| 模块1 | |||
| 模块2 | |||
| 模块n |
着重说明:建立一个好用的数仓,业务一定要非常熟悉。可能我们只有一个业务线(也可以是一个系统),这个业务线中包含哪些模块,开发系统的人,或者使用系统的业务人员是非常清楚的,可以沟通后进行梳理。
2. 需求调研
- 根据业务人员沟通需求,最终形成需求文档
- 开发需求需要哪些维度和度量
3. 数据域划分
-
数据域
业务过程和维度的抽象。
根据业务流程、根据系统、根据部门等等,需要注意的是,数据域的目的就是为更好的组织数仓中的数据,可以联想图书馆会把图书根据不同的专业放到不同的书架,只要可以更好的找到数据就可以划分为数据域。
常见的一个划分思路:比如是构建一个集团的数仓,那么就可以根据部门划分,如果是构建某个部门的数仓,就可以根据业务系统、流程来划分。 -
如何划分
根据业务流程、根据系统、根据部门等等,需要注意的是,数据域的目的就是为更好的组织数仓中的数据,可以联想图书馆会把图书根据不同的专业放到不同的书架,只要可以更好的找到数据就可以划分为数据域。 -
评判标准
划分数据域时,既能涵盖当前业务需求,又能在新业务进入时,无影响的进入已有数据域中或者扩展新的数据域。 -
参考阿里电商


4. 构建总线矩阵
- 做两件事
- 明确每个数据域下有哪些业务过程
- 业务过程与哪些维度相关,并定义每个数据域下的业务过程和维度
-
总线矩阵模板

-
参考阿里电商

5.规范定义
- 规范定义
主要是定义指标体系,原子指标、修饰词、时间周期和派生指标。 - 指标体系
指标体系包含原子指标、派生指标、修饰类型、修饰词、时间周期。 - 原子指标/度量
原子指标和度量含义相同,基于某一业务事件行为下的度量,是业务中不可再拆分的指标,具有明确业务含义的名词,如支付金额。 - 派生指标
派生指标=一个原子指标+多个修饰词(可选)+时间周期。可以理解为对原子指标业务统计范围的圈定。如原子指标:支付金额,最近1天海外买家支付金额则为派生指标(最近一天为时间周期,海外为修饰词,买家作为维度,而不是修饰词)。 - 修饰类型
是对修饰词的一种抽象划分。修饰类型从属于某个业务领域,如日志域的访问终端类型涵盖无线端、PC端等修饰词
6. 模型设计
主要包括维度即属性的规范定义,维表、明细事实表和汇总事实表的模型设计。
- 度量称为事实:我更喜欢把连续型的数值称为事实
- 环境描述称为维度:我更喜欢把离散型的字段称为维度。
维表和实时表模型设计内容较多,我们会放到后面讲解。
总结
根据我的经验,很多公司做数仓建模流程都和上面的类似,但又都不太相同,有的极其缩减,尤其是较小项目。因此我们在做的时候可以参考上面流程,但不要可以生搬硬套,有的时候甚至一个简单的事情,由于自己刻意要生搬硬套相关概念,导致迟迟不能入手开发。
一个简单的数仓项目,甚至可以简化到只要明确划分ods、dwd、dim、dws层级就可以使用。但是一个好用的数仓,显然就有更多的规范约束了。
相关文章:
数仓建模流程
数仓建模简介 一句话总结 数仓建模中的“建模”是一个将数据有序组织和存储起来的过程,旨在提高数据的使用效率和降低使用成本。 详细描述 在数仓建模中,“建模”指的是构建数据模型,也就是数据的组织和存储方法。数据模型强调从业务、数…...
Neo4j CQL语句 使用教程
CREATE命令 : CREATE (<node-name>:<label-name>{ <Property1-name>:<Property1-Value>........<Propertyn-name>:<Propertyn-Value>} )字段说明 CREATE (dept:Dept { deptno:10,dname:“Accounting”,location:“Hyderabad” })&#…...
STM32-HAL库 驱动DS18B20温度传感器 -- 2024.10.8
目录 一、教程简介 二、驱动理论讲解 三、CubeMX生成底层代码 四、Keil5编写代码 五、实验结果 一、教程简介 本教程面向初学者,只介绍DS18B20的常用功能,但也能满足大部分的运用需求。跟着本教程操作,可在10分钟内解决DS18b20通信难题。…...
HTML 符号
HTML 符号 HTML(超文本标记语言)是一种用于创建网页的标准标记语言。它使用一系列的标签来描述网页的结构和内容。HTML 符号,通常指的是 HTML 标签,是构成 HTML 文档的基础。本文将详细介绍 HTML 符号的概念、种类、用途以及如何在网页设计中正确使用它们。 HTML 符号的概…...
编译后的MySQL安装
MySQL安装 1.下载网址2.下载方式3.配置配置环境变量修改配置文件初始化安装服务启动服务测试修改 Mysql 默认密码 1.下载网址 https://dev.mysql.com/downloads/mysql/2.下载方式 选择对应版本下载 mysql-xxx-winx64.zip,该压缩包为编译后文件,并非源码…...
Ubuntu安装Apache教程
系统版本:Ubuntu版本 23.04 Ubuntu是一款功能强大且用户友好的操作系统,而Apache是一款广泛使用的Web服务器软件。在Ubuntu上安装Apache可以帮助用户搭建自己的网站或者进行Web开发。为大家介绍如何在Ubuntu上安装Apache,并提供详细的教程和操…...
Nginx跳转模块之location与rewrite
目录 一、location模块与rewrite模块区别 二、location模块的基本介绍 1. location模块是什么? 2. 三种匹配类别 3. 常用的匹配规则 4. 匹配优先级 三、location模块使用实例 1.精准匹配优先级小于一般匹配的特殊情况 2 .解决方法 3. 实际网站使用中的三个匹配…...
oracle col命令
oracle col命令可以对列进行进行格式化,格式:col 列名 for(mat) 格式 例如: col owner for a100 设置owner列格式 col 列名:显示当前列的格式 SQL> col owner COLUMN owner ON FORMAT a100 SQL> clear column:清除所有列的格式 SQL> col o…...
ESP32接入扣子(Coze) API使用自定义智能体
使用ESP32接入Coze API实现聊天机器人的教程 本示例将使用ESP32开发板通过WiFi接入 Coze API,实现一个简单的聊天机器人功能。用户可以通过串口向机器人输入问题,ESP32将通过Coze API与智能体进行通信,并返回对应的回复。本文将详细介绍了如…...
【JVM】如何判断对象是否可以被回收
引用计数法: 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。 优点:实现简单,判…...
CloseableHttpResponse 类(代表一个可关闭的 HTTP 响应)
CloseableHttpResponse 类是 Apache HttpClient 库中的一个类,代表一个可关闭的 HTTP 响应。当你使用 HttpClient 发送请求时,你会得到一个 CloseableHttpResponse 实例,它包含了服务器的响应数据和状态。处理完响应后,你应该关闭…...
C语言编程规范及命名规则
C语言编程规范及命名规则 编码规范总原则:清晰、简洁、一致头文件函数标识符命名与定义变量宏、常量表达式注释排版与格式代码编辑编译其他设置 命名规则类型命名: 其他编译器配色 参考 编码规范 总原则:清晰、简洁、一致 清晰第一 清晰性是…...
Pika 1.5 - Pika Labs最新推出的AI视频生成工具
Pika 1.5是由Pika Labs最新推出的AI视频生成工具。通过简单易用的界面和强大的”Pikaffects”特效库,用户能通过上传图片或输入文本,快速生成具有专业质感和创意效果的视频内容。新版本强调低门槛创作,让普通用户能轻松制作出有趣、抽象、易于…...
Elon Musk 正式揭晓了特斯拉的Robotaxi和Robovan,这两款自动驾驶新车型成为发布会上的焦点
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
博客摘录「 springboot+netty+mqtt服务端实现」2024年10月11日
try {MqttPublishMessage mqttPublishMessage (MqttPublishMessage) mqttMessage;ByteBuf byteBuf mqttPublishMessage.payload();byteBuf.retainedDuplicate();ctx.writeAndFlush(mqttPublishMessage);} catch (Exception e) {e.printStackTrace();throw e;}...
Docker小白入门笔记
Docker 命令笔记 Docker Desktop 1.构建镜像 无缓存构建: docker build --no-cache -t image_name .普通构建: docker build -t image_name . 2.运行容器 docker run -d --name docker_name -p 9000:9000 --env-file "path\.env" image_name参数说明:…...
Unity 如何在 iOS 新增键盘 KeyCode 响应事件
1.定位到文件UnityViewKeyboard.mm同如下路径: 2.打开该Objective-C脚本进行编辑,找到关键函数: createKeyboard: - (void)createKeyboard {// only English keyboard layout is supportedNSString* baseLayout "1234567890-qwertyuiop[]asdfghjkl;\\zxcvbnm,./!#$%^&am…...
pytorh学习笔记——波士顿房价预测
机器学习的“hello world”:波士顿房价预测 波士顿房价预测的背景不用提了,简单了解一下数据集的结构。 波士顿房价的数据集,共有506组数据,每组数据共14项,前13项是影响房价的各种因素,比如&…...
让AI像人一样思考和使用工具,reAct机制详解
reAct机制详解 reAct是什么reAct的关键要素reAct的思维过程reAct的代码实现查看效果引入依赖,定义模型定义相关工具集合工具创建代理启动测试完整代码 思考 reAct是什么 reAct的核心思想是将**推理(Reasoning)和行动(Acting&…...
Linux系列-常见的指令(二)
🌈个人主页: 羽晨同学 💫个人格言:“成为自己未来的主人~” mv 剪切文件,目录 重命名 比如说,我们在最开始创建一个新的文件hello.txt 然后我们将这个文件改一个名字,改成world.txt 所以,…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
基于Java项目的Karate API测试
Karate 实现了可以只编写Feature 文件进行测试,但是对于熟悉Java语言的开发或是测试人员,可以通过编程方式集成 Karate 丰富的自动化和数据断言功能。 本篇快速介绍在Java Maven项目中编写和运行测试的示例。 创建Maven项目 最简单的创建项目的方式就是创建一个目录,里面…...
