数据仓库建模规范思考

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本文介绍了数据仓库建模规范,包括模型分层、设计、数据类型、命名及接口开发等方面的详细规定。通过规范化分层逻辑、高内聚松耦合的设计、明确的命名规范和数据类型转换规则,提高数据仓库的可维护性、可扩展性和数据质量,为企业决策提供支持。

一、引言

最近跟朋友一起聊起来数仓建模规范,结合最近公司使用,以及个人感触,写一篇文章供大家探讨交流,后面一篇文章我会写下数仓的对应的详细生命周期。

二、模型分层规范

1. 目的

  • 规范化数仓分层逻辑,避免数据位置混乱,确保数据在不同层次之间的清晰定位和有序流动。
  • 实现高内聚松耦合,便于数据的管理和维护。不同层次的数据具有不同的职责和特点,相互独立又相互协作,提高了数据仓库的可扩展性和灵活性。

2. 规范

  • 数据层次划分为四层:业务层(ODS)、通用模型层(DWD/DWS)、应用层(ADS)。
  • 业务 ODS 层
  • 定义:来自外部系统的数据同步引入到大数据平台,没有经过加工处理的原始数据,其数据结构与源业务系统的数据 schema 保持一致,被称为 “贴源层”。
  • 来源:业务系统、网站 / APP 的流量采集系统的采集日志数据或外部采集的数据,直接在大数据平台存储的物理模型构成 ODS 层物理表。
  • 数据中间层(DWD + DWS)
  • 公共维度层:基于维度建模概念思想,建立整个数据中台部的一致性维度,为后续的数据处理和分析提供统一的维度标准。
  • 明细粒度事实层:以业务过程作为建模驱动,构建最细粒度的明细层事实表。结合数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理,提高数据查询性能。
  • 公共汇总粒度事实层:以分析的主体作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。
  • 应用层 ADS
  • 定义:面向特定产品需求或应用结构构建的特定格式数据组织,以功能需求驱动,模型结构以应用便捷为组织原则。

3. 术语解释

  • ODS:Operation Data Store,业务操作层数据,存储原始业务数据。
  • DIM:Dimension,维度表层,用于存储维度数据。
  • TMP:临时表层,临时查询使用过渡表。
  • CDM:Common Data Model,通用数据模型(数据中间层),包含 DWD 和 DWS。
  • DWD:Data Warehourse Detail,数据仓库明细层数据。
  • DWS:Data Warehourse Summary,数据仓库汇总层数据。
  • DM:Data Market,数据集市层。
  • ADS:Application Data Store,面向应用层数据。

三、模型设计规范

1. 设计约定

  • 统计表允许多个维度:便于从不同角度对数据进行分析和统计,满足多样化的业务需求。
  • 模型复用层:先设计公用模型,各业务优先使用公用模型指标。个性化指标可分别设计模型,提高模型的复用性,减少重复开发。
  • 命名规范化:DWD/DWS 层命名只控制头(业务域 + 数据域)、尾(刷新周期及数据粒度),使命名更加规范、易于理解和管理。

2. 层次调用约定

  • 应用层优选调用 DW 公共层和集市层数据,不允许应用层跨过中间层和集市层从 ODS 层重复加工数据。避免过度的 ODS 层引用和不合理的数据复制、子集合冗余,提高数据处理效率和数据一致性。
  • 中间层应积极将公用的数据沉淀到公共层,为其他项目提供数据服务,实现数据的共享和复用。

3. 表命名规范

  • 每日全量分区:datax_ods_<上游逻辑表名>,例如 datax_ods_cp_act_re_procdef_df。
  • 每日增量分区:datax_ods <上游逻辑表名> delta,例如 datax_ods_cp_act_re_procdef_delta。
  • 中间层 DWD 表命名规范:dwd <业务域>< 数据域 >< 业务过程 | 自定义表名 >< 存储策略 >。
  • 中间层 DWS 表命名规范:dws <业务域>< 数据域 >< 业务过程 >< 粒度 | 自定义表名 >_< 时间维度 >。
  • 中间层 DIM 维表命名规范:dim <业务域>< 数据域 >_< 自定义表名 >。
  • 应用层 ADS 表命名规范:ads <数据应用名称>< 自定义表名 >_< 时间维度 >。
  • 视图命名规范:view <自定义表名> for_<BU / 部门 / 系统 >。

4. 存储策略

  • 策略类型:包括实时全量、实时增量、15 分钟全量、15 分钟增量等多种类型,以满足不同数据更新频率和存储需求。
  • 后缀缩写:不同的存储策略对应不同的后缀缩写,例如实时全量为_rf,实时增量为_ri 等,便于识别和管理。

5. 时间维度

  • 定义了多种时间维度,包括最近 1 次、最近 1 天、最近 1 周、自然月、自然年等,满足不同时间范围的数据分析需求。
  • 时间维度命名规范,例如最近 1 天为 1day(_1d),自然月为 calendar month(_cm)等,使时间维度的表达更加清晰和统一。

