在设计模型的时候,我们还是需要提前做好一些规范,对于我们的规范来说,主要有以下几点:
一、高内聚,低耦合
这是所有数仓相关的文章都会给大家介绍的。但是如何理解呢?
其实我们在实际的过程中主要是通过业务分类的形式来进行高内聚,低耦合,比如还是商城来说,我们首先就是分类,分核心主类,这里的核心主类是什么呢?无外乎:
1、用户 2、商品 3、订单 4、等等
用户作为一个主类,用户下面的:
1、用户信息 2、用户行为 3、等等
他们都纳入用户这个主类,实现内部的高度内聚,但是用户和订单就是低耦合的,比如订单里面只会带有用户id,通过用户id进行关联,除此之外不会有其他的任何关联,这也就是低耦合的状态。
二、成本考虑
成本的考虑主要是指的宽表。目前对于初次接触数据仓库的同学,一般都会认为宽表很好用,所以有时候某些宽表能达到几千甚至上万个字段指标。当然利用宽表是没有任何问题,但是我们一般还是要考虑下是否进行了过度的冗余,比如一张A表的前10个字段满足业务1的需求,后3个字段满足业务2的需求。有时候我们为了方便,所以直接在A表中做这13个字段的宽表,通过当前表为上层应用提供业务1和业务2的需求。正常情况下我们这样子做事没有任何问题的。但是我们是否核实过业务真实的使用情况,例如:
1、业务2的使用频率很低。 2、业务2仅使用最近1个月的数据。 3、等等
那么如果出现上诉的业务场景,我们是否可以把当前的表模型拆分为2个呢?后3个字段我们做一下ttl,这样子的话就可以对以下几个方面有促进作用:
1、减少数据的存储量 2、减少每次数据的计算类 3、减少数据计算的时间,提升业务效率 4、减少数据的复制成本。
三、命名规范
这里的命名规范也是我们需要注意的事项,每一层,每一个模型,每一个库,每一张表,每一个字段我们希望能够清晰直观的表达相应的含义,便于大家的理解和使用。比如我们列举几个:
1、对数据库的命名
对于数据库的命名,我们根据分层来进行命名,例如:
序号 | 数仓分层 | 命名备注 |
1 | ods | ods_开头 |
2 | dwd | dwd_开头 |
3 | dws | dws_开头 |
4 | dim | dim_开头 |
5 | ads | ads_开头 |
6 | temp | temp_开头 |
2、对表的命名
总体原则应遵循如下的标准:
1、必须使用小写字母 2、必须能准确表达中文含义,不允许出现英文单词+汉语拼音混用的场景 3、表名长度控制在30个字符以内 4、各单词之间使用下划线进行拼接。
然后在各分层里面,我们的命名要求是:
1)ods层
ods层的命名规范是:ods_来源类型[业务|系统]_业务表名_装载策略_装载周期
备注:
1、来源类型:区分不同来源及系统,含结构化、半结构及非结构化数据。 2、类型分类:DataBase(db)、Http(api)、Rsync Log(rsync)、MQ(topicName)、hive(layerName) 3、业务表名:与数据来源系统一致,以避免造成其二义性。有分表则去除分表规则,目标添加source_table字段区分来源表名。 4、装载策略:增量(i)、全量(f)、快照(s)、 拉链(h) 5、装载周期:根据实际装载周期确定。实时(rt)、小时(h)、天(d)、周(w)、月(m)、季(q)、年(y)、一次性任务(o)、无周期(n)
2)dwd层
dwd层的命名规范是:dwd_一级数据域_二级数据域[_业务过程]_业务描述_装载策略_装载周期
备注:
1、一级数据域:用户域、内容域、日志域、财务域、互动域、服务域等等 2、二级数据域:移动端、Web端、会员、金币等等,统一定义 3、业务过程:曝光、浏览、点击、注册、登录、注销等等,统一定义 4、业务描述:描述业务内容 5、装载策略:增量(i)、全量(f)、快照(s)、 拉链(h) 6、装载周期:根据实际装载周期确定。实时(rt)、小时(h)、天(d)、周(w)、月(m)、季(q)、年(y)、一次性任务(o)、无周期(n)
3)dws层
dws层的命名规范是:dws_一级数据域_二级数据域_数据粒度_业务描述_统计周期
备注:
1、一级数据域:用户域、内容域、日志域、财务域、互动域、服务域等等 2、二级数据域:流量、渠道、会员、留存、事件等等 3、数据粒度:描述业务数据粒度 4、业务描述:描述业务内容 5、统计周期:统计实际周期范围,缺省情况下,离线计算应该包括最近一天(_1[h|d|w|m|q|y]),最近N天(_n[h|d|w|m|q|y])和历史截至当天(_t[h|d|w|m|q|y])三个表。小时(h)、天(d)、周(w)、月(m)、季(q)、年(y)。
4)dim层
dim层的命名规范是:dim_应用类型_业务主题_业务描述_[层级_装载策略_装载周期]
备注:
1、应用类型:公共、自定义 2、业务主题:渠道、版本、产品、城市等等 3、业务描述:描述业务内容 - 层级:层级(lvl) 4、装载策略:增量(i)、全量(f)、快照(s)、 拉链(h) 5、装载周期:根据实际装载周期确定。实时(rt)、小时(h)、天(d)、周(w)、月(m)、季(q)、年(y)、一次性任务(o)、无周期(n)
5)ads层
ads层的命名规范是:ads_应用类型_业务主题_业务描述_统计周期_装载周期
备注:
1、应用类型:固定报表、分析报表、标签系统、用户画像、数据接口 2、业务主题:看板、驾驶仓、ROI、渠道分析、漏斗分析、留存分析、活跃分析等等 3、业务描述:描述业务内 4、统计周期:统计实际周期范围,缺省情况下,离线计算应该包括最近一天(_1[h|d|w|m|q|y]),最近N天(_n[h|d|w|m|q|y])和历史截至当天(_t[h|d|w|m|q|y])三个表。小时(h)、天(d)、周(w)、月(m)、季(q)、年(y)。 5、装载周期:根据实际装载周期确定。实时(rt)、小时(h)、天(d)、周(w)、月(m)、季(q)、年(y)、一次性任务(o)、无周期(n)
6)temp层
temp层的命名规范是:temp_目标表名_((数据日期[_数据小时])|(开始日期_结束日期))
备注:
1、目标表名: 会话表:目标表名,临时表:业务描述 2、数据日期:ETL跑批日期 、ETL数据处理日期 3、数据小时:ETL跑批小时 、ETL数据处理小时 4、开始日期:临时表有效开始日期 5、结束日期:临时表有效结束日期
以上就是我们在建设数仓的时候对于命名规范的定义,当然这块也是参考的网上的案例,但是在实际的使用过程中,所有的库表确实是清晰明了,减少了数仓建设过程中的很多麻烦。
最后,咱们再补充一下,即在数仓的建设中不允许出现禁词,这些禁词主要是一些住建的关键字,例如:
ALL ALTER ARRAY AS ASC BETWEEN BIGINT BINARY BOOLEAN BOTH BY CASE CAST CHAR COLUMN CONF CREATE CROSS CURRENT_DATE CURRENT_TIMESTAMP CURRENT_USER DATABASE DATE DECIMAL DESC DISTINCT DOUBLE DROP ELSE END EXISTS EXTENDED FALSE FETCH FLOAT FOR FROM FULL GRANT GROUP HAVING IN INDEX INNER INSERT INT INTEGER INTERSECT INTERVAL INTO IS JOIN LEADING LEFT LIKE LOCAL MACRO MAP NATURAL NOSCAN NULL NUMERIC OF ON OUTER OVERWRITE PARTITION PERCENT PRECISION PRESERVE PREV PRINTF PRIVATE PROTECTED PUBLIC RAW READ REAL RENAME REPLACE RESTRICT REVOKE RIGHT RLIKE ROLE ROLES ROW ROWS SCHEMA SELECT SET SHOW SMALLINT TABLE TABLES TBLPROPERTIES TERMINATED THEN TIMESTAMP TO TRUE TRUNCATE UNION UNIQUE UPDATE USER USING UTILS VALUES VARCHAR WHEN WHERE WITH WRITE ZORDER
还没有评论,来说两句吧...