大数据仓库开发规范示例

大数据仓库开发规范示例

  • 一、前提概要
  • 二、数仓分层原则及定义
    • 2.1 数仓分层原则
    • 2.2 数仓分层定义
  • 三、数仓公共开发规范
    • 3.1 分层调用规范
    • 3.2 数据类型规范
    • 3.3 数据冗余规范
    • 3.4 NULL字段处理规范
    • 3.5 公共字段规范
    • 3.6 数据表处理规范
    • 3.7 事实表划分规范
  • 四、数仓各层开发规范
    • 4.1 分层实例
    • 4.2 表的属性词条相关规范
    • 4.3 ODS层设计规范
    • 4.4 DWD层设计规范
    • 4.5 DWS层设计规范
    • 4.6 DIM设计规范
    • 4.7 DM层设计规范
    • 4.8 TMP层设计规范
  • 五、总结

一、前提概要

大数据平台开发规范示例 发布一段时间后,有小伙伴表示我汤姆就是个Sql Boy,可否来个 数据仓库开发规范示例?安排!

调侃归调侃,如果想做一名合格的Sql Boy,还真不容易…

一臻在此对过去和做数仓Ing的小伙伴们361°C鞠躬Respect以表敬意。

在这里插入图片描述

二、数仓分层原则及定义

2.1 数仓分层原则

数仓分层的目的是为了给业务提供高效的数据支撑,和层次清晰、功能明确的数据存储,为企业各角色提供稳定、准确、多元化的高可用数据,同时为数据提供更方便的管理和运维。

2.2 数仓分层定义

数仓主要包含ODS,DWD,DWS,DIM,DM几个标准化的分层,同时结合企业实际的情况,如补录的数据,在数据ETL过程中的临时处理数据等,根据用途汇总为贴源层、数据共享层、数据服务层。

  1. ODS(Operational Data Store): 贴源层数据,仅导入业务业务数据,不做任何数据的清洗转换和修改,保持与源库一致。具体情况根据项目场景设定。除了业务系统的数据,还包括补录数据处理,源系统数据快照处理等。
  2. DWD(Data Warehouse Detail): 数仓明细层数据,保留业务实体的原子粒度,并且通过数据清洗和一定程度的数据转换,保障数据质量。数据来源于ODS层,保留所有历史数据。业务实体、数据行、字段级的完整性,在该层实现。
  3. DWS(Data WareHouse Service): 数仓服务层,数仓的服务层,与之前所提到的数据服务层不同,DWS层为公共汇总层,指标均可在DWS层落地。该层使用DWD层数据,维度数据,对业务上有关联的实体做连接,形成统一粒度的,跨业务流程的,多业务实体的,轻度汇总数据。
  4. DIM(Dimension): 数据维度层,存储维度(含主数据)信息表或配置表,来源数据质量高的ODS数据(如主数据)和DWD层数据。
  5. DM(Data Market): 数据集市层,提供数据服务的分层,有明确的分析主题,基于具体的业务需求场景或者分析场景,数据仅包含维度和指标,没有复杂的逻辑处理。数据来源于DWD,DWS,DIM层,大多数为指标宽表,有较多的维度和指标。
  6. TMP:临时数据处理层,用于各层的数据加工处理过程中的临时数据处理,临时需求场景加工数据的处理。

三、数仓公共开发规范

3.1 分层调用规范

数据分层的标准流向(不含维度)为ODS->DWD->DWS->DM标准流向中,禁止出现反向依赖

维度流向为DWD->DIM或者ODS->DIM,使用ODS直接到DIM的情况,必须保障足够高的数据质量。

DIM、DWS、DM可以往自身分层写入数据,如不同粒度的数据写入。

在这里插入图片描述

数据流向如下图所示:

在这里插入图片描述

3.2 数据类型规范

在保障数据不失真,且不会增加数据存储复杂度,不增加数据处理计算量的情况下,尽量减少数据类型的数量,兼容原始数据原有的类型。

数据类型依据具体的数据存储环境而定,比如使用Apache Doris的情况如下:

  • ID类:BIGINT
  • 标签枚举:INT
  • 字符串:STRING
  • 状态描述:STRING
  • 日期:DATE yyyy-MM-dd
  • 日期时间:DATETIME yyyy-MM-dd HH:mm:ss.SSSSSS
  • 业务数额类默认使用 DECIMAL,精度根据实际情况做调整

