前言
数据仓库,对从事 IT 行业的从业者来说并不是个陌生的名词,这个概念由数据仓库之父 Bill Inmon 在 1991 年出版的“Building the>
数据仓库归集全行数据并按特定主题梳理,方便使用者按主题编目快速查找到所需数据并使用;
数据仓库归集全行数据,打破系统间数据孤岛的局面,从而为后续的决策管理与数据服务提供强大的数据支撑;
建设数据应用时,最担忧是源系统的数据模型变更导致“牵一发而动全身”。每次模型变更都伴随着数据应用的影响分析和变更开发,既对开发团队造成极大的工作负担,又影响数据应用的稳定性。数据仓库可通过分层架构“内部消化”源系统模型变更带来的影响,且无需变更数据服务接口,保证数据应用的稳定性;
数据仓库会记录数据的历史轨迹,用于查询任意时点的数据快照从而分析特定时间范围的数据趋势,为决策管理提供数据支持。
理解了数据仓库的关键特性,相当于了解了建设数据仓库的正确方向,但是,并不代表就清楚数据仓库的建设目标和建设路径。特别对于银行机构,对数据的稳定性、准确性与时效性要求都比一般企业要高。那么,银行数据仓库的建设目标与建设路径分别是什么,接下来将分为三个章节去阐述。
银行数据仓库画像
互联网对于传统行业的冲击是全方位的,无论是百货、商场、菜市场等零售行业,还是银行、财务公司等金融行业,都对其经营模式进行“降维打击”,迫使传统行业业务进行线上化转型。尤其是银行,在互联网发展前,基本都是躺着赚钱,是大家眼中的金饭碗,结果在互联网发展后,尤其是互联网金融逐渐的壮大,都被迫喊出“银行是弱势群体”的话语,其程度可想而知。互联网经营模式对比银行传统的经营模式领先是多方面的,以下列表仅从数据的角度进行分析。
上述对比的结果,揭示了互联网经营模式领先的要点之一是数字化的业务运营,所以银行经营模式想要跟上时代的步伐,关键点是 数字化转型 。
在银行逐渐认识到数据价值后,也开展了自身的数字化转型之路。然而在迈向的过程中,却发现犹如进入迷宫一样,资源是大力投入了,成效却远远未达到预期想象,甚至还影响到原有业务开展。
解决上述数字化转型遇到的痛点,需要打破数据孤岛、形成数据合力、建设数据质量体系,这时就需要一个数据管理核心,来支撑全行数据应用。这个数据管理核心就是数据仓库。
细化数据仓库目标,描绘出数据仓库的画像。
将全行数据归集到数据仓库中,从而打破数据孤岛,实现数据集中管理及关联分析,产生 1+1>2 的价值;
主要分为两个方面,其一是建设数据统一标准。标准各异的数据会对数据梳理整合造成巨大的阻碍,数据统一标准应从业务属性、技术属性及操作属性三方面进行。其二是做好元数据管理,元数据是系统建设过程产生的描述数据,包含系统设计、数据模型、数据字典、运行日志等,管理好元数据有助于系统维护及可持续发展;
基于全行数据的关联与分析,挖掘数据间的联系与价值,实现智能营销与风控;
使用可视化的数据分析工具把数据图形化、直观化呈现,帮助业务人员了解数据的变化与趋势,从而快速高效形成决策;
提供统一、共享的数据接口满足全行应用系统的数据服务需求;
数据仓库既属于数据管理核心,也属于数据资产核心。对内而言,数据仓库将全行数据进行归集并整合,为全行业务应用提供数据服务;对外而言,涉及营销与风控的价值数据,比如客户画像、欺诈名单、老赖名单,对其他银行具有强大的吸引力,可通过有偿查询的方式形成创新业务。
银行数据仓库的画像清晰了,建设目标也明确了, 但,该如何构建数据仓库?
浅谈数据仓库建设
宏观理解银行数据仓库的整体架构,有利于下一步理解数据仓库的建设路径。从整体架构,主体模块的功能说明与职责分工如下所示:
数据仓库作为数据管理核心,必须拥有统一标准的数据输入接口与数据输出通道,才能保证数据输入输出的稳定性。但是数据输入输出会造成数据仓库的资源损耗,尤其是 IO 与网络,所以建设数据总线系统可把数据输入输出功能与数据仓库解耦,让数据仓库专注于数据的整合与计算任务。
数据仓库分层架构为 ODM 层、SDM 层、FDM 层及 ADM 层。对上述分层方式可能有童鞋会有这样的疑问:为什么没有共性模型层?每个数据层的定义与职责,以及共性模型层的疑问将在下文逐步介绍,有兴趣的童鞋也可以查阅作者的文章《浅谈银行的数据仓库:分层架构篇》;
分为 SOA 接口与文件接口两种方式,分别提供实时与离线的数据服务。由于应用系统调用数据服务接口同样会造成数据仓库的 IO 与网络资源损耗,所以建设数据服务系统可把调用数据服务功能与数据仓库解耦,同时也避免应用系统直接访问数据仓库所造成的数据安全风险;
负责数据仓库所有作业(含数据总线的 ETL 作业)的调度配置、依赖配置、日切机制及执行监控;
负责对元数据的录入与查询。对数据仓库而言,比较重要的元数据有数据字典、血缘关系、指标口径、数据映射(mapping)及参考数据(码表与系统参数);
负责两大功能——数据核检及质量评分。
数据核检分为表内核检与表间核检两种方式。表内核检主要是数据格式核检,依据数据标准对数据的长度、格式、范围、非空等维度进行检查。除了数据格式核检外,还有表内数据勾稽关系核检,保证表内统计结果的一致性。表间核检主要是检查跨系统的数据勾稽关系,比如总账科目与交易明细的总分核对。所有的核检结果均以日志的方式输出,便于数据治理团队推进数据质量提升的工作。
质量评分依赖数据核检结果,对各个源系统的数据质量进行综合评分,主要用于考核源系统的数据质量完善程度,并对开发团队实施奖惩机制,推进数据质量提升的工作。
负责两大功能——数据生命周期管理及数据安全策略。
数据生命周期管理主要是设定数据的有效期及自动处理策略。当数据达到有效期时,会自动把过期数据进行文本导出、分表、清理等操作,避免数据存储过大造成的一系列系统问题。
数据安全策略主要设定数据的权限,包括查询、下载、分享、补录等权限,避免敏感数据泄露。
数据总线
所以可以设计通用程序实现标准化的数据加载与数据抽取,既可大大减轻开发团队的工作量,也可以增强数据总线的稳定性。
数据仓库 ODM 层
数据仓库 SDM 层
1、源系统全量供数时,数据表只需把全表数据清空并加载即可,但这样只能查询到最新的数据快照。为了记录数据历史轨迹,且节约数据库使用空间,一般只保留特殊时点的历史数据快照,比如每月末、存款起息、信用卡账单日等。
2、源系统增量流水供数时,由于增量数据不会影响到历史数据,故只需把增量数据加载到历史数据快照形成最新数据快照即可。
3、源系统增量历史供数时,由于增量数据可能会影响到历史数据,故需要使用拉链算法既插入新增数据又保留历史数据。
4、使用拉链算法记录数据历史轨迹时,随着时间的增长数据量很可能会指数级增长,比如账户表这类变化极其频繁的源数据。当拉链数据成长到一个数据级时,拉链算法反而会成为累赘,既导致合成历史快照的时间越来越长,又导致数据查询的效率越来越慢。根据八二原则,大部分数据加工仅依赖当前数据,所以,建议把拉链表的历史数据与当前数据分表存储。由于当前数据的量级小,所以无论是使用拉链算法合成历史快照,还是查询数据,上述问题都获得解决。
数据仓库 FDM 层
数据仓库 ADM 层
1、共性宽表与指标体系都是针对日常数据分析使用频繁的,共性的内容进行整合,达到数据共享的效果。实际上,数据应用的统计指标都具备特定业务场景特色,而非共性统计指标可以满足,比如有效账户数统计,共性统计指标口径是要求非注销的账户,而 A 部门的口径是要求账户非注销,且账户余额不为 0,这样实际共性统计指标的共享性会大打折扣。
2、共性宽表与指标体系无法覆盖所有的源数据,也就是说数据应用会从金融主题层与共性模型层取数加工,会导致血缘关系的絮乱。
3、一些基础的共性统计指标也可以落地到金融主题层,这样既满足数据共享,也满足清晰的血缘关系。
数据服务
本章节主要阐述了数据仓库的整体架构与建设路径的关键点,从技术层面上已经基本了解数据仓库如何实施。然而,建设数据仓库,不仅是系统的建设,还是项目的运营。不懂得项目运营,系统建设必定困难重重。
数据仓库项目管理
数据仓库属于不断迭代更新系统,数据服务能力应随着迭代过程变得越来越强。但,为什么很多企业的数据仓库喜欢每隔几年就推到重建呢?本章节从项目管理的角度阐述数据仓库的建设,不过限于篇幅,仅分享项目管理的主要痛点,未来有机会会编写项目管理的实施流程与规范的文章跟大家作分享。
从作者的经验来说,数据仓库项目痛点主要有四个:
项目管理都是有方法可依的,所以上述的痛点也是有方法去解决。
1、在项目建设前,必须跟高管分析数据仓库建设的利与弊,明确告知建设路径是一个缓慢的过程,让高管形成心理预期与具备一定的认知。同时要宣扬同业数据仓库建设的成功案例,特别是每个里程碑的成效,让高管明确了解项目带来的好处,自然就容易获得支持了。
2、在项目建设过程中,要懂得向高管“邀功”,这样才能获得更多的信任与支持。
1、建立需求实施流程,管理需求生命周期,让整个需求实施过程都是有迹可循。
2、做好元数据管理,哪怕缺乏元数据管理系统,也要用文档沉淀下重要的元数据,比如架构文档、模型文档、数据映射文档、指标口径文档。
3、 维护好技术文档,宁可牺牲一定的开发时间,也必须维护好项目过程的资料。这样系统出现异常或者需要交接项目时,就能发挥重大的作用。
1、开发团队哪怕规模小,也要做到麻雀虽小五脏俱全,至少要具备项目经理、架构师/模型师、需求分析师、研发骨干、研发工程师、测试工程师的角色。
2、重要角色必须要有 AB 角,避免重要角色突然流失造成的项目风险与技术断层。
3、最好能主动培养人才而非一味依赖通过社招来招募人才。虽然主动培养人才花费成本比较高,而且存在流失的风险,但一旦能留下来,基本都是骨干角色而且对团队有极高的归属感,更不用说社招来的人才一样存在流失的风险呢。
1、允许试错并鼓励尝试,在合适范围内对模型进行增删改,甚至推到重构,培养能建模的能力。
2、在建模能力培养过程中,所涉及的模型肯定会出现效果特别好的机会。以此机会作为标杆,复盘设计思路并形成方法论沉淀。
3、待到模型建设基本成熟后,再从宏观的角度观察模型,结合业务场景持续思考可优化地方并落地。这样就会回到“多”阶段,不断试错从而产生新的建模能力及方法论。