数据仓库之DWD层

article/2025/9/14 4:13:49

DWD(Data WareHouse Detail)数据明细层,主要是将从业务数据库中同步过来的ODS层数据进行清洗和整合成相应的事实表。事实表作为数据仓库维度建模的核心,需要紧紧围绕着业务过程来设计。在拿到业务系统的表结构后,进行大概的梳理,再与业务方沟通整个业务过程的流转过程,对业务的整个生命周期进行分析,明确关键的业务步骤,在能满足业务需求的前提下,尽可能设计出更通用的模型。

业务方有时只仅仅只是考虑了当下的情况。例如业务想要一个审核通过人员的明细数据,我们设计了一个全量的审核明细表,过了几天,业务方又想要分析审核流程中每个环节的转化情况,我们又要设计一张增量的明细表。一张表就可以满足需要的事被弄成了两张,而如果放弃前一张表一方面否定了自己之前的工作,另一方面所有依赖的下游都需要变更取数逻辑,增加了工作量;不放弃表的数量增加,数据就有了两个逻辑出口,统一口径和数据管理也成为一个问题。而这一切都可以在模型设计前期与业务沟通的过程中避免。因此我们在与业务沟通时,一方面了解整个业务周期过程,另一方面要考虑的是从业务方的角度来,分析当下业务需求和未来潜在的需求,尽量做到一次设计,全面覆盖。

DWD层中主要的事实表有三种类型 : 事务事实表、周期快照事实表和累积快照事实表。

(一)事务事实表

事务事实表,主要分两种单事务事实表和多事务事实表。

1.单事务事实表

针对单个业务过程而设计一个事实表。这样的设计可以对每个业务过程进行单独分析,并且对于业务方而言,符合其逻辑认知,使用起来没有障碍。

2.多事务事实表

单事务事实表比较容易实现,但也有一定的缺点。1.在多个业务过程在维度和粒度一致的前提下,且业务过程维度较多而事实相对少的情况下,我们每个业务过程都需要去join关联维度,一方面存储量增加,另一方面多次重复的join维度带来的存储计算量也会增加。2.多个业务过程多张表,随着业务发展,表的数量明细资产太多不方便管理。所以就有了多事务事实表。

我们使用多事务事实表来替代单事务事实表需要明白3个问题 1.如何同时记录多个业务过程的信息(多事务的实现)?2.如何进行单个业务过程的统计分析(成为单事务事实表的替代品)?3.什么时候可以使用多事务事实表(多事务的局限性)?

针对第一个问题,一般而言针主要做法是对每个业务过程的度量都使用一个字段进行保存 ,即不同的事实使用不同的字段进行存放;如果不是当前业务过程的度量,则采取零值处理方式。这样我们取每个实例最新的一条记录就可以看到该实例截止到统计日期的业务进度。

针对第二个问题,单事务事实表一般用来分析无非从两方面入手,一个是明细数据,二是统计数据,统计某个时间区间内的事务发生频率,例如最近一周的下单数量。明细数据在多事务事实表中也会保存,而统计数据,我们需要对每个业务过程都设置一个是否当天完成的字段来解决。我们可以统计周期区间内有多少个当天完成作为统计结果。

针对第三个问题,1.多事务事实表中的多个业务过程其粒度和维度必须是一致的。如果粒度不一致则没办法整合在一起。2. 多事务事实表当实例没有在一天完结,则会存在多条数据,如果需要统计每个实例的业务过程时长或者要看每个实例的最新状态,需要筛选所有数据最新的数据,再对每条数据进行计算,比较消耗性能。

这里在给出多事务表在具体设计时的操作,传统的多事务表可能会一个业务过程一条数据,只有当前发生的业务过程有相应数据,其他数据均置零。假如一天一个实体有多个业务过程发生,我们应该有几条数据。这里有两种做法,一个是每个业务过程都有一条数据,非当前业务过程的度量都置零。这样的好处是我们统计度量时可以直接sum或者其他操作。另一种方式是保留最新业务过程之前的业务过程的所有度量,这样总条数会减少(同一天可能多个业务过程都完成),但是统计时必须要加上是否当天的标记来过滤再统计(保证一个业务过程只有一条记录有效)。

事务事实表区别:

单事务事实表多事务事实表
业务过程一个多个
粒度相互之间不相关相同粒度
维度相互之间不相关一致
事实只取当前业务过程中的事实,且需要为可累加事实保留多个业务过程巾的事实, 非当前业务过程中的事实需要置零处理,且需要为可累加事实
冗余维度多个业务过程 , 则需要冗余多次不同的业务过程只需要冗余一次(记录次数<=业务过程数)
理解程度易于理解,不会混淆难以理解 , 需要通过标签来限定
计算存储成本较多 , 每个业务过程都需要计算较少 , 不同业务过程融合到一起 , 降低了储存计算量, 但是会存在大量零值。