3.3 数据冗余规范

宽表的冗余字段要确保以下原则:

  • 冗余字段要使用高频,下游3个或以上使用。
  • 冗余字段引入不应造成本身数据产生过多的延后。
  • 冗余字段和已有字段的重复率不应过大,原则上不应超过 60%,如需要可以选择join或原表拓展。

3.4 NULL字段处理规范

  • 数据类型为int的默认为-999
  • 数据类型为bigint的默认为-999999
  • 数据类型为decimal的默认为0

3.5 公共字段规范

所有数仓分层中的字段,均为小写,且不可出现中文。

物理表中的公共字段信息如下:

在这里插入图片描述

3.6 数据表处理规范

  • 增量表:
    依据具体的时间和其他标签粒度,做对应的分区或多层分区;处理过程中,源表必须包含可增量的属性字段,确保数据的完整性。
  • 全量表:
    每次写入的数据都是最新的;
    每次写入的数据都是完整的全量数据。
  • 拉链表:
    记录一个事物从开始,一直到当前状态的所有变化的信息;
    拉链表每次上报的都是历史记录的最终状态,是记录在当前时刻的历史总量;
    当前记录存的是当前时间之前的所有历史记录的最后变化量(总量)。

3.7 事实表划分规范

在维度建模中,按粒度划分,数据表分为维度表和事实表,事实表包含三种:事务型事实表,周期快照型事实表,累计快照型事实表。

  1. 事务型事实表:
    事务事实表记录事务层面的事实,保存最为原子的数据,其数据在事务发生后发生,粒度为每一行数据。
  2. 周期快照型事实表:
    有规律的,可预见的时间间隔的业务累计数据,比如按天、周、月等做业务的统计度量。
  3. 累计快照型事实表:
    在整个业务的生命周期中,表述业务多个阶段的开始和结束过程,通常有多个时间字段,并且时间不可预测,随着阶段周期的变化,记录也会随着变化而发生修改。

四、数仓各层开发规范

4.1 分层实例

数仓分册实例如下表所示:

在这里插入图片描述

4.2 表的属性词条相关规范

表的属性中会存在以下的属性词条,需要通过业务元数据去描述,不直接通过表名,避免表名太长的问题:

  • 是否宽表
  • 时效: 实时和非实时
  • 更新方式:增量,全量

以下属性需要通过表名去区分:

  • 统计周期:y表示年,m表示月,w表示周,d表示天,h表示小时,mi表示分钟
  • 维度类型:缓慢变化维(scd),非缓慢变化维。

4.3 ODS层设计规范

  1. 命名规则
  • ODS层表命名规则:ods_[类别]_[表内容]。
  • 类别分为业务表(business简称bsn),快照表(snapshot简称snap)和补录表(amended简称amd)。
  • 示例:ods_doris_load.ods_snap_stream_load,其中ods_doris_load是库名,doris是系统,load 是导入库,snap表示是快照表,stream_load是stream_load导入方式表名。
  1. 处理内容
  • 源系统数据的采集和同步,保持和源系统数据的一致性。
    处理过程分为实时和离线,实时接入的数据需要有对应的数据写入状态(新增、修改、删除),实时数据写入时间。
  • 快照表处理:
    对于源表数据量少于100万的,可按天/周/月不同的周期间隔,做全量快照表
    对于源表数据量大于1000万的,需要根据业务主键做拉链表
    对于源表数据量大于100万小于1000万的,根据具体业务的需求,做全量快照
  • 补录表处理:主要针对业务系统中没有的数据,需要导入或者补录平台录入的,用以修复数据或者完善指标规则的,如财务手工账,订单时效的基线等。补录数据需要有以下约束:固定的模板,数据适用范围和有效期,补录数据的更新机制,补录数据更新后的数据处理机制,补录表需在表中增加字段(表述补录类别和用途)。

4.4 DWD层设计规范

  1. 命名规则
  • DWD层表命名规则:dwd_[实体名]
  • 示例:dwd_doris.dwd_doris_load,其中dwd_doris是库名,doris表示AP域,doris_load表示导入凭证
  1. 处理内容
  • 数据的完整性,包括实体的完整性(分段的业务表),数据行的完整性(不同阶段的业务周期的汇集),字段的完整性(关键业务字段)。
  • 数据清洗,对于脏数据按规则进行清洗,保障原子粒度的数据质量。
  • 维度关联映射。

