01ODS层规范
通常的命名方式是:ODS_应用系统名(或缩写)_数据库类型_(数据库名称可省略)_数据表名_加载方式(增量还是全量),表名不能太长,一般不超过30字。如:
ods_tmall_mysql_odersys_oder_info_di 或者 ods_tmall_mysql_oder_info_di。
-S 表示实时加载;
-I 表示增量,比如每天增量同步DI,每小时增量同步等HI;
-A 表示全量,比如每天增量同步DA,每小时增量同步等HA;
-H 表示历史表。
02DWD层规范
通常的命名方式是:前缀为DWD_主题名(缩写)_加工方式。
_H,按时加工
_D,按日加工
三. 加工脚本命名和调度
通常加工脚本,调度任务名称名称和表名称相同。
通常的命名方式是:前缀为DWM_主题名(缩写)_功能描述_加工方式。
三. 加工脚本命名和调度
通常加工脚本,调度任务名称名称和表名称相同。
通常的命名方式是:前缀为DWS_主题名(缩写)_功能描述。从DWD到DWM或者DWS层中,产生临时表或者加工视图,命名规范只是对应层前缀后加_tmp/v,如dws_tmp。例如:
dws_sales_order_analysis
三. 加工脚本命名和调度
通常加工脚本,调度任务名称名称和表名称相同。
通常的命名方式是:前缀为DWA_主题名(缩写)_功能描述,如果是视图的话是DWA_V_主题名(缩写)_功能描述。另外如果是直接导出到在线系统侧的数据,尊重在线系统测的命名,并做输出记录,方便数据追溯和业务沟通。
目前公司dwa命名是按照数据集市的方式,采用dm为前缀的方式。
通常加工脚本,调度任务名称名称和表名称相同。
通常的命名方式是:前缀为DIM_维表类别(用户,日期,地址,标签),一般不超过30字。维表通常是一个大宽表,和事实数据配合方便上卷下钻进行分析。通常维表可能需要schema的变更,例如用户画像标签信息表,随着标签内容的增加,描述用户的维度信息增加,所以会基于用户基础信息表,用户画像标签信息表进行迭代加工,这时候应该保留历史数据和对应历史版本,设置保留存活时间TTL。
1. 维表设计字段冗余,为了使用时字段的全表扫描,采用列存储方式;
1. 针对缓慢变化维,保留历史数据和版本TTL为30天, 方便数据追踪,后续统一使用新的维表。
四. 加工脚本命名和调度
通常加工脚本,调度任务名称名称和ods表名称相同。
完成数据仓库的分层后,针对各层次的数据之间的调用关系作出约定。
①. DWA应用层优先调用数仓的DWS层数据,通常不允许DWA层跨过DWS层,从DWD层重复加工数据;
②. DWS应该积极了解应用层数据的建设需求,将公用的数据沉淀后,提供数据服务。同时,DWA应用层也需积极配合DWS层进行持续的数据公共建设的改造。避免出现过度的DWD层引用、不合理的数据复制和子集合冗余。
总体遵循的层次调用原则如下:
滴滴顺风车实时数仓建设举例
在公司内部,我们数据团队有幸与顺风车业务线深入合作,在满足业务方实时数据需求的同时,不断完善实时数仓内容,通过多次迭代,基本满足了顺风车业务方在实时侧的各类业务需求,初步建立起顺风车实时数仓,完成了整体数据分层,包含明细数据和汇总数据,统一了DWD层,降低了大数据资源消耗,提高了数据复用性,可对外输出丰富的数据服务。
数仓具体架构如下图所示:
从数据架构图来看,顺风车实时数仓和对应的离线数仓有很多类似的地方。例如分层结构;比如ODS层,明细层,汇总层,乃至应用层,他们命名的模式可能都是一样的。但仔细比较不难发现,两者有很多区别:
根据顺风车具体场景,目前顺风车数据源主要包括订单相关的binlog日志,冒泡和安全相关的public日志,流量相关的埋点日志等。这些数据部分已采集写入kafka或ddmq等数据通道中,部分数据需要借助内部自研同步工具完成采集,最终基于顺风车数仓ods层建设规范分主题统一写入kafka存储介质中。
命名规范:ODS层实时数据源主要包括两种。
根据顺风车业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表;结合顺风车分析师在离线侧的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,完成宽表化处理,之后基于当前顺风车业务方对实时数据的需求重点,重点建设交易、财务、体验、安全、流量等几大模块;该层的数据来源于ODS层,通过大数据架构提供的Stream SQL完成ETL工作,对于binlog日志的处理主要进行简单的数据清洗、处理数据漂移和数据乱序,以及可能对多个ODS表进行Stream Join,对于流量日志主要是做通用的ETL处理和针对顺风车场景的数据过滤,完成非结构化数据的结构化处理和数据的分流;该层的数据除了存储在消息队列Kafka中,通常也会把数据实时写入Druid数据库中,供查询明细数据和作为简单汇总数据的加工数据源。
命名规范:DWD层的表命名使用英文小写字母,单词之间用下划线分开,总长度不能超过40个字符,并且应遵循下述规则:realtime_dwd_{业务/pub}{数据域缩写}[{业务过程缩写}]_[{自定义表命名标签缩写}]
命名规范:DIM层的表命名使用英文小写字母,单词之间用下划线分开,总长度不能超过30个字符,并且应遵循下述规则:dim_{业务/pub}{维度定义}[{自定义命名标签}]:
在建设顺风车实时数仓的汇总层的时候,跟顺风车离线数仓有很多一样的地方,但其具体技术实现会存在很大不同。
第一:对于一些共性指标的加工,比如pv,uv,订单业务过程指标等,我们会在汇总层进行统一的运算,确保关于指标的口径是统一在一个固定的模型中完成。对于一些个性指标,从指标复用性的角度出发,确定唯一的时间字段,同时该字段尽可能与其他指标在时间维度上完成拉齐,例如行中异常订单数需要与交易域指标在事件时间上做到拉齐。
第二:在顺风车汇总层建设中,需要进行多维的主题汇总,因为实时数仓本身是面向主题的,可能每个主题会关心的维度都不一样,所以需要在不同的主题下,按照这个主题关心的维度对数据进行汇总,最后来算业务方需要的汇总指标。在具体操作中,对于pv类指标使用Stream SQL实现1分钟汇总指标作为最小汇总单位指标,在此基础上进行时间维度上的指标累加;对于uv类指标直接使用druid数据库作为指标汇总容器,根据业务方对汇总指标的及时性和准确性的要求,实现相应的精确去重和非精确去重。
第三:汇总层建设过程中,还会涉及到衍生维度的加工。在顺风车券相关的汇总指标加工中我们使用Hbase的版本机制来构建一个衍生维度的拉链表,通过事件流和Hbase维表关联的方式得到实时数据当时的准确维度
命名规范:DWM层的表命名使用英文小写字母,单词之间用下划线分开,总长度不能超过40个字符,并且应遵循下述规则:realtime_dwm_{业务/pub}{数据域缩写}{数据主粒度缩写}[{自定义表命名标签缩写}]{统计时间周期范围缩写}:
该层主要的工作是把实时汇总数据写入应用系统的数据库中,包括用于大屏显示和实时OLAP的Druid数据库(该数据库除了写入应用数据,也可以写入明细数据完成汇总指标的计算)中,用于实时数据接口服务的Hbase数据库,用于实时数据产品的mysql或者redis数据库中。
命名规范:基于实时数仓的特殊性不做硬性要求
OneData: 阿里巴巴提出的数仓建设标准
美团基于OneData思想和现有业务架构情况,提出了新的标准和目标:
实现方法:统一归口和出口 统一归口:业务归口统一、设计归口统一和应用归口统一,从底层保证了数仓建设的三特性和三效果 统一出口:
基于此,实现了分层模型:
正常开发应遵循ODS-DWD—DWT-DWA-APP的流程,同时根据架构做出 开发规范: