理解数仓建模

​​​在这里插入图片描述在数仓建设的过程中,由于未能完全按照规范操作, 从而导致数据仓库建设比较混乱,常见有以下问题:

数仓常见问题

● 数仓分层不清晰:数仓的分层没有明确的逻辑,难以管理和维护。
● 数据域划分不明确:没有明确的数据域划分,导致数据冗余和不一致。
● 模型设计不合理:模型设计没有考虑业务的实际需求,导致数据质量低下。
● 代码不规范:代码不符合规范,导致维护困难。
● 命名不统一:命名不统一,导致数据难以理解和使用。
● 主题域划分不完整:主题域划分没有涵盖所有业务需求,导致数据缺失。

除此之外,其他还有比如:数据质量,数据集成,性能,元数据管理,数据安全等问题。

数据架构分层

数仓分层标准

一般情况下,大体可以按照如下方式进行分层:
● ODS (结构与源系统基本保持一致的增量或者全量数据)
● DWD (数仓明细层,来源于 ODS 清洗转化,基于具体业务构建明细事实表,可适当冗余某些重要属性,必要时做宽表处理)
● DWS(汇总层,一般基于指标构建初步汇总事实表,注意命名规范,口径一致,为上层提供一致性公共指标)
● DIM(维表层,以维度作为建模驱动,基于每个维度的业务含义,通过添加维度属性、关联维度等定义计算逻辑,完成属性定义的过程并建立一致的数据分析维表)
● ADS (数据服务层,主要存放数据产品个性化的统计指标数据,直接对接消费者)

开发路径

● 数据调研(分析业务需求,需要哪些指标,具体口径,梳理业务库表关系字段含义等信息)
● 数据域划分(对业务过程或维度进行抽象,比如交易、流量、用户域等)
● 构建总线矩阵 (明确业务过程所属的数据域,业务过程与分析维度的关系)
● 明确统计指标 (一般指的是原子指标与派生指标)
● 模型设计(构建一致性维表(DIM),事实表(DWD),汇总模型(DWS),应用汇总模型(ADS))
● 开发(业务逻辑SQL开发,测试、数据验证)
● 部署(上线(如T-1调度),依赖配置、任务监控、DQ 任务检测)

表规范

在建立 Hive 数据仓库表时,针对不同数据层次和类型(如增量、全量、小时级数据),我们通常遵循以下规范:

  1. 命名规范
    分层命名
    数据仓库分为不同层次,每层次对应不同的数据处理阶段。
    命名格式为:{层级名称}{业务域}{具体业务描述}_{产出属性}
    示例:
    ods_user_new_inc_df (ods层用户新增天级全量表)
    ods_user_active_di (ods层用户活跃天级增量表)

  2. 分区规范
    对于增量、全量、小时级数据,建议根据业务需求采用分区表,提高查询效率。
    ○ 按日期分区:适用于每天新增数据,如每日更新。
    示例:PARTITIONED BY (dt STRING)
    ○ 按小时分区:适用于每小时新增数据,如小时级别的增量数据。
    示例:PARTITIONED BY (dt STRING, hr STRING)
    ○ 全量数据:通常不分区,但可以根据业务需求分区。
    示例:定期全量导入时,可以按日期分区,表名如dim_customer。

模型设计基本原则

● 高内聚和低耦合
主要从数据业务特性和访问特性两个角度来考虑:
○ 将业务相近或者相关的数据、粒度相同数据设计为一个逻辑或者物理模型;
○ 将高概率同时访问的数据放一起,将低概率同时访问的数据分开存储。

● 核心模型与扩展模型分离
建立核心模型与扩展模型体系,核心模型包括的字段支持常用核心的业务,扩展模型包括的字段支持个性化或是少量应用的需要,不能让扩展字段过度侵入核心模型,破坏了核心模型的架构简洁性与可维护性。

● 公共处理逻辑下沉
越是底层公用的处理逻辑更应该在数据调度依赖的底层进行封装与实现,不要让公共的处理逻辑暴露给应用层实现,不要让公共逻辑在多处同时存在。

● 成本与性能平衡
适当的数据冗余换取查询和刷新性能,不宜过度冗余与数据复制。

● 数据可回滚
处理逻辑不变,在不同时间多次运行数据结果确定不变。

● 指标一致性
相同的字段含义在不同表中字段命名必须相同,必须使用规范定义中的名称。

● 命名清晰可理解
表命名需清晰、一致,表名需易于消费者理解和使用。

● 层次依赖合理
○ DWD应严格遵守层次依赖,理论上只可引用ODS、DIM和部分DWD数据,不可引用处于下游层次的ADS等数据,以避免出现“反向引用”的情况;
○ DWS应严格遵守层次依赖,理论上只可引用DIM、DWD数据,不可引用处于下游层次的ADS等数据,以避免出现“反向引用”的情况。

如何设计分层?

● ODS
基本上是将业务系统数据原封不动的抽取到数仓,一般采用增全量的方式进行。可以考虑使用的工具如 sqoop,datax,seatunnel等。
● DWD/DWS:
一般情况下,一个比较好的公共层遵循一下几个原则:
迭代升级
○ 1、数据域的划分是建设公共层的前提,但是数据域不是一成不变的,由于业务不同,对应的数据域划分也自然各不相同,有时候需要灵活处理,并且要根据业务的发展而调整相关数据域的划分。
○ 2、其实,数据域的目的是为了给数据分类,所以尽量以业务分析视角去组织公共数据,从而保持数据的独立性。

公共层要考虑的核心问题
公共层需要考虑的一个核心问题是:是否具有共性
○ 1、DWS层的原则:DWS的核心诉求是通过空间换时间,在节约成本、提升效率的同时,实现数据口径的一致性。既如此,那就不能为了加工DWS而加工DWS数据,要基于是否是业务的核心指标判断是否要沉淀公共层,另外,如果是事后沉淀公共层,那要看下需要沉淀的指标的应用场景有多少,假如只在一个地方使用,那也就没有沉淀DWS的必要了
○ 2、DWD的原则:一般情况下,DWD的模型相对好设计一些,核心是基于维度建模,冗余维度属性,降低频繁关联,提升基础数据模型的易用性

复用性、易用性、稳定性
公共层模型不是为某一应用场景单独设计的,而是面向大部分的应用场景进行设计,因此需要进行一定的抽象以提升通用性,从而尽可能覆盖更多的应用场景。
○ 复用性
■ 指标复用性抽象:转变不可累加指标为可累加指标,如比率型建议保留分子分母;
■ 粒度复用性抽象:以最大公约数的逻辑抽象复用,比如上游表ADS1是子公司粒度、表ADS2是一级类目粒度,那就可以设计出sku粒度的DWS表

○ 易用性
在不影响模型产出时效性的情况下,需尽量考虑模型易用性,提升应用研发的使用效率。易用性的设计主要指的是宽表设计和水平切分,用于降低下游理解和多表关联。
■ DWS模型易用性上,通过冗余维度属性、采用大宽表方式构建,以提升下游易用性。
■ DWS冗余相对不易变的维度属性,减少下游频繁关联;
■ 如无时效性问题,同数据域同粒度进行宽表设计,提升下游易用性;
■ DWD模型易用性上,通过采用星型模型、维度冗余和信息完善度进行设计,以提升下游易用性,模型设计应以星型模型为主。

○ 稳定性
通过大宽表的建设方式,公共层极大提升了模型的易用性,但因应用场景差异化,时效性也对应有不同的要求。公共层需进行必要的的稳定性设计,满足下游重要应用高时效性产出的要求。
■ 扁平化设计提升稳定性:公共层整体需扁平化设计,进行不要依赖层级过深
■ DWS稳定性设计:结合访问热度、数据稳定情况,进行必要的解耦设计,以提升DWS模型的稳定性;比如根据访问的热度,将1d、nd、td的数据模型进行垂直拆分,
■ 对于DIM维表也可以根据垂直拆分的方式,保证核心维度的产出效率,将低热度的扩展维度属性与核心维度属性进行拆分
成本和效率要有一个权衡

一般情况下,对于数据量比较小的场景,可以优先构建DWD,后构建DWS,在构建DWS的过程中,可以优先构建细粒度的DWS表(为了扩展性),最后沉淀粗粒度的DWS表。对于数据体量比较大的情况,可以优先构建粗粒度的DWS,对于DWD的构建,可以采用水平拆分的方式,比如不在冗余半结构的字段(attributes扩展字段),从而提升产出的时效,提升下游的使用效率。

● ADS
应用层的定位为根据特定业务诉求,按照业务角度组织数据以快速满足业务需求。应用层研发核心关注研发效率、口径一致性,以及核心应用的稳定性。
一个好的应用层模型需要重点关注以下几个原则:

  • 需求驱动
    需求驱动构建集市:按需最小原则设计,除非有明确的业务延续,否则不做过度的扩展设计。应用层的设计需要考虑业务定制的需求,提供面向业务定制的应用数据,如报表数据、大宽表等,供线上系统使用。
    划分集市域、共性抽象下沉
    ○ 与公共层类似,以高内聚低耦合的原则对集市进行划分,让单集市数据研发聚焦在某一领域的业务需求实现;集市间应该避免互相依赖,避免复杂度的提升。
    ○ ADS也可以抽象出公共部分,通过依赖ADS数据,提升开发的效率和产出效率

  • 减少对ODS的依赖
    减少直接引用ODS表,降低源系统变更带来的改造成本,架构合理上考虑,公共层针对复用性的场景进行模型沉淀,当源系统变更时,通过公共层适应性改造屏蔽下游变更。

参考

https://developer.aliyun.com/article/927293
https://mp.weixin.qq.com/s?__biz=MzU2ODQ3NjYyMA==&mid=2247488738&idx=1&sn=189694698b6d749c77340116cbc96bf4&chksm=fc8c0241cbfb8b5748da839811a901f9442e47e216b8dfc69fbb0a510cb7a432ce35399d3090&scene=21#wechat_redirect

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

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

相关文章

启动游戏出现concrt140.dll错误的解决方法

concrt140.dll是一个动态链接库文件,属于Microsoft Visual C 2015 Redistributable组件集的一部分。这个文件是并发运行时库(Concurrency Runtime)的一部分,对于支持和增强应用程序的多线程与并发执行能力至关重要。它包含了实现并…

QT c++ 堆栈一些理解--限制对象建立在栈上--栈堆区别

图示形象化理解: 堆栈都是数据结构存取数据的方式 堆:理解为一个堆积物体,独立的分散的,当需要空间时,再找一个地方。需要的就是new关键字,动态申请一个空间。程序员自己动态分配空间,使用指针…

线性回归例子, 学习笔记[机械学习]

参考书籍, [pythonによる機械学習入門] y ax b # 直线的线性回归 import numpy as np import matplotlib.pyplot as plt # 求最小二乘法的回归直线,用到的库 from sklearn import linear_model# x 和 y的单点图 x np.random.rand(100, 1) x x*4-2 y 3*x-2 # 增加一部分乱…

LLVM Cpu0 新后端10

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1V_tZkt9uvxo5bnUufhMQ_Q?…

[图解]企业应用架构模式2024新译本讲解12-领域模型5

1 00:00:00,560 --> 00:00:04,690 刚才是往那个表里面添加数据了 2 00:00:04,700 --> 00:00:07,960 相当于,或者往这个合同里面添加数据了 3 00:00:08,430 --> 00:00:09,530 现在要查询怎么办 4 00:00:09,900 --> 00:00:10,930 跟前面一样 5 00:00:…

JDK下载安装Java SDK

Android中国开发者官网 Android官网 (VPN翻墙) 通过brew命令 下载OracleJDK(推荐) 手动下载OracleJDK(不推荐) oracle OracleJDK下载页 查找硬件设备是否已存在JDK环境 oracle官网 备注: JetPack JavaDevelopmentKit Java开发的系统SDK OpenJDK 开源免费SDK …

6路以太网,8路串行接口,继电器、DI、IRIG-B等多路通讯及控制接口,并支持蓝牙、GPS、北斗、Wifi、2G/3G/4G等功能

●是基于ARM Cortex™-A9的嵌入式产品,主频高达四核1.2GHz,实现了HD级别的视频加速器并通过全新的集成电源管理解决方案实现最佳的节能效果。 硬件集成了6路以太网,8路串行接口,继电器、DI、IRIG-B等多路通讯及控制接口&#xff0…

