《最强最全面的数仓建设规范指南.docx》由会员分享,可在线阅读,更多相关《最强最全面的数仓建设规范指南.docx(42页珍藏版)》请在第一文库网上搜索。
1、最强最全面的数仓建设规范指南(纯干货建议收藏)数仓宝贝库2021-11-24 18:18以下文章来源于五分钟学大数据,作者园陌X 、五分钟学大数据LEARN BIG DATA IN FIVE MINUTES五分钟学大数据.大数据领域原创技术号,专注于大数据研究,包括Hadoop. Flink. Spark、Kafka.Hive. HBase等,深入大数据技术原理,数据仓库,数据治理,前沿大数据技术点击上方蓝字关注我们 怎数仓宝贝库,带你学数据!导读:本文将全面讲解数仓建设规范,从数据模型规范,到数仓公共规范,数仓各层规范,最后到数仓命名规范,包括表命名,指标字段命名规范等!录:一.数据模型架构
2、原则1. 数仓分层原则2. 主题域划分原则3. 数据模型设计原则二.数仓公共开发规范1. 层次调用规范2. 数据类型规范3. 数据冗余规范4. NULL字段处理规范5. 指标口径规范6. 数据表处理规范7. 表的生命周期管理三、数仓各层开发规范1. ODS层设计规范2. 公共维度层设计规范3. DWD明细层设计规范4. DWS公共汇总层设计规范1. 词根设计规范2. 表命名规范3. 指标命名规范一、数据模型架构原则1 .数仓分层原则优秀可靠的数仓体系,往往需要清晰的数据分层结构,即要保证数据层的稳定又要屏蔽对下游的影响,并且要避免链路过长。那么问题来了,一直在讲数仓要分层,那数仓分几层最好?目
3、前市场上主流的分层方式眼花缭乱,不过看事情不能只看表面,还要看到内在的规律,不能为了分层而分层,没有最好的,只有适合的。分层是以解决当前业务快速的数据支撑为目的,为未来抽象出共性的框架并能够赋能给其他业务线,同时为业务发展提供稳定、准确的数据支撑,并能够按照已有的模型为新业务发展提供方向,也就是数据驱动和赋能。一个好的分层架构,要有以下好处:1. 清晰数据结构;2. 数据血缘追踪;3. 减少重复开发;4. 数据关系条理化;5. 屏蔽原始数据的影响。数仓分层要结合公司业务进行,并且需要清晰明确各层职责,一般采用如下分层结构:数仓分层APR数据应用层,面向不同部门,不同业务需求进行定制化开发,提供
4、报表数据DM数据轻汇总层,建设通用性维度和指标,3明细数据,部分数据为汇总数据,主要增鬟DW数据明细层,对数据进行主题划分,分为马实表和维度表,并对数据进行规范处理ODS数据源层,仅导入业务方数据,不做任何攵理,相当于入大数据平台前的)京 诲分数据分层架构数仓建模在哪层建设呢?我们以维度建模为例,建模是在数据源层的下一层进行建设在上图中,就是在DW层进行数仓建模,所以DW层是数仓建设的核心层。下面详细阐述下每层建设规范,和上图的分层稍微有些区别:1.数据源层:ODS (Operational Data Store)ODS层,是最接近数据源中数据的一层,为了考虑后续可能需要追溯数据问题,因此对于
5、这一层就不建议做过多的数据清洗工作,原封不动地接入原始数据即可,至于数据的去噪、去重、异常值处理等过程可以放在后面的DWD层来做。2 .数据仓库层:DW (Data Warehouse)数据仓库层是我们在做数据仓库时要核心设计的一层,在这里,从ODS层中获得的数据按照主题建立各种数据模型。DW 层又细分为 DWD( Data Warehouse Detail )层、DWM( Data WarehouseMiddle )层和 DWS ( Data Warehouse Servce )层。1)数据明细层:DWD (Data Warehouse Detail)该层一般保持和ODS层一样的数据粒度,并
6、且提供一定的数据质量保证。DWD层要做的就是将数据清理、整合.规范化.脏数据、垃圾数据、规范不一致的、状态定义不一致的、命名不规范的数据都会被处理。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度i化至事实表中,减少事实表和维表的关联。另外,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性。2)数据中间层:DWM (Data WareHouse Middle)该层会在DWD层的数据基础上,数据做轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工。直观来讲,就是对通用的核心维度进行聚合操作,算出相应的统计指标。在实际计算中,如
7、果直接从DWD或者ODS计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS的宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据再放在DWS亦可。3)数据服务层:DWS (Data WareHouse Servce)DWS层为公共汇总层,会进行轻度汇总,粒度比明细数据稍粗,基于DWD层上的基础数据,整合汇总成分析某一个主题域的服务数据,一般是宽表。DWS层应覆盖80%的应用场景。又称数据集市或宽表。按照业务划分,如主题域流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询
8、,OLAP分析,数据分发等。一般来讲,该层的数据表会相对比较少,一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称该层的表为宽表。3 .数据应用层:APP (Application)在这里,主要是提供给数据产品和数据分析使用的数据,一般会存放在ES、PostgreSqL Redis等系统中供线上系统使用,也可能会存在Hive或者Druid中供数据分析和数据挖掘使用。比如我们经常说的报表数据,一般就放在这里。4 .维表层(Dimension)如果维表过多,也可针对维表设计单独一层,维表层主要包含两部分数据:高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者
9、上亿级别。低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万。2 .主题域划分原则1)按照业务或业务过程划分业务容易理解,就是指的功能模块/业务线。业务过程:指企业的业务活动事件,如下单、支付、退款都是业务过程。不过需要注意的是,一个业务过程是一个不可拆分的行为事件,通俗的讲,业务过程就是企业活动中的事件。2)按照数据域划分数据域是指面向业务分析,将业务过程或者维度进行抽象的集合。其中,业务过程可以概括为一个个不可拆分的行为事件,在业务过程下,可以定义指标,维度是指度量的环境,如买家下单事件,买家是维度。为保障整个体系的生命力,数据域是需要抽象
10、提炼,并且长期维护和更新的,但不轻易变动。在划分数据域时,既能涵盖当前所有的业务需求,又能在新业务进入时无影响地被包含进已有的数据域中和扩展新的数据域。3 .数据模型设计原则1)高内聚、低耦合即主题内部高内聚、不同主题间低耦合。明细层按照业务过程划分主题,汇总层按照实体+活动划分不同分析主题,应用层根据应用需求划分不同应用主题。2)核心模型和扩展模型要分离建立核心模型与扩展模型体系,核心模型包括的字段支持常用的核心业务,扩展模型包括的字段支持个性化或少量应用的需要,不能让扩展模型的字段过度侵入核心模型,以免破坏核心模型的架构简洁性与可维护性。3)公共处理逻辑下沉及单一越是底层公用的处理逻辑越应
11、该在数据调度依赖的底层进行封装与实现,不要让公用的处理逻辑暴露给应用实现,不要让公共逻辑多处同时存在。4)成本与性能平衡适当的数据冗余可换取查询和刷新性能,不宜过度冗余与数据复制。5)数据可回滚处理逻辑不变,在不同时间多次运行数据结果确定不变。二、数仓公共开发规范1 .层次调用规范稳定业务按照标准的数据流向进行开发,即ODS - DWD - DWS - APP。非稳定业务或探索性需求,可以遵循ODS- DWD- APP或者ODS- DWD- DWM -APP两个模型数据流。在保障了数据链路的合理性之后,也必须保证模型分层引用原则:正常流向:ODS - DWD - DWM - DWS - APP
12、 ,当出现 ODS - DWD -DWS- APP这种关系时,说明主题域未覆盖全。应将DWD数据落到DWM中,对于使用频度非常低的表允许DWD - DWS。尽量避免出现DWS宽表中使用DWD又使用(该DWD所归属主题域)DWM的表。同一主题域内对于DWM生成DWM的表,原则上要尽量避免,否则会影响ETL的效率。DWM、DWS和APP中禁止直接使用ODS的表,ODS的表只能被DWD引用。禁止出现反向依赖,例如DWM的表依赖DWS的表。举例:2 .数据类型规范需统一规定不同的数据的数据类型,严格按照规定的数据类型执行:1.金额:double或 使用decimal(28/6)控制精度等,明确单位是分
13、还是元。2.3.字符串:string。4.5.id 类:biginte6.7.时间:string。8.9.状态:string10.3.数据冗余规范宽表的冗余字段要确保:1.冗余字段要使用高频,下游3个或以上使用。2.3.冗余字段引入不应造成本身数据产生过多的延后。4.5.冗余字段和已有字段的重复率不应过大,原则上不应超过60% ,如需要可以选择join或原表拓展。6.4 . NULL字段处理规范对于维度字段,需设置为-1对于指标字段,需设置为05 .指标口径规范保证主题域内,指标口径一致,无歧义。通过数据分层,提供统一的数据出口,统一对外输出的数据口径,避免同一指标不同口径的情况发生。1)指标
14、梳理指标口径的不一致使得数据使用的成本极高,经常出现口径打架、反复核对数据的问题。在数据治理中,我们将需求梳理到的所有指标进行进一步梳理,明确其口径,如果存在两个指标名称相同,但口径不一致,先判断是否是进行合并,如需要同时存在,那么在命名上必须能够区分开。2)指标管理指标管理分为原子指标维护和派生指标维护。原子指标: 选择原子指标的归属产线、业务板块、数据域、业务过程 选择原子指标的统计数据来源于该业务过程下的原始数据源 录入原子指标的英文名称、中文名称、概述 填写指标函数 系统根据指标函数自动生成原子指标的定义表达式 系统根据指标定义表达式以及数据源表生成原子指标SQL派生指标: 在原子指标的基础之上选择了一些维度或者修饰限定词。6.数据表处理规范1)增量表新增数据,增量数据是上次导出之后的新数据。1.记录每次增加的量,而不是总量;2.3.增量表,只报变化量,无变化不用报;4.5.每天一个分区。6.2)全量表每天的所有的最新状态的数据。1.全量表,有无变化,都要报;2.3.每次上报的数据都是所有的数据(变化的+没有变化的);4.5.只有一个分区。6.3)快照表按日分区,记录截止数据日期的全量数据。快照表,有无变化,都要报;2.3.每次上报的数据都是所有的数据(变化的+没有变化的);4.5.一天一个分区。