数据仓库建模规范思考

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 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/ 模块 / 子模块 / 子子模块的方式命名。
  • 数仓分层按照 / 数仓分层 / 业务域 / 数据域 / 指标名称的方式命名。

七、总结

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

目录
相关文章
|
5天前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践
|
7天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
6247 18
|
19天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
11天前
|
自然语言处理 数据可视化 API
Qwen系列模型+GraphRAG/LightRAG/Kotaemon从0开始构建中医方剂大模型知识图谱问答
本文详细记录了作者在短时间内尝试构建中医药知识图谱的过程,涵盖了GraphRAG、LightRAG和Kotaemon三种图RAG架构的对比与应用。通过实际操作,作者不仅展示了如何利用这些工具构建知识图谱,还指出了每种工具的优势和局限性。尽管初步构建的知识图谱在数据处理、实体识别和关系抽取等方面存在不足,但为后续的优化和改进提供了宝贵的经验和方向。此外,文章强调了知识图谱构建不仅仅是技术问题,还需要深入整合领域知识和满足用户需求,体现了跨学科合作的重要性。
|
7天前
|
人工智能 容器
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
本文介绍了如何利用千问开发一款情侣刮刮乐小游戏,通过三步简单指令实现从单个功能到整体框架,再到多端优化的过程,旨在为生活增添乐趣,促进情感交流。在线体验地址已提供,鼓励读者动手尝试,探索编程与AI结合的无限可能。
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
|
1月前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
104578 10
|
11天前
|
Cloud Native Apache 流计算
资料合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
4205 10
资料合集|Flink Forward Asia 2024 上海站
|
4天前
|
弹性计算 运维 监控
阿里云云服务诊断工具:合作伙伴架构师的深度洞察与优化建议
作为阿里云的合作伙伴架构师,我深入体验了其云服务诊断工具,该工具通过实时监控与历史趋势分析,自动化检查并提供详细的诊断报告,极大提升了运维效率和系统稳定性,特别在处理ECS实例资源不可用等问题时表现突出。此外,它支持预防性维护,帮助识别潜在问题,减少业务中断。尽管如此,仍建议增强诊断效能、扩大云产品覆盖范围、提供自定义诊断选项、加强教育与培训资源、集成第三方工具,以进一步提升用户体验。
620 243
|
6天前
|
消息中间件 人工智能 运维
12月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
587 39
|
11天前
|
人工智能 自然语言处理 芯片
上千人挑战,用通义灵码从 0 开始打造一款 App 爆火 | 第二课:搭建本机服务
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。