(二)累计快照事实表

为了解决多事务事实表第三个问题的第二点,能不能有一张表保存实例所有的最新状态,这样我们就不需要每次统计全量数据都要取全量去重取最新数据进行计算统计。这其实就是累计快照事实表的产生。将所有实例都只保存最新的状态。其实现方式可以以拉链表的方式来实现,以事务表中历史最新数据作为初始数据,每天更新其中的数据。这样既可以保存一份全量数据,并且可以在表的基础上计算相关的业务时长。

但这也导致一个问题,数据量太大。如果每天都存储全量最新,我们必须要将表的生命周期设置相比较而言小一点。

(三)周期快照事实表

事务事实表主要储存的都是可累加行的度量。当需要一些状态度量时,比如账户余额、买卖家星级 、 商品库存、卖家累积交易额等,事务事实表就不太适合。就需要周期快照事实表。我们按照一定的周期进行汇总。周期快照事实表产出方式1.对于可以通过对事务表聚集的数据,从事务事实表中汇总得到,但是这样可能逻辑比较复杂。2.无法聚集的数据,从操作系统中以快照的方式同步下到ods层,再在进行加工。

表之间的关系图:

总结

数据明细层是下游计算各种信息的基础,数据资产的底层建设,我们在设计时,尽量设计通用的模型。针对不同的业务需求,采用不同的表设计,本篇仅介绍了相关表的概念和逻辑,具体设计过程,要针对具体业务再展开。


http://chatgpt.dhexx.cn/article/eQITCXri.shtml

相关文章

数仓建设 | ODS、DWD、DWM等理论实战(好文收藏)

本文目录&#xff1a; 一、数据流向 二、应用示例 三、何为数仓DW 四、为何要分层 五、数据分层 六、数据集市 七、问题总结 导读 数仓在建设过程中&#xff0c;对数据的组织管理上&#xff0c;不仅要根据业务进行纵向的主题域划分&#xff0c;还需要横向的数仓分层规范。本文…

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

一. 数仓及其维度 1. 什么是数仓&#xff1f; 数据仓库&#xff0c;简称数仓,&#xff08; Data Warehouse &#xff09;。从逻辑上理解&#xff0c;数据库和数仓没有区别&#xff0c;都是通过数据库软件实现存放数据的地方&#xff0c;只不过从数据量来说&#xff0c;数据仓库…

[数据仓库]分层概念,ODS,DM,DWD,DWS,DIM的概念

目录 前言&#xff1a; 一. 各种名词解释 1.1 ODS是什么&#xff1f; 1.2 数据仓库层DW&#xff1f; 1.2.1 DWD明细层? 1.2.2 DWM 轻度汇总层(MID或DWB, data warehouse basis) 1.2.3 DWS 主题层(DM&#xff0c;data market或DWS, data warehouse service) 1.3 APP&…

详解数据仓库和数据集市:ODS、DW、DWD、DWM、DWS、ADS

一、数据流向 二、应用示例 三、何为数仓DW Data warehouse&#xff08;可简写为DW或者DWH&#xff09;数据仓库&#xff0c;是在数据库已经大量存在的情况下&#xff0c;它是一整套包括了etl、调度、建模在内的完整的理论体系。 数据仓库的方案建设的目的&#xff0c;是为前端…

数据仓库分层DWD、DWB、DWS

DW &#xff1a;data warehouse 翻译成数据仓库 DW数据分层&#xff0c;由下到上为 DWD,DWB,DWS DWD&#xff1a;data warehouse detail 细节数据层&#xff0c;有的也称为 ODS层&#xff0c;是业务层与数据仓库的隔离层 DWB&#xff1a;data warehouse base 基础数据层&#x…

数据分层详解ODS、DWD、DWM、DWS、ADS

详解数仓中的数据分层&#xff1a;ODS、DWD、DWM、DWS、ADS 何为数仓DW Data warehouse&#xff08;可简写为DW或者DWH&#xff09;数据仓库&#xff0c;是在数据库已经大量存在的情况下&#xff0c;它是一整套包括了etl、调度、建模在内的完整的理论体系。 数据仓库的方案建…

简单搞定数仓搭建:数仓模型(DWD)

明细粒度事实层&#xff08;DWD&#xff09; 明细粒度事实层以业务过程驱动建模&#xff0c;基于每个具体的业务过程特点&#xff0c;构建最细粒度的明细层事实表。您可以结合企业的数据使用特点&#xff0c;将明细事实表的某些重要维度属性字段做适当冗余&#xff0c;即宽表化…

数据仓库和数据集市详解:ODS、DW、DWD、DWM、DWS、ADS

数据流向 应用示例 何为数仓DW Data warehouse&#xff08;可简写为DW或者DWH&#xff09;数据仓库&#xff0c;是在数据库已经大量存在的情况下&#xff0c;它是一整套包括了etl、调度、建模在内的完整的理论体系。 数据仓库的方案建设的目的&#xff0c;是为前端查询和分析…