最值,反转数组——跟之前的差不多

文章目录 数组最值感悟改进 反转数组问题 代码改进 数组最值 package com.zhang; /*求数组最大最小值*/ public class test_arr1 {public static void main(String[] args) {int[] arr {10,66,42,8,999,1};max(arr);min(arr);}public static int max(int[] arr){int max arr…

新增FTP功能、支持添加Redis远程数据库,专业版新增网站监控和黑金主题,1Panel开源面板v1.10.10版本发布

2024年6月7日,现代化、开源的Linux服务器运维管理面板1Panel发布v1.10.10版本。 在这一版本中,1Panel新增了多项实用功能。社区版方面,新增了FTP功能、支持添加Redis远程数据库、支持设置压缩密码,并新增了清理镜像构建缓存的功能…

倩女幽魂搬砖攻略:云手机自动托管搬砖刷本选哪家云手机?

欢迎来到《倩女幽魂手游》的世界,一个充满江湖恩怨的世界。在这个游戏中,你将扮演各个门派中的不同职业,踏上一段属于你自己的江湖之路。本攻略将为你详细介绍如何利用多开挂机搬砖,快速提升自己的实力,成为江湖中的一…

002-链路聚合

链路聚合 链路聚合是一个重要的计算机网络术语,它涉及将多个物理端口汇聚在一起,形成一个逻辑端口,从而增加网络带宽、实现链路传输的弹性和工程冗余。 定义与基本原理 定义:链路聚合(英语:Link Aggrega…

python数据分析-连云港石化基地2023年用电量分析

接下来对连云港石化基地2023年用电量进行分析,首先导入数据分析基本的包: import pandas as pd import matplotlib.pyplot as plt# Load the data from the provided Excel files file_path1 data1.xlsx file_path2 data2.xlsxdata1 pd.read_excel(f…

轻松构建聊天机器人,大模型 RAG 有了更强大的AI检索器

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

【机器学习300问】109、什么是岭回归模型?

在进行回归任务时间,可以能会遇到特征数量多于观测数量或某些特征变量之间相关性较高(几乎线性相关)时,标准的线性回归模型的系数估计可能非常不精确,可以理解成独立方程个数小于未知数个数此时方程有无穷多解。 例如&…

基于SVPWM矢量控制的无速度传感器电机控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于SVPWM矢量控制的无速度传感器电机控制系统simulink建模与仿真,包括电机,SVPWM模块,矢量控制器模块等。 2.系统仿真结果 3.核心程序与模…

ChatGPT为啥不用Websocket而是EventSource?

点击下方“JavaEdge”,选择“设为星标” 第一时间关注技术干货! 免责声明~ 任何文章不要过度深思! 万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案…

《精通ChatGPT:从入门到大师的Prompt指南》第9章:实战练习

第9章:实战练习 9.1 Prompt练习题 在本节中,我们将提供一系列练习题,旨在帮助读者通过实际操作提升使用ChatGPT的能力。这些练习题涵盖了从基础到高级的不同难度级别,并针对各种应用场景设计,确保读者能够在实际使用…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(三十一)- 微服务(11)

12.7 DSL查询语法 查询的基本语法 GET /indexName/_search{"query": {"查询类型": {"查询条件": "条件值"}}} 查询所有 GET /hotel/_search{"query": {"match_all": {}}} 12.7.1 全文检索查询 全文检索查询,会…

【Vue3-Element-Admin 动态路由】涉及到的配置

Vue3-Element-Admin 动态路由 涉及到的配置 0. Vue3-Element-Admin 项目地址1. router/index.ts2. Mock接口模拟数据3. store/permission4. api/menu5. plugins/permission 这篇文章讲的主要是 Vue3-Element-Admin 差不多内置的动态路由配置 (根据后端接口渲染) 先把开发环境&a…

Hive on Spark版本兼容性

Hive on Spark仅在特定版本的Spark上进行测试,因此给定版本的Hive只能保证与特定版本的Spark一起工作。其他版本的Spark可能与给定版本的Hive一起工作,但不能保证。以下是Hive版本及其对应的Spark版本列表: 详情参考官方文档:http…