数据仓库规范建设指南

1.数仓公共开发规范

1.1 层次调用规范

稳定业务按照标准的数据流向进行开发,即ODS-> DWD-> DWS-> APP。

非稳定业务探索性需求,可以遵循ODS-> DWD->APP或者ODS-> DWD-> DWM-> APP 两个模型数据流。

在保证了数据链路的合理性之后,也必须保证模型分层引用原则:

  • 正常流向:ODS-> DWD-> DWM-> DWS-> APP,当出现ODS->DWD-> DWS-> APP 这种关系时,说明主题域未覆盖全。应将DWD数据落到DWM中,对于使用频度非常低的表允许DWD-> DWS。
  • 尽量避免出现DWS宽表中使用DWD又使用DWM的表。
  • 同一主题域内对于DWM生成DWM的表,原则上要尽量避免,否则会影响ETL的效率。
  • DWM、DWS、和APP中禁止直接使用ODS的表,ODS的表只能被DWD引用。
  • 禁止出现反向依赖,例如DWM的表依赖DWS的表。

1.2 数据类型规范

需统一规定不同的数据的类型,严格按照规定的数据类型执行:

  1. 金额:double 或使用decimal(28,6)控制精度等,明确单位是分还是元。
  2. 字符串:string。
  3. id类:bigint。
  4. 时间:string。
  5. 状态:string。

1.3 数据冗余规范

宽表的冗余字段要确保:

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

1.4 NULL字段处理规范

  • 对于维度字段,需要设置为-1
  • 对于指标字段,需要设置为0

1.5 指标口径规范

保证主题域内,指标口径一致,无歧义

通过数据分层,提供统一的数据出口,统一对外输出的数据口径,避免同一指标不同口径的情况发生。

1.6 数据表处理规范

  • 增量表

新增数据,增量数据是上一次导出之后的新数据。

  1. 记录每次增加的量,而不是总量;
  2. 增量表,只报变化量,无变化不用报;
  3. 每天一个分区。
  • 全量表

每天的所有的最新状态的数据。

  1. 全量表,有无变化,都要报;
  2. 每次上报的数据都是所有的数据(变化的+没有变化的);
  3. 只有一个分区;
  • 快照表

按日分区,记录截止数据日期的全量数据。

  1. 快照表,有无变化都要报;
  2. 每次上报的数据都是所有的数据(变化的+没有变化的);
  3. 一天一个分区。
  • 拉链表

记录截止数据日期的全量数据。

  1. 记录一个事务从开始,一直到当前状态的所有变化的信息;
  2. 拉链表每次上报的都是历史记录的最终状态,是记录在当前时刻的历史总量;
  3. 当前记录存的当前时间之前的所有历史记录的最后变化量(总量);
  4. 只有一个分区。

1.7 表的生命周期管理

通过对历史数据的等级划分与对表类型的划分生成相应的生命周期管理矩阵。

历史数据等级划分

主要将历史数据划分P0、P1、P2、P3 四个等级,其具体定义如下:

  • P0 :非常重要的主题域数据和非常重要的应用数据,具有不可恢复性,如交易、日志、集团 KPI 数据、 IPO 关联表。
  • P1 :重要的业务数据和重要的应用数据,具有不可恢复性,如重要的业务产品数据。
  • P2 :重要的业务数据和重要的应用数据,具有可恢复性,如交易线 ETL 产生的中间过程数据。
  • P3 :不重要的业务数据和不重要的应用数据,具有可恢复性,如某些 SNS 产品报表。

表类型划分

  • 事件型流水表(增量表)

    事件型流水表(增量表)指数据无重复或者无主键数据,如日志。

  • 事件型镜像表(增量表)

    事件型镜像表(增量表)指业务过程性数据,有主键,但是对于同样主键的属性会发生缓慢变化,如交易、订单状态与时间会根据业务发生变更。

  • 维表

    维表包括维度与维度属性数据,如用户表、商品表。

  • Merge 全量表

    Merge 全量表包括业务过程性数据或者维表数据。由于数据本身有新增的或者发生状态变更,对于同样主键的数据可能会保留多份,因此可以对这些数据根据主键进行 Merge 操作,主键对应的属性只会保留最新状态,历史状态保留在前一天分区 中。例如,用户表、交易表等都可以进行 Merge 操作。

  • ETL 临时表

    ETL 临时表是指 ETL 处理过程中产生的临时表数据,一般不建议保留,最多7天。

  • 普通全量表

很多小业务数据或者产品数据,BI一般是直接全量拉取,这种方式效率快,对存储压力也不是很大,而且表保留很长时间,可以根据历史数据等级确定保留策略。

2.数仓各层开发规范

2.1 ODS层设计规范

同步规范

  1. 一个系统源表只允许同步一次;
  2. 全量初始化同步和增量同步处理逻辑要清晰;
  3. 以统计日期和时间进行分区存储;
  4. 目标表字段在源表不存在时要自动填充处理。

表分类与生命周期

  • ods流水全量表:

    • 不可再生的永久保存;
    • 日志可按留存要求;
    • 按需设置保留特殊日期数据;
    • 按需设置保留特殊月份数据。
  • ods镜像型全量表:
    • 推荐按天存储;
    • 对历史变化进行保留;
    • 最新数据存储在最大分区;
    • 历史数据按需保留;
  • ods增量数据:
    • 推荐按天存储;
    • 有对应全量表的,建议只保留14天数据;
    • 无对应全量表的,永久保留;
  • ods的ETL过程中的临时表:
    • 推荐按需保留;
    • 最多保留七天;
    • 建议用完即删,下次使用再生成;
  • BDSync非去重数据:
    • 通过中间层保留,默认用完即删,不建议保留。

数据质量

  1. 全量表必须配置唯一性字段标识;
  2. 对分区空数据进行监控;
  3. 对枚举类型字段,进行枚举值变化和分布监控;
  4. ods表数据量级和记录数做环比监控;
  5. ods全表都必须要有注释。

2.2 公共维度层设计规范

设计准则

共维度在不同的物理表中的字段名称、数据类型、数据内容必须保持一致(历史原因不一致,要做好版本控制)

组合原则

将维度与关联性强的字段进行组合,一起查询、一起展示,两个维度必须具有天然的关系,如:商品的基本属性和所属品牌。

无相关性:如一些使用频率较小的杂项维度,可以构建一个集合杂项维度的特殊属性。

行为维度:经过计算的度量,但下游当维度处理,例:点击量0-1000,100-1000等,可以做聚合分类。

拆分与冗余

针对重要性,业务相关性、源、使用频率等可分为核心表、扩展表。

数据记录较大的维度,可以适当冗余一些子集。

存储及生命周期管理

建议按天分区。

3个月内最大访问跨度<=4天时,建议保留最近7天分区;

3个月内最大访问跨度<=12天时,建议保留最近15天分区;

3个月内最大访问跨度<=30天时,建议保留最近33天分区;

3个月内最大访问跨度<=90天时,建议保留最近120天分区;

3个月内最大访问跨度<=180天时,建议保留最近240天分区;

3个月内最大访问跨度<=300天时,建议保留最近400天分区;

2.3 DWD明细层设计规范

存储及生命周期管理

建议按天分区。

3个月内最大访问跨度<=4天时,建议保留最近7天分区;

3个月内最大访问跨度<=12天时,建议保留最近15天分区;

3个月内最大访问跨度<=30天时,建议保留最近33天分区;

3个月内最大访问跨度<=90天时,建议保留最近120天分区;

3个月内最大访问跨度<=180天时,建议保留最近240天分区;

3个月内最大访问跨度<=300天时,建议保留最近400天分区;

事务型事实表设计准则

  • 基于数据应用需求的分析设计事务事实表,结合下游较大的针对某个业务过程的分析指标需求,可以考虑基于某个事件过程构建事务性实时表;
  • 一般选用事件的发生日期或时间作为分区字段,便于扫描和裁剪;
  • 冗余子集原则,有利于降低后续IO开销;
  • 明细层事实表维度退化,减少后续使用join成本。

周期快照事实表

  • 周期快照事实表中的每行汇总了发生在某一标准周期,如某一天、某周、某月的多个度量事件。
  • 粒度是周期性的,不是个体的事务。
  • 通常包含许多事实,因为任何与事实表粒度一致的度量事件都是被允许的。