4.5 DWS层设计规范

  1. 命名规则
  • DWS层表命名规则:dws_[主题内容]_[统计周期]
  • 示例:dws_doris.dws_load_d,其中dws_doris是库名,load是导入全流程相关的主题内容,最后的d表示按天统计
  1. 处理内容
  • 不同实体间的关联和逻辑转换。
  • 维度退化。
  • 不同粒度的指标度量表,以及轻度汇总。
  • 不同类型的事实表。
  • 粒度较细的宽表。

4.6 DIM设计规范

  1. 命名规则
  • DIM表命名规则:dim_[主题域][维度类型][维度],维度统一库名,对于有主题域来源,通过表名识别主题域。
  • 示例:dim.dim_doris_scd_load,其中dim表示维度的库名,doris 表示AP域,scd 表示缓慢变化维,load表示导入维度
  1. 处理内容
  • 维度的一致性和准确性。
  • 数据行中,为空维度的兼容。
  • 缓慢变化维。

4.7 DM层设计规范

  1. 命名规则
  • DM层表命名规则:dm_[项目/分析域][主题内容][统计周期]。
  • 示例:dm_doris.dm_doris_load_d,其中dm_doris是库名,doris是表示AP项目,load 表示导入相关的分析,最后的d表示按天统计
  1. 处理内容
  • 基于不同分析主题的宽表,基于应用场景的维度和指标的提取。
  • 指标粒度的一致性。
  • 数据的高度汇总。
  • 保障维度完整性(所有的维度,包含为空的兼容都可在维表中关联)。

4.8 TMP层设计规范

  1. 命名规则
  • TMP层表命名规则:
    ETL作业:tmp_[分层库名_分层表名][流水]
    临时使用的表:tmp
    [用户][表内容][有效期]
  1. 处理内容
  • ETL作业中的临时表,可在ETL中临时创建和删除,必须满足模型管理员清理TMP层数据策略的要求。
  • 临时使用的表,必须有确定的生命周期,不确定有效期的,可设置较长的有效期,模型管理- 员根据有效期和用户,不定时沟通确认该临时表的清理计划。

五、总结

在这里插入图片描述

规范示例仅作为参考,实际开发中需要根据业务要求和场景进行调整适配。

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

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

相关文章

Linux配置JAR包为服务实现自启动

一、实现bash脚本 1.1 绘图工具 绘图需安装idea的插件plantUML-Integration 只需要上图一个就可以,别的也不需要装。 启动服务的逻辑如下 关闭服务的逻辑如下 1.2 逻辑实现 在/root路径下创建entrance文件,实现逻辑如下 #!/usr/bin/env bash # 2>…

【120版本】最新谷歌浏览器驱动下载地址

在使用selenium时可能会遇到谷歌浏览器和谷歌驱动器版本不一致的问题,并且国内可以搜到的谷歌浏览器下载地址里面最新的驱动器只有114版本的,但目前谷歌浏览器最新版本是120。所以这里记录下最新版本120谷歌驱动器下载地址: Chrome for Test…

spark中Rdd依赖和SparkSQL介绍--学习笔记

1,RDD的依赖 1.1概念 rdd的特性之一 相邻rdd之间存在依赖关系(因果关系) 窄依赖 每个父RDD的一个Partition最多被子RDD的一个Partition所使用 父rdd和子rdd的分区是一对一(多对一) 触发窄依赖的算子 map()&…

强化学习应用(七):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法,用于解决基于马尔可夫决策过程(MDP)的问题。它通过学习一个价值函数来指导智能体在环境中做出决策,以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…

【每日小bug】mybatis plus id注解错误导致的问题

插入数据 id不为自增 指定了主键,没有指定自增。会导致出现 修改如上 报错 Data truncation: Out of range value for column ‘id’ at row 1 数据库是bigint,java中是Integer。 修改如上

GCC工具源码编译

文章目录 背景一、下载源码二、编译前依赖准备2.1 相关工具依赖2.2 相关lib(gmp/ mpfr /mpc)依赖2.2.1 lib源码下载2.2.2 lib源码编译 三、编译GCC3.1 编译3.2 链接 四、报错处理 背景 日常可能涉及到系统里自带GCC版本与被编译源码存在不兼容&#xff…