六、Sails中执行存储过程模拟Waterline的Create插入数据

文章目录 创建 baseCreate 存储过程参数设置Prepared StatementsLAST_INSERT_ID和IDENTITY 模拟WaterlinesendNativeQuery规划密钥处理转换字段名称和字段值返回数据处理修改控制器代码datetime bugmysql库中对数据库字段类型定义customToJSON postman自动化测试 清楚Waterline…

oracle cdr是什么,CDRD TALK|全栈架构Sails.js简介

原标题&#xff1a;CDRD TALK|全栈架构Sails.js简介 Sails.js是一个可伸缩的、数据驱动的、面向服务的现代App架构。它致力于构建基于Node.js服务的定制化企业级应用。在Sails.js之前&#xff0c;构建一个实用的产品级Node.js应用的时间成本通常以月为单位计算。但是使用Sails.…

node-sails后台搭建

这个就直接简单搭建最基本的后台了 一、安装 安装sails npm i sails sails -v //检测版本 创建空项目 sails new my-app 安装数据库 cd my-app npm install sails-mysql -save 二、文件配置 Datastores.js 里面的数据库配置url Local.js里面port :1448端口 服务启动的端口 …

三、以user表为例,用Amis+Sails实现增删改查操作

文章目录 CRUD 组件查查询api分页fetcher参数观察统一处理method分页参数提交到后端自定义分页和页面大小&#xff08;pageSize&#xff09; 搜索排序头部工具条列折叠按钮刷新和导出excel自定义内容 删单条删除批量删除 增新增数据headerToolbar 结果分析前端数据格式要求 改数…

三、Sails 中使用Jwt进行身份认证

文章目录 Jwt 概述为什么要用JwtJwt原理 Jwt认证安装 Jwt 库登录ApiVerify Signature过期时间Nodejs 单线程易崩问题 验证程序修改配置积极策略消极策略多重验证 Jwt 测试正常登录过期或错误密钥测试 Jwt 概述 由于我们是完全前后端分离的开发模式&#xff0c;我们的后端对前端…

Sails基础之Controller层

通过前面的使用&#xff0c;我们可以看出Sails中MVC的结构更倾向于MVP的概念&#xff0c;Presenter在Sails中被称之为Actions&#xff1a; They often act as a middleman between your models and views. Controller层这个结构上的变化是Sails v1.0中新提出的方案&#xff0c;…

二、 在Sails中使用Typescript

文章目录 Typescript 基础Typescript 安装TypeScript 问题最简单的改造 Sails重定义Waterline&#xff08;Orm&#xff09; 重写ModelsTypescript 重写控制器User Model的进一步优化前后端约定 路径别名tsconfig.jsonmodule-alias安装使用 Jest测试 Typescript 基础 Typescrip…

四、Sails项目的Api文档——集成Swagger解决方案

文章目录 Api的迷思SwaggerSwagger概述在Sails中集成Swagger安装Swagger 生成设置生成的内容SwaggerUI Assets和.tmpBlueprint 蓝图Blueprint是什么Blueprint 配置local.js 进一步控制Swagger输出路由过滤路由的Swagger配置进一步优化Authorization Api的迷思 我们都知道写代码…

sails mysql_Sails+MVC+Mysql+Node+学习笔记一

项目构建 安装Node就不多说了&#xff0c; 1.sails安装与项目新建运行 npm install sails -g//全局安装 sails new project-name//新建项目 cd project-name //进入刚才新建项目的目录 sails lift //运行项目&#xff0c;运行原理也是直接在项目目录路径下使用node app.js npm …

Sails.js自动化Api实践与测试

开发中为了快速交互数据库&#xff0c;于是需要一个能便捷搭建api的平台。于是学习了一下sails.js框架。本次实践是一次摸索&#xff0c;使用了winston日志记录&#xff0c;supertest单元测试&#xff0c;mongo数据库&#xff0c;hashids哈希值解密。 模块: winstonsupertestmo…

五、解读Sails之Waterline源代码

文章目录 sql调试代码跟踪package.json启动调试Auto-Migrating备份原始数据删除所有表再重建回写备份数据 加密库 encrypted-attraes-256-gcm算法encrypted-att 的使用密钥 sql转义 sqlstring日期处理三种方式比较mariaDB&#xff08;或my-sql&#xff09;中的日期时间string 对…

一、Sails基础操作

本篇目录 Sails 安装App结构修改端口跨域问题第一个Api控制器用Postman 做Api调试MySql命令行操作MySql8.0版本加密问题 Sails 操作Mysql创建第一个model实现一个model的增删改查 Sails 安装 Sailsjs提供安装脚手架&#xff0c;使用之前可以先安装Sailjs npm install sails -…