累积快照事实表

  • 多个业务过程联合分析而构建的事实表,如采购单的流转环节。
  • 用于分析事件时间和时间之间的间隔周期
  • 少量的且当前事务型不支持的,如关闭、发货等相关的统计。

2.4 DWS公共汇总层设计规范

数据仓库的性能是数据仓库建设是否成功的重要标准之一。聚集主要是通过汇总明细粒度数据来获得改进查询性能的效果。通过访问聚集数据,可以减少数据库在响应查询时必须执行的工作量,能够快速响应用户的查询,同时有利于减少不同用户访问明细数据带来的结果不一致问题。

  • 聚集的基本原则

    • 一致性,聚集表必须提供与查询明细粒度数据一致的查询结果。
    • 避免单一表设计,不要在同一表中存储不同层次的聚集数据。
    • 聚集粒度可不同,聚集并不需要保持与原始明细粒度数据一样的粒度,聚集只关心所需要查询的维度。
  • 聚集的基本步骤

第一步:确定聚集维度

在原始明细模型中会存在多个描述事实的维度,如日期、商品类别、卖家等,这时候需要确定根据什么维度聚集,如果只关心商品的交易额情况,那么就可以根据商品维度聚集数据。

第二步:确定一致性上钻

这时候要关心是按月汇总还是按天汇总,是按照商品汇总还是按照类目汇总,如果按照类目汇总,还需要关心是按照大类汇总还是小类汇总。当然,我们要做的只是了解用户需要什么,然后按照他们想要的进行聚集。

第三步:确定聚集事实

在原始明细模型中可能会有多个事实的度量,比如在交易中有交易额、交易数量等,这时候要明确是按照交易额汇总还是按照成交数量汇总。

  • 公共汇总层设计原则

除了聚集基本的原则外,公共汇总层还必须遵循以下原则:

  • 数据公用性。汇总的聚集会有第三者使用吗?基于某个维度的聚集是不是经常用于数据分析中?如果答案是肯定的,那么就有必要把明细数据经过汇总沉淀到聚集表中。
  • 不跨数据域。数据域是在较高层次上对数据进行分类聚集的抽象。
  • 区分统计周期。在表的命名上要能说明数据的统计周期,如 _Id表示最近1天,_td 表示截至当天,_nd 表示最近N天。

3.数仓命名规范

3.1 词根设计规范

词根属于数仓建设中的规范,属于元数据管理的范畴,现在把这个划到数据治理的一部分。完整的数仓建设是包含数据治理的,只是现在谈到数仓偏向于数据建模, 而谈到数据治理,更多的是关于数据规范、数据管理。

表命名,其实在很大程度上是对元数据描述的一种体现,表命名规范越完善,我 们能从表名获取到的信息就越多。比如:一部分业务是关于货架的,英文名是:rack, rack 就是一个词根,那我们就在所有的表、字段等用到的地方都叫 rack,不要叫成别的什么。这就是词根的作用,用来统一命名,表达同一个含义。

指标体系中有很多“率”的指标,都可以拆解成 XXX+率,率可以叫 rate,那我们所有的指标都叫做 XXX+rate。

词根:可以用来统一表名、字段名、主题域名等等

举例:以流程图的方式来展示,更加直观和易懂,本图侧重 dwm 层表的命名规范,其余命名是类似的道理:

第一个判断条件是该表的用途,是中间表、原始日志还是业务展示用的表,如果该表被判断为中间表,就会走入下一个判断条件:表是否有 group 操作,通过是否有 group 操作来判断该表该划分在 dwd 层还是 dwm 和 dws 层,如果不是 dwd 层,则需要判断该表是否是多个行为的汇总表(即宽表) ,最后再分别填上事业群、部门、业务线、自定义名称和更新频率等信息即可。

分层:表的使用范围

事业群和部门:生产该表或者该数据的团队

业务线:表明该数据是哪个产品或者业务线相关

主题域:分析问题的角度,对象实体

自定义:一般会尽可能多描述该表的信息,比如活跃表、留存表等

更新周期:比如说天级还是月级更新

