随着企业的发展,其内部集聚的数据也会越来越多,如何保证整个企业不同业务数据的一致性、准确性以及数据的快速服务能力,是每个企业在数据累计到一定数量时都将面临的问题。以下内容为我们公司的治理方式,仅供大家参考。
公司目前累计数据为P级,日新增数据为T级,数据主要为结构化数据和半结构化数据,采用hive建设数据仓库的方式进行数据处理,同时严格按照仓库的建设规范进行,以保证数仓中的数据层次清晰,各层间的数据具有完整的一致性,同时保障hive每日跑批生成的数据准确性。数据的获取到数据提供到最终的应用方,数据仓库中,我们将其分为源数据层、操作数据层、数仓公共层、集市层四个层次。
1.数据源包含实时数据和离线数据两种,实时数据通过kafka+storm的方式采集,离线数据则通过sqoop从各业务从库获取,数据采集到后会根据数据本身特性分别进入stage和ods,stage区的数据处理过后也会存入ods中,对后面的服务统一由ods提供(什么数据放入stage区后面会讲到);
2.数仓公共层的数据统一来自于ods,其自身总共包含明细层(DWD)和汇总层(DWS),汇总层的数据又分为轻度汇总数据(DWB)和重度汇总数据(DWS);
3.数据集市层(DM)的数据主要用来为业务需求提供服务,其包含应用产品所需数据、需求报表、指标等,同时该层还可为业务部门创建专用数据库以及数据探索库。
下面分别将数仓中的ods层、dwd层、dws层、dm层分开展示:
ods层建设:
无论是web端还是app端的log数据采集到后会统一传送到kafka中,经storm简单处理后存放到stage库中;对于业务库中量级较大的表(比如金融支付相关表,每天都是上亿的记录,并且还会对最近60天交易记录存在更新的情况),我们采取增量抽取的方式先放入stage,保证数据每天可以快速进入数仓,然后再根据业务需要处理后放入ods库。
dwd层建设:
dwd层是数仓非常重要的一个层次,上层数据的主要来源地,也是完成数据管理的重要入口,因此该层的数据处理要求较多。我们主要按照以下方式进行建设:
(1)数据粒度锁定,该层数据跟ods层的数据粒度一致,都为明细级数据,区别在于该层会剔除掉测试数据;
(2)数据标准统一,该层需要保证同样含义的数据具有一致的标准,比如姓名这类数据,无论其在之前的业务库中叫什么,该层任何表中该字段统一命名为name;同时对于性别类数据,一些业务记录为F/M,一些记录为男/女,该层任何表中统一存储为男/女;
(3)如果原始数据中存在电话号码、×××号码之类的敏感数据,在该层需要进行脱敏,此后表中记录的数据皆为脱敏后的数据,并且建立专门的敏感数据库对原始敏感数据进行备份存储;
(4)多源数据整合,对于同类型数据,但由于业务需要在业务库是分库分表存储的数据,在该层需要进行统一为一张表;
(5)既然是数据仓库建设,则应该按照数据模型的建设方式进行,该层数据模型统一基于业务流程进行建模,采用kimball维度建模的方式处理变动性较大的业务,采用Inmon范式建模的方式处理稳定性较高的主题;
dws层建设:
dws层包含了两部分数据,轻度汇总数据(dwb)和重度汇总数据(dws),轻度汇总数据主要存储以用户、产品、协议等为维度各业务线进行的简单统计数据;重度汇总数据来源包括dwd和dwb,其主要记录多业务的统计数据和时间跨度大的统计数据,dws的数据大多以宽表形式存在。
dm层建设:
数据集市层的数据主要用作直接的数据服务,数据服务对象包括:分析报表、应用产品数据、BI、tableu、探索数据等,根据需要该层可以创建多个数据库,以满足业务需要为主。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/193569.html