数据仓库规范设计

这篇具有很好参考价值的文章主要介绍了数据仓库规范设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、为什么要进行规范设计

无规矩、不方圆。规范设计是在具体开发工作之前制定的,过程中不断进行完善。目的在于约束 N 个人对齐认知,按照一个标准或流程进行开发,以保证数据一致性,流程清晰且稳定。

一个良好的规范设计,应当起到以下作用:提高开发效率,提升质量,降低沟通对齐成本,降低运维成本等。

下面将带领大家盘一盘数据仓库有哪些规范,从中挑选几个重点细说:

  • 设计规范

            逻辑架构、技术架构、分层设计、主题划分、方法论

  •  命名规范

            各层级命名、任务命名、表命名、字段命名、指标命名等 

  • 模型规范

            建模方法、建模工具、血缘关系、维度退化、一致性维度、元数据管理

  • 开发规范

            脚本注释、字段别名、编码规范、脚本格式、数据类型、缩写规范 

  • 流程规范

            需求流程、工程流程、上线流程、调度流、调度和表生命周期管理

2、设计规范 - 指标

  • Step1:面向主题域管理

为了提高指标管理的效率,你需要按照业务线、主题域和业务过程三级目录方式管理指标。

  • Step2:划分原子指标和派生指标

原子指标 + 原子指标  = 派生指标

  • Step3:进行指标命名规范

需要遵循两个原则:易懂与统一

  1. 易懂,就是看到指标的名称,就可以基本判断这个指标归属于哪个业务过程;
  2. 统一,就是要确保派生指标和它继承的原子指标命名是一致的。

对于原子指标,标名称适合用“动作 + 度量”的命名方式(比如注册用户数、购买用户数)

对于派生指标,应该严格遵循“时间周期 + 统计粒度 + 修饰词 + 原子指标”的命名方式。(比如30天内黑卡会员购买用户数)

  • Step4:分级管理

指标确实是多,如果一视同仁去管理其实很难,所以可以按照下面的原则进行等级划分

  1. 一级指标:数据中台直接产出,核心指标(提供给公司高层看的)、原子指标以及跨部门的派生指标。
  2. 二级指标:基于中台提供的原子指标,业务部门创建的派生指标。

3、命名规范 - 表命名

3.1 常规表

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

规范:分层前缀[dwd|dws|ads|bi]_业务域_主题域_XXX_更新频率|全量/增量。 

业务域、主题域我们都可以用词根的方式枚举清楚,不断完善,粒度也是同样的,主要的是时间粒度、日、月、年、周等,使用词根定义好简称。

建议格式: dwd_xxx_xxx_da

  • di :每日增量
  • da:每日全量
  • mi:每月增量
  • ma:每月全量

3.2 中间表

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

建议格式:mid_table_name_[0~9]

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

3.3 临时表

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

建议格式:tmp_xxx

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

3.4 维度表

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

建议格式:dim_xxx

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

4、开发规范

1

表和列的注释释是否有缺失,复杂计算逻辑是否有注释释

2

任务是否支持多次重跑而输出不变,不能有insert into语句

3

分区表是否使用分区键过滤并且有有效裁剪

4

外连接的过逑条件是否使用正确,例如在左连接的where语句存在右表的过滤条件

5