3.2 数仓表的命名规范

  • 数仓层次

    公用维度:dim

    DM层:dm

    ODS层:ods

    DWD层:dwd

    DWS层:dws

  • 周期/数据范围

    日快照:d

    增量:i

    全量:f

    周:w

    拉链表:l

    非分区全量表:a

    • 常规表

      常规表是我们需要固化的表,是正式使用的表,是目前一段时间内需要去维护去完善的表。

      规范:分层前缀[dwd|dws|ads]_部门_业务域_主题域_XXX_更新周期|数据范围

      业务域、主题域我们都可以用词根的方式枚举清楚,不断完善。

      更新周期主要的是时间粒度、日、月、年、周等。

    • 中间表

      中间表一般出现在 Job 中,是 Job 中临时存储的中间数据的表,中间表的作 用域只限于当前 Job 执行过程中,Job 一旦执行完成,该中间表的使命就完 成了,是可以删除的(按照自己公司的场景自由选择,以前公司会保留几天 的中间表数据,用来排查问题)。

      规范:mid_table_name_[0~9|dim]

      table_name 是我们任务中目标表的名字,通常来说一个任务只有一个目标表。这里加上表名,是为了防止自由发挥的时候表名冲突,而末尾大家可以选择自由发挥,起一些有意义的名字,或者简单粗暴,使用数字代替,各有优劣吧,谨慎选择。

      通常会遇到需要补全维度的表,这里使用 dim 结尾。

      如果要保留历史的中间表,可以加上日期或者时间戳。

    • 临时表

      临时表是临时测试的表,是临时使用一次的表,就是暂时保存下数据看看,后续一般不再使用的表,是可以随时删除的表。

      规范:tmp_xxx

      只要加上 tmp 开头即可,其他名字随意,注意 tmp 开头的表不要用来实际使用,只是测试验证而已。

    • 维度表

      维度表是基于底层数据,抽象出来的描述类的表。维度表可以自动从底层表抽象出来,也可以手工来维护。

      规范:dim_xxx

      维度表,统一以 dim 开头,后面加上,对该指标的描述。

    • 手工表

      手工表是手工维护的表,手工初始化一次之后,一般不会自动改变,后面变更,也是手工来维护。

      一般来说,手工的数据粒度是偏细的,所以暂时统一放在 dwd 层,后面如果有目标值或者其他类型手工数据,再根据实际情况分层。

      规范:dwd_业务域_manual_xxx

      手工表,增加特殊的主题域,manual,表示手工维护表。

3.3 指标命名规范

  • 所有单词小写
  • 单词之间下划线分割(反例:appName 或 AppName)
  • 可读性优于长度 (词根,避免出现同一个指标,命名一致性)
  • 禁止使用 sql 关键字,如字段名与关键字冲突时 +col
  • 数量字段后缀 _cnt 等标识…
  • 金额字段后缀 _price 标识
  • 天分区使用字段 dt,格式统一(yyyymmdd 或 yyyy-mm-dd)
  • 小时分区使用字段 hh,范围(00-23)
  • 分钟分区使用字段 mi,范围(00-59)
  • 布尔类型标识:is_{业务},不允许出现空值