1 - Spring 基本介绍

官网:https://spring.io/ Spring 是一个可以管理整合其他框架的框架 1. IOC 开发模式 程序不再负责对象的创建,而是直接使用ioc容器的对象来完成相关的业务逻辑 1.1 控制反转实现思想 1)Spring 根据配置文件 xml/注解,创建对象…

AR HUD全面「上新」

AR HUD赛道正在迎来新的时代。 上周,蔚来ET9正式发布亮相,新车定位为D级行政旗舰轿车,其中,在智能座舱交互层面,继理想L系列、长安深蓝S7之后,也首次取消仪表盘,取而代之的是业内首个全焦段AR H…

9.5.1 函数模板特化

函数模板 有了泛化版本比较函数&#xff0c;我们可以比较两个整数&#xff0c;两个字符&#xff0c;两个指针 6~10行&#xff0c;是一个函数模板 13~16行&#xff0c;都可以得到正常结果 22行&#xff0c;得到的结果是&#xff0c;"A001" < "A000", …

亚马逊时尚如何运用人工智能帮助您找到合适的尺码

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

命令行(无图形界面)登录dlut-lingshui

1 登录原理 利用python的requests库向校园网认证服务器发送认证请求。 2 登录步骤 获取校园网认证界面的用户名和密码。用户名是自己学号&#xff1b;密码由网页加密&#xff0c;需要一台有图形界面的电脑辅助获取&#xff0c;获取方法见下一节。把获取到的用户名和密码填入…

【AIGC】IP-Adapter:文本兼容图像提示适配器,用于文本到图像扩散模型

前言 IPAdapter能够通过图像给Stable Diffusion模型以内容提示&#xff0c;让其生成参考该图像画风&#xff0c;可以免去Lora的训练&#xff0c;达到参考画风人物的生成效果。 摘要 通过文本提示词生成的图像&#xff0c;往往需要设置复杂的提示词&#xff0c;通常设计提示词变…

【JavaSE语法】图书管理系统实现详解

图片出处&#xff1a;The worlds biggest drone photo and video sharing platform | SkyPixel.com 导言 在学完JavaSE语法后&#xff0c;我们就可以去尝试写一个简单的图书管理系统来进一步提升我们面对对象编程的思想。在该系统中会涉及到数组&#xff0c;接口&#xff0c;封…

案例118:基于微信小程序的电影院订票选座系统设计及实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

安卓手机变iOS!

Launcher iOS 16 - 安卓手机秒变iOS Launcher iOS 16 是一款iOS启动器&#xff0c;可以将安卓手机桌面变成iOS样子&#xff0c;还有iOS的开机动画和景深效果&#xff01; 下载链接&#xff1a;【Launcher iOS 16】 ​

python flask学生管理系统

预览 前端 jquery css html bootstrap: 4.x 后端 python: 3.6.x flask: 2.0.x 数据库 mysql: 5.7 学生管理模块 登录、退出查看个人信息、修改个人信息成绩查询查看已选课程选课、取消选课搜索课程课程列表分页功能 教师模块 登录、退出查看个人信息、修改个人信息录入…

为什么选择Go语言编写网络应用程序

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等&#xff0c;您的关注将是我的更新动力&#xff01; 作为一名后端开发者&#xff0c;你一定对选择合适的编程语言来编写网络应用程序非常重视。在众多的编程语言中&#xff0c;Go语言…

Vue keep-alive的使用和原理解析

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…

持续集成-Jenkins显示HTML报告

1 需要安装startup-trigger-plugin和Groovy插件。 2 在Job配置页面&#xff0c;构建触发器&#xff0c;勾选Build when job nodes start&#xff1b; 3 在Job配置页面&#xff0c;增加构建步骤Execute system Groovy script&#xff0c;在Groovy Command中输入上面命令&…

图神经网络|图注意网络Graph Attention Network

图注意网络Graph Attention Network Leaky ReLU 有利于压低负数对结局的影响。 图注意网络Graph Attention Network的流程 输入向量 h i h_i hi​乘上权重矩阵W得到对应的向量 h i ∗ h_i^* hi∗​,并将 h i ∗ h_i^* hi∗​计算出对应的 a i a_i ai​,从而得到最终对结果向量…