暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

实时离线数仓实战No.8 | 数据仓库开发规范 →

大数据技能圈 2024-05-31
223

实时离线数仓实战V2是在实时离线数仓实战V1的基础上进行扩展的系列文章。相比V1,V2主要的内容包括数据库表的调整、增加数仓建模的内容扩展、数仓性能调优等内容。

1 命名规范
(1)表名、字段名命名规范。
表名、字段名采用下画线分隔词根,每部分使用小写英文单词,通用字段需要满足通用该字段信息定义原则;
表名、字段名均以字母开头,长度不宜超过64个英文字符;
优先使用词根中已有关键字(制定数据仓库词根管理标准),定期检查新增命名的合理性;
表名、字段名中禁止采用非标准的缩写;字段名要求有实际意义,根据词根组合而成。
• ODS层命名为ods_表名。
• DIM层命名为dim_表名。
• DWD层命名为dwd_表名。
• DWS层命名为dws_表名。
• ADS层命名为ads_表名。
• 临时表命名为tmp_表名。
• 用户行为表以log为后缀。
(2)脚本命名规范。
脚本命名格式为数据源_to_目标_db/log.sh。
用户行为需求相关脚本以log为后缀;业务需求相关脚本以db为后缀。
(3)表字段类型。
数量字段的类型通常为bigint。
金额字段的类型通常为decimal(16, 2),表示16位有效数字,其中小数部分是2位。
字符串字段(如名字、描述信息等)的类型为string。
主键、外键的字段类型为string。
时间戳字段的类型为bigint。
2 数据仓库层级开发规范
(1)确认数据报表(如业务产品)及数据使用方(如推荐后台)对数据的需求。
(2)确定业务板块和数据域。
(3)确定业务过程的上报时机,梳理每个业务过程对应的纬度、度量,构建业务总线矩阵。
(4)确定DWD层的设计细节。
(5)确定派生指标和衍生指标。
(6)梳理维度对应的关联维度。
(7)确定DWS层的设计细节。
(8)应用报表工具,或自行加工设计出ADS层。
3 数据仓库层级调用规范
(1)原则上不允许不同的任务修改同一张表。
(2)DWS层要调用DWD层的数据。
(3)ADS层可以调用DWS层或DWD层的数据。
(4)如果ODS层过于特例化,而统计诉求单一,且长期考虑不会有新的扩展需求,可以跳过DWD层或DWS层。但是如果后期出现多个脚本需要访问同一个ODS层的表,则必须拓展出DWD层及DWS层的表。
(5)宽表建设相当于用存储换计算,过度的宽表存储,可能会威胁底层表的存储资源,甚至影响集群稳定性,从而影响计算性能,造成本末倒置的问题。
4 表存储规范
(1)全量存储:以日为单位的全量存储,以业务日期作为分区,每个分区存放截至业务日期的全量业务数据。
(2)增量存储:以日为单位的增量存储,以业务日期作为分区,每个分区存放每日增量的业务数据。
(3)拉链存储:拉链存储通过新增两个时间戳字段(开始时间和结束时间),将所有以日为粒度的变动数据都记录下来,通常分区字段也是这两个时间戳字段。这样,下游应用可以通过限制时间戳字段来获取历史数据。该方法不利于数据使用者对数据仓库的理解,同时因为限定生效日期,会产生大量分区,这不利于长远的数据仓库维护。
拉链存储虽然可以压缩大量的存储空间,但使用麻烦。
综上所述,在通常情况下推荐使用全量存储处理缓慢变化维度。在数据量巨大的情况下,建议使用拉链存储。
5 DIM层开发规范
(1)仅包括非流水计算产生的维度表。
(2)相同key的维度需要保持一致。
如果由于历史原因相同key的维度暂时不一致,则必须在规范的维度定义一个标准维度属性,不同的物理名也必须是标准维度属性的别名。
在不同的实际物理表中,如果由于维度角色的差异需要使用其他的名称,则其名称也必须是规范的维度属性的别名,比如,视频所属账号id与视频分享账号id。
(4)将业务相关性强的字段尽量放在一张维度表中实现。相关性一般指经常需要一起查询、报表展现,比如商品基本属性和所属品牌。
6 DWD层开发规范
(1)确定涉及业务总线矩阵中的哪些一致性维度、一致性度量、业务过程。
(2)数据粒度同ODS层一样,不做任何汇总操作,原则上不做维度表关联。
(3)底层公用的处理逻辑应该在数据调度依赖的底层进行封装与实现,不要让公用的处理逻辑暴露给应用层实现,不要让公用逻辑在多处同时存在。
(4)相同业务板块的DWD层表,需要保持统一的公参列表。
(5)被ETL变动的维度或度量,在名称上要有区分。
(6)将不可加性事实分解为可加性事实。
(7)减少过滤条件不同产生的不同口径的表,尽量保留全表,用维度区分口径。
(8)适当的数据冗余可换取查询和刷新性能的提升,在一张宽表中,维度属性的冗余,应该遵循以下建议准则。
• 冗余字段与表中其他字段被高频率同时访问。
• 冗余字段的引入不应造成其本身的刷新完成时间产生过多延迟。
7 DWS层开发规范
(1)需要考虑基于某些维度的聚集是否经常被用于数据分析,并且不要有太多的维度,不然没有聚合的意义。
(2)适当地与维度表进行关联,方便下游使用。
(3)长周期的汇总计算,建议以日或小时为单位来累计,避免周头或月头资源紧张。
(4)空值的处理原则如下。
• 将汇总类指标的空值填充为零。
• 若维度属性值为空,在将其汇总到对应维度上时,对于无法对应的统计事实,记录行会填充为null。
8 指标规范
指标的定义口径(如一些常用的流量指标:日活跃度、周活跃度、月活跃度、页面访问次数、页面平均停留时长等)需要与业务方、运营人员或数据分析师共同决定。
指标类型包括原子指标、派生指标和衍生指标。原子指标是指不能再拆解的指标,通常用于表达业务实体原子量化属性且不可再分,如订单数,其命名遵循单个原子指标词根+修饰词原则。派生指标是指建立在原子指标之上,通过一定运算规则形成的计算指标集合,如人均费用、跳转率等。衍生指标是指原子指标或派生指标与维度等相结合产生的指标,如最近7日注册用户数,其命名遵循多个原子指标词根+修饰词原则。
每设定一个指标都要经过业务方与数据部门人员的共同评审,判定指标是否必要、如何定义等,明确指标名称、指标编码、业务口径、责任人等信息。
开发规范总体原则
开发规范的总体原则是:指标支持任务重新运行而不影响结果、数据声明周期合理、任务迭代不会严重影响任务产出时间。
(1)数据清洗规范。
• 字段统一。
• 字段类型统一。
• 注释补全。
• 时间格式统一。
• 枚举值统一。
• 复杂数据解析方式统一。
• 空值清洗或替换规则统一。
• 隐私数据脱敏规则统一。
(2)SQL语句编写规范。
• 要求代码行清晰、整齐,具有一定的可观赏性。
• 代码编写要以执行速度最快为原则。
• 代码行整体层次分明、结构化强。
• 代码中应添加必要的注释以增强代码的可读性。
• 表名、字段名、保留字等全部小写。
• SQL语句按照子句进行分行编写,不同关键字另起一行。
• 同一级别的子句要对齐。
• 算术运算符、逻辑运算符的前后保留一个空格。
• 在建表时每个字段后面使用字段中文名作为注释。
• 无效脚本采用单行或多行注释。
• 多表连接时,使用表的别名来引用列。
加交流群请添加作者:

获取离线详细文档:

精彩推荐

实时离线数仓实战No.7 | 数据仓库建模实战 →

实时离线数仓实战No.6 | 雪花模型、星形模型与星座模型详解 →

实时离线数仓实战No.5 | 业务数据生成实战及数据模型梳理 →

实时离线数仓实战No.4 | 电商业务概述及表结构设计 →

实时离线数仓实战No.3 | 用户行为日志采集实战 →

请各位读者动动手指点赞、收藏、在看,您的支持是我持续创作的动力,感谢。

文章转载自大数据技能圈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论