数据仓库规范建设指南相关推荐

  1. 中央网信办等四部门发布《数字乡村标准体系建设指南》,全面规范农业农村数据标准

    近日,中央网信办.农业农村部.工业和信息化部.市场监管总局会同有关部门发布<数字乡村标准体系建设指南>. 关于农业农村数据标准其中提出: 数据资源标准:主要包括基础库.专题库标准:基础库标 ...

  2. 数字档案馆建设指南及档案业务系统归档接口规范

    数字档案室建设指南 国家档案局 2014年 说   明  本指南由国家档案局提出并归口. 本指南起草单位:国家档案局档案馆(室)业务指导司. 本指南主要起草人:孙钢 朱煜 李忱 丁德胜毛海帆 傅培超 ...

  3. 《企业私有云建设指南》-导读

    内容简介 第1章总结性地介绍了云计算的参考架构.典型解决方案架构和涉及的关键技术. 第2章从需求分析入手,详细讲解了私有云的技术选型.资源管理.监控和运维. 第3章从计算.网络.存储资源池等方面讲解了 ...

  4. 基于阿里云数加MaxCompute的企业大数据仓库架构建设思路

    摘要: 数加大数据直播系列课程主要以基于阿里云数加MaxCompute的企业大数据仓库架构建设思路为主题分享阿里巴巴的大数据是怎么演变以及怎样利用大数据技术构建企业级大数据平台. 本次分享嘉宾是来自阿 ...

  5. 【智能制造】工信部:《国家智能制造标准体系建设指南(2018年版)》(征求意见稿)

    据工信部1月15日消息,为加快推进智能制造综合标准化工作,加强顶层设计,构建智能制造综合标准体系,发挥智能制造标准的规范和引领作用,工业和信息化部.国家标准化管理委员会组织开展智能制造综合标准化体系建 ...

  6. 国家两部委印发《智慧家庭综合标准化体系建设指南》

    导读:工业和信息化部.国家标准化管理委员印发的<智慧家庭综合标准化体系建设指南>提出,到2020年初步建立符合我国智慧家庭产业发展需要的标准体系,形成基础标准较为完善.主要产品和服务标准基 ...

  7. 互联网运营平台指标体系_分享 :滴滴数据仓库指标体系建设实践

    导读:指标体系是什么?如何使用OSM模型和AARRR模型搭建指标体系?如何统一流程.规范化.工具化管理指标体系?本文会对建设的方法论结合滴滴数据指标体系建设实践进行解答分析. 1. 什么是指标体系 ▍ ...

  8. 互联网运营平台指标体系_滴滴数据仓库指标体系建设实践

    桔妹导读:指标体系是什么?如何使用OSM模型和AARRR模型搭建指标体系?如何统一流程.规范化.工具化管理指标体系?本文会对建设的方法论结合滴滴数据指标体系建设实践进行解答分析. 1.  什么是指标体 ...

  9. 企业级数据仓库:数据仓库概述;核心技术框架,数仓理论,数据通道Hive技术框架,HBase设计,系统调度,关系模式范式,ER图,维度建模,星型/雪花/星座模式,数据采集同步,业务数据埋点,数据仓库规范

    文章目录 第一章 数据仓库概述 1.1 数据仓库简介 1.1.2 什么是数据仓库? 1.1.3 OLTP 与 OLAP 1.2 数据仓库技术架构 1.3 课程目标 第二章 核心技术框架 2.1 数据仓 ...

最新文章

  1. java 字符串xml,解析java中的xml字符串?
  2. freetype 安装
  3. oracle connect by用法
  4. cookie及session
  5. 成功解决urllib.error.URLError urlopen error Errno 11004 getaddrinfo failed
  6. DSP学习 -- Visual Studio 操作
  7. loj#2542 [PKUWC2018]随机游走 (概率期望、组合数学、子集和变换、Min-Max容斥)
  8. 基于IP访问控制的局限性
  9. bfc和haslayout
  10. 计算机入门在线阅读,电脑入门基础教程..doc
  11. springCloud五大组件--Eureka
  12. qtdesigner右击按钮没有 to slot_或添加“力感按钮”再升级,Apple Pencil会更“能打”?...
  13. 关于AMS117_3.3V电源芯片导致CH340串口芯片重启的问题
  14. 实现一个病毒扫描app——python爬取病毒样本
  15. 图像算法---头发检测算法研究
  16. OAuth2.0公钥私钥授权技术
  17. PyTorch中 detach() 、detach_()和 data 的区别
  18. word文档怎么找回误删的文件_怎样找回误删除的word文件?
  19. Artifact ssmbuildFinal:war exploded: Artifact is being deployed SSM整合
  20. brew | brew cask | yum | apt-get

热门文章

  1. HTML学习14-js 内置对象 Date() 常用的日期的方法 定时器 倒计时 监听事件
  2. android gps 工具下载,GPS工具箱
  3. CentOS7安装新字体
  4. bs7文件.Win7BootUpdater .修改 © MicrosoftCorporation
  5. TypeScript 全面介绍
  6. 同一网络内的计算机怎么看,win7系统查看局域网内其他电脑的方法(图文)
  7. MIUI官方论坛 - 发烧友必刷的Android ROM
  8. 2021-09-10 工业 协议 汇集
  9. Excel文件加密方式有几种?
  10. 认识通讯软件搜狗号码通