关联小表,是否使用/*+ map join * / hint

6

不允许引用别的计算任务临时表

7

原则上不允许存在一个任务更新多个目标表

8

是否存在笞、迪卡尔积

9

禁止在代码里面使用drop 111blecreat111blerenaiue 111blechancolumnddl语句

10

使用动态分区时,有没有检查分区键值为NULL的情况

11

DQC质量监控规则是否配置,严禁棵奔

12

代码中有没有进行适当的规避数据倾斜语句

13

Where条件中is null语句有没有进行空字符串处理

5、流程规范

根据阿里流程规范,本文将数据仓库研发流程抽象为如下几点:文章来源地址https://www.toymoban.com/news/detail-439856.html

  1. 需求阶段:数据产品经理应如何应对不断变化的业务需求。
  2. 设计阶段:数据产品经理、数据开发者应如何综合性能、成本、效率、质量等因素,更好地组织与存储数据。
  3. 开发阶段:数据研发者如何高效、规范地进行编码工作。
  4. 测试阶段:测试人员应如何准确地暴露代码问题与项目风险,提升产出质量。
  5. 发布阶段:如何将具备发布条件的程序平稳地发布到线上稳定产出。
  6. 运维阶段:运维人员应如何保障数据产出的时效性和稳定性。

到了这里,关于数据仓库规范设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件为什么要进行性能压力测试?

    软件为什么要进行性能压力测试?随着软件应用的不断增多和复杂度的提高,软件的性能对用户体验和业务成功至关重要。性能问题可能导致软件运行缓慢、崩溃或无响应,给用户带来不便甚至损失。为了确保软件能够在高负载和压力下正常运行,性能压力测试变得至关重要

    2024年02月13日
    浏览(59)
  • 什么是模块化?为什么要进行模块化开发?

    模块化是一种软件开发的设计模式,它将一个大型的软件系统划分成多个独立的模块,每个模块都有自己的功能和接口,并且能够与其他模块独立地工作。  先来一段八股文 模块化开发可以带来以下好处: 提高代码的复用性:模块化可以将代码划分成可重用的部分,降低代

    2023年04月12日
    浏览(59)
  • 单元测试优化:为什么要对程序进行测试?测试有什么好处?

    单元测试 (Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。 程序单元是应用的最小可测试部件。简单来说,就是测试数据的稳定性是否达到程序的预期。 我们日常开发时可能在不经意间写错,如果等到最后阶段去检验项

    2024年02月13日
    浏览(46)
  • Doris架构包含哪些技术?为什么进行技术整合?

    Doris主要整合了Google Mesa(数据模型),Apache Impala(MPP Query Engine)和Apache ORCFile (存储格式,编码和压缩)的技术。 为什么要将这三种技术整合? Mesa可以满足我们许多存储需求的需求,但是Mesa本身不提供SQL查询引擎。 Impala是一个非常好的MPP SQL查询引擎,但是缺少完美的分布式存储引

    2024年02月11日
    浏览(82)
  • URL编码揭秘:为什么要进行URL编码?

    URL(Uniform Resource Locator,统一资源定位符)是互联网上资源地址的唯一标识符。在网络请求和数据传输过程中,URL编码起着至关重要的作用。 URL编码解码 | 一个覆盖广泛主题工具的高效在线平台(amd794.com) https://amd794.com/urlencordec 一、URL编码的起源与发展 URL编码起源于1960年代

    2024年02月03日
    浏览(42)
  • Pycharm这个更新索引是个什么操作,为什么每次启动,都会进行?

    点击上方“ Python爬虫与数据挖掘 ”,进行关注 回复“ 书籍 ”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 九重城阙烟尘生,千乘万骑西南行。 大家好,我是皮皮。 一、前言 前几天在Python最强王者交流群【吴超建】问了一个 Pycharm 操作的问题,这里拿出来给大家分

    2024年02月01日
    浏览(60)
  • TCP为什么需要进行三次握手深入解析

    首先简单介绍一下TCP三次握手 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己

    2024年02月05日
    浏览(47)
  • 【机器学习300问】12、为什么要进行特征归一化?

            当线性回归模型的特征量变多之后,会出现不同的特征量,然而对于那些同是数值型的特征量为什么要做归一化处理呢?         使得不同指标之间具有可比性。例如,分析一个人的身高和体重对健康的影响,如果使用米(m)和于克(kg)作为单位,那么身高特征会在

    2024年01月22日
    浏览(40)
  • 白话理解TCP为什么一定要进行三次握手

    首先简单介绍一下TCP三次握手     在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同

    2024年02月08日
    浏览(51)
  • 如何对宏进行数字签名,为什么它很重要

    宏是现代计算机用户可用的最强大的工具之一,但它们也带有独特的风险。了解如何以数字方式对宏进行签名,对于确保可以安全可靠地使用宏非常重要。数字签名可确保宏代码来自可信来源,并且自创建以来未被修改过。 在本指南中,我们将解释如何对宏进行数字签名,以

    2024年02月07日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包