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

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

精彩推荐
实时离线数仓实战No.7 | 数据仓库建模实战 →
实时离线数仓实战No.6 | 雪花模型、星形模型与星座模型详解 →
实时离线数仓实战No.5 | 业务数据生成实战及数据模型梳理 →
实时离线数仓实战No.4 | 电商业务概述及表结构设计 →
实时离线数仓实战No.3 | 用户行为日志采集实战 →
请各位读者动动手指点赞、收藏、在看,您的支持是我持续创作的动力,感谢。