6. 字段级命名规范

  • 统计日期:用于标识表中数据的计算日期,字段命名格式为 stata_date,在 DWS 层及以上的表中必须存在。
  • 编码字段:为标识主题唯一性而设置的编码,字段命名格式为 <标识主体>_code。
  • id 字段:纯数字的序列号,没有特殊含义,字段命名格式为 <标识主体>_id。
  • 计数字段:单量、计数、用户数等整数值型信息字段,计数主体指计数运算的对象,字段命名格式为 <计数主体>_cnt。
  • 比例字段:占比、百分率等 double 值型信息字段,字段命名格式为 <计数主体>_rate。
  • 费用字段:各类费用、收入相关字段,命名格式为 <标识主体>_amt。
  • 标识字段:取值为 '0/1' 的二元值字段,字段命名格式为 is_<标识主体>。
  • 时间字段:数据类型为 String,格式为 YYYY-MM-DD HH-MI-SS 带有小时分钟秒等精度的字段,字段命名格式为 <业务主体>_time。
  • 日期字段:数据类型 String,格式为 YYYYMMDD 的精确到天的时间字段,字段命名格式为 <业务主体>_date。
  • 分区字段:分区字段的含义需要在分区表中情况进行说明,分区深度不建议超过 3 层,包括日 / 报表周 / 周分区、月 / 季度 / 年分区、小时分区、分钟分区、业务分区等。

7. 指标命名规范

  • 指标字段命名格式为:<原子指标>< 维度组合 >< 计算规则 >_< 时间维度 >。
  • 例如,原子指标为开标数(bid),维度为数据来源(source),状态(status),预警级别(level,缩写为 lvl),计算规则为求和(cnt)、占比(rate)、明细(detl)等,时间维度参照前面的规范。

四、数据类型

1. ODS 层数据类型转换规则

  • ODS 层的数据类型基于源系统数据类型转换,例如 Mysql 数据类型 TINYINT/SMALLINT/MEDIUMINT/INTEGER/BIGINT 转换为数仓数据类型(hive)的 Bigint。
  • FLOAT/DOUBLE/DECIMAL 转换为 Double,有精度要求可用 decimal。
  • LONGTEXT/TEXT/VARCHAR/CHAR 转换为 String。
  • DATE 转换为 String(格式:YYYYMMDD)。
  • DATETIME 转换为 String(格式:YYYY-MM-DD HI24:MM:SS.sss)。
  • Oracle 数据类型 Number 根据实际数据,如果是浮点数则使用 double,默认使用 bigint。VARCHAR2/VARCHAR 转换为 String (格式:YYYYMMDD),DATE 转换为 String(格式:YYYY-MM-DD HI24:MM:SS),CLOB 转换为 String。
  • 日志解析前数据类型 STRING 大字段转换为日志解析后数据类型 String 所有字段。

2. CDM 层和 ADS 层数据类型标准

  • Bigint:数字型关联字段,例如标段 ID 等,没有小数位的统计值。
  • Double:有小数位的统计值,有精度要求可用 decimal。
  • String:除上述情况。

五、其他命名规范

1. 脚本内部临时表命名规范

  • 周期性任务建议采用分区表,现表名后加周期,例如 tmp <目标表>[n]。

六、接口开发规范

  • 接口相关字段、输入、输出参数采用驼峰式命名。
  • 接口路径不超过 4 层,长度不宜超过 30 个字符。
  • 建议以 /ads/ 模块 / 子模块 / 子子模块的方式命名。
  • 数仓分层按照 / 数仓分层 / 业务域 / 数据域 / 指标名称的方式命名。

七、总结

数据仓库建模规范是确保数据仓库高效、可靠运行的重要保障。通过规范模型分层、设计、数据类型、命名以及接口开发等方面,可以提高数据仓库的可维护性、可扩展性和数据质量,为企业的决策支持提供准确、及时的数据服务。在实际应用中,应根据企业的业务需求和数据特点,灵活运用这些规范,不断优化和完善数据仓库的建设。

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
消息中间件 搜索推荐 算法
数据仓库常见规范
数据仓库常见规范
数据仓库常见规范
|
7月前
|
存储 SQL 分布式计算
离线数仓(五)【数据仓库建模】(4)
离线数仓(五)【数据仓库建模】
|
7月前
|
SQL 存储 关系型数据库
离线数仓(五)【数据仓库建模】(1)
离线数仓(五)【数据仓库建模】
离线数仓(五)【数据仓库建模】(1)
|
存储 数据挖掘 关系型数据库
数仓学习---6、数据仓库概述、 数据仓库建模概述、维度建模理论之事实表、维度建模理论之维度表
数仓学习---6、数据仓库概述、 数据仓库建模概述、维度建模理论之事实表、维度建模理论之维度表
离线数仓(五)【数据仓库建模】(3)
离线数仓(五)【数据仓库建模】
|
7月前
|
存储 SQL JSON
离线数仓(五)【数据仓库建模】(2)
离线数仓(五)【数据仓库建模】
|
8月前
|
存储 数据挖掘 BI
离线数据仓库规范
离线数据仓库规范
|
8月前
|
数据挖掘 数据库
离线数仓6.0--- 数据仓库 ER模型-范式理论,维度模型、维度建模理论之事实表、维度建模理论之维度表
离线数仓6.0--- 数据仓库 ER模型-范式理论,维度模型、维度建模理论之事实表、维度建模理论之维度表
325 0
|
8月前
|
存储 大数据 数据管理
数据仓库(07)数仓规范设计
所谓的规范的定义,简单理解,如果把数据当作货物,那就是货物的分类,以及对应相关的属性,比如生产日期,某个原料的含量等,我们可以把相近或者相同货物,按照一定的规律,放在一起,方便入库与出库,需要某个货物按照这些规律就可以,以比较快的速度拉取出来。 一般的规范设计包含一下几个方面:划分和定义数据域、业务过程、维度、度量 原子指标、修饰类型、修饰词、时间周期、派生指标。
347 0
|
存储 数据挖掘 BI
数据仓库建模
数据仓库建模
226 0