数仓是一个面向主题的、集成的、稳定的、时变的,存储历史数据的仓库。
面向主题的:数仓中的数据按照主题进行存储,每个主题都是决策层分析的一个角度;
集成的:不同来源的数据会统一整合后存入数仓中;
稳定的:数据一旦进入仓库后不会轻易发生改变,就算数据本身需要变化也轻易不会改动原数据,会根据分析需求考虑数据的更新策略;
时变的:随着时间的推移,长时间不更新的数据会逐渐失去时效性,失去时效性的数据一般会被导出到外部压缩存储。目前常用的策略是"7年13个月",即保存维度信息的拉链表不保存七年前的数据,保存流水信息的事实表不保存13个月前的数据。
当然,上述保存策略也是根据情况决定,利用价值较低的原始数据可能只保存一个周期就被导出,高度聚合的数据可能保存更长的时间。
数仓分层
数仓往往分为三层,ods、dw、dm,而dw层又可以根据业务细分为dwd、dws、dwa等多层
ods层
操作型数据层,存放的是从不同来源进入数仓的原始数据,ods层往往只存放少量加工的原始数据,因此这里的数据不是集成的。
dw层
数据仓库的核心,它根据数仓架构可能再次细分多层:
dwd层
数据细节层。将ods层的数据统一整合后,依照各主题需要将数据拆分存储,常见的星型模型和雪花模型就是在这一层。
dws层
数据服务层。按照范式存储的数据在分析时往往需要进行多表join,这样的分析效率很低,因此需要将dwd层的数据按照分析需求提前进行整合。由于主题之间的重合,该层的设计是反三范式的,存在数据冗余。
除了上述分层以外,dw还有基础数据层、轻度汇总层等等,根据数仓架构而定。
DIM层
维度层。有些数仓会将dwd层中的维度表单独抽离出来维护。
dm层
存放使用DW层数据进行业务统计的结果,它们可能被用于线上可视化的指标分析,也可能用于进一步的数据挖掘使用。
分层作用:复杂问题简单化、减少重复计算、血缘追踪、架构更清晰。
表的种类和特征
事务事实表:可以看做是保存某一事务的日志数据,事务一旦被提交就成为历史数据,只能以增量的方式维护。
维度表:从某个角度观察事实数据的窗口,存储的数据用来从某个角度描述事实。
全量表:保存每天所有的最新状态的数据
增量表:当数据改变时,将这个改变和改变后的结果记录下来,就是增量表。(a账户分两次存了100块,增量表显示为a账户金额100,200,并分别记录变化时间)
拉链表:用特定字段维护缓慢变化维度的表
流水表:记录表中所有改变的表。
周期快照表:按固定周期对事实表进行统计生成的表,按时间段保存记录,增量更新。
累积快照表:按过程对事实表进行统计生成的表,将每个事务切分成多个小事务,明确开始和结束的状态,每个小事务只保存一条结果。
拉链表如何实现
使用SCD策略维护特定字段实现。SCD1:不保存历史数据,直接覆盖更新SCD2:通过维护一个记录时间和一个过期时间来保存变化历史,增量更新SCD3:通过维护一个历史字段来保存上次的数据,更新数据时,先检查旧数据是否存在,如果存在就把旧数据的最新值保存到新数据的旧值字段,采用覆盖更新的方式存储数据。SCD4:单独建立一个历史维度表为该字段维护历史变化。SCD5:混合使用123的维护策略。
本文来自博客园,作者:南北极星,转载请注明原文链接:https://www.cnblogs.com/jcliaoyb/p/12783015.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理