银行数仓分层架构

news2024/11/10 18:41:45

一、为什么要对数仓分层

实现好分层架构,有以下好处:
1清晰数据结构:
每一个数据分层都有对应的作用域,在使用数据的时候能更方便的定位和理解。

2数据血缘追踪:
提供给业务人员或下游系统的数据服务时都是目标数据,目标数据的数据来源一般都来自于多张表数据。若出现目标数据异常时,清晰的血缘关系可以快速定位问题所在。而且,血缘管理也是元数据管理重要的一部分。

3减少重复开发:
数据的逐层加工原则,下层包含了上层数据加工所需要的全量数据,这样的加工方式避免了每个数据开发人员都重新从源系统抽取数据进行加工。

4数据关系条理化:
源系统间存在复杂的数据关系,比如客户信息同时存在于核心系统、信贷系统、理财系统、资金系统,取数时该如何决策呢?数据仓库会对相同主题的数据进行统一建模,把复杂的数据关系梳理成条理清晰的数据模型,使用时就可避免上述问题了。

5屏蔽原始数据的影响:
数据的逐层加工原则,上层的数据都由下一层的数据加工获取,不允许跳级取数。而原始数据位于数仓的最底层,离应用层数据还有多层的数据加工,所以加工应用层数据的过程中就会把原始数据的变更消除掉,保持应用层的稳定性。

二、银行数仓常见的四层架构

银行数仓分层与阿里大数据之路的分层架构类似,核心思想都是分层治之
1)【贴源层】
具备源系统数据归集到数仓的缓冲层;

2)【标准层】
具备数据标准化及合并全量数据的标准层。

3)【主题层】
具备主题划分及明细数据整合的主题层。

4)【应用层】
具备提供数据服务给下游系统使用的集市层,或称为应用层。

【总结】
这是银行项目常见的分层架构,在此基础上可以根据银行本身的业务特性继续细分,如标准层可在细化为:数据预处理、数据轻度汇总层等等
在这里插入图片描述

三、详解各层的主要职责

1、【ODM(Origin Data Manager)贴源层】
主要用于源系统提供的 T-1 增量文本数据按源系统一致的数据结构入库到数据库。为什么要把源系统数据(简称源数据)入库到数据库,而不是直接合并到全量数据呢?存在以下原因:

1)将文本数据转为为二维表实则是将非结构化数据转化为结构化数据,利于服务器的存储、计算、使用,同时也对数据的下游使用方更友好。直接处理文本数据的话,要先把文本数据加载到内存上,要是数据大小超过 GB 级别,对服务器内存压力可不小。所以该处理方式对服务器硬件要求高,假如把文本数据先通过数据库落地到磁盘上,可以减轻后续处理的硬件压力。另外,文本数据本身是没有结构的,直接处理时还得虚拟成二维表才容易处理,但是文本数据加载到数据库后自动形成二维表,便于后续处理。

2)由于 ODM 位于数仓的最底层,一旦源数据入库出错,可从最底层隔断后续的数据加工流程,避免把错误的源数据入库到标准层引发连环生产问题。

3)当发现上层数据异常时,可通过 ODM 排查根因是否出现在源数据上。

ODM 的建设分为源数据抽取及源数据入库两部分。源数据抽取的处理方式有两种,一种是由源系统的技术团队按照数仓要求的接口格式,抽取数据推送到数仓来实现,另一种是由专门的 ETL 团队负责源数据抽取及源数据入库的实现。部分企业会选择第一种实现方式,这是因为缺乏专门的 ETL 团队承担,或者不希望 ETL 团队多接活(接锅)。事实上,为了从根本上保证数仓的数据质量,还是用第二种方式实现才是最好的,这也是企业建设数仓时会忽略的一点。

ODM 看似是数仓里的最底层,也是最容易实现的层级,因为数据结构与源系统一致,保证数据正常入库即可。但是保证数据正常入库,真的是那么容易实现吗?大家是否遇到过以下问题:

源数据抽取到数仓,没有任何保证数据完整性的措施,过段时间后才发现数仓漏数了,又得从源系统进行数据初始化;

一旦源数据抽取出现异常,缺乏预警通知机制,只有在数仓加载数据时才发现数据尚未推送过来,影响后续数据加工;

源系统出现数据模型的新增或变更后,没有及时通知数仓,到数仓加载数据出现报错时才发现,逼着数仓进行紧急变更。

上述问题的出现,就是因为没有把握到 ODM 建设的核心,构建一条完善的数据抽取——数据入库的 ETL 路线。ODM 建设的核心有以下方面:

1)建立数据抽取——数据入库的全流程校验机制。进行数据抽取时,把落地的文本数据记录数与源系统抽取记录数进行匹对,即可完成数据抽取的完整性校验。进行数据入库时,把入库的记录数与文本数据的记录数进行匹对,即可完成数据入库的完整性校验。

2)使用元数据管理工具,定时同步源系统的数据结构到数仓进行比对,当发现差异时及时预警。

3)由于数据抽取及数据入库的处理流程都是固定的,可固化为一套程序,未来源系统出现新增或者变更需求时,只需处理好映射关系即可,无须重复开发处理流程。

4)建设预警机制,笔者比较推荐使用短信预警通知,这样无论是否在公司,都可以实时了解到 ETL 作业的执行情况,及时对异常进行处理。当然,由于生产环境的操作权限在运维团队手上,预警机制还需要运维团队配合一起实现。

2、【SDM(Standard Data Manager)标准层】
SDM 的数据处理主要分为两部分,一部分是源数据清洗及标准化,另一部分是合并全量数据。

由于源数据的质量参差不齐,为了使数仓内的数据是标准规范的,所以对源数据要按照数据标准,进行数据清洗和标准化转换(PS:由于源数据已入库到 ODM,所以数据清洗及标准化转换都是在数据库层面进行,再次体现 ODM 建设的必要性)。数据标准由数据管理团队负责制定的,所以数仓建设团队也要与数据管理团队深度合作才能做好数据标准化的动作。

这里可能有个疑问,数据清洗与标准化的动作能否放在 ODM 完成呢?答案是不能,因为 ODM 目标是要求入仓数据与源数据完全一致。若 ODM 已对源数据进行了清洗与标准化动作,未来排查数据异常时就不能根据 ODM 来排查根因是否出于源数据了。

合并全量数据的方式有三种,分别为全量更新、增量变更及增量流水。

全量更新,数据抽取时把源系统表的数据全量抽取过来,该更新方式只需把 SDM 对应表的数据先清空,在入库标准化后的数据即可。

增量变更及增量流水,数据抽取时把源系统表内变化的数据抽取过来。两者区别是,增量变更的数据除了包含新增数据外,还包含对历史数据有变更的数据,而增量流水的数据只包含新增数据。

增量流水的数据处理方法相对简单,直接把增量数据入库到表内即可。增量变更的数据一般采用拉链模型来处理,这样既保证可以查询到任意时刻的历史全量快照,也可以减少数仓的存储空间。拉链模型,顾名思义,就是把历史变化的数据一环扣一环,就像链子一样串联起来。当查询数据时,按照扣环上的时间标识进行查询即可。具体实现方式为第一次入库的全量数据,把开始时间记录为入库日期,结束时间记录为永久日期(比如 2999-12-31)。后续入库增量的数据涉及历史数据变更时,把出现变更的旧数据的结束时间记录为当前入库的日期,再把新数据的开始时间记录为当前入库的日期,结束时间记录为永久日期,并写入到表里。这样,要查询历史时点数据,根据开始日期和结束日期的范围查询即可。
在这里插入图片描述
但是,拉链模型有两个明显的缺陷,一个是当发现拉链表内某一扣环的数据异常时,拉链表应如何恢复准确性与完整性,另一个是随着数据不断增加,拉链表会越来越大,每日拉链操作的效率会越来越低。

3、【FDM(Finance Data Manager)金融主题层】
为了让复杂的源数据变得容易理解及使用,必须按照相同的金融主题把数据整合到同一套模型中,对 SDM 数据进行明细级的数据整合汇总。主题设计的数量不宜太多,否则整个 FDM 就达不到简化的作用。FDM 是数仓模型设计的关键,ODM 与 SDM 的数据结构都与源系统数据结构一致(SDM 的数据结构会多一层标准化),模型设计难度不大,但是 FDM 要化繁为简,非常考验建模师对业务的理解及建模经验。FDM 是后续数据分析及数据集市加工的基础,核心是数据关系的简化及复用,设计不好反而会成为整个数仓的累赘,食之无味弃之可惜。由于文章篇幅关系,FDM 的金融主题划分与建模思路未来会展开新的文章进行讨论。

可能会有疑问,能否不建设 FDM,集市数据及数据分析直接从 SDM 进行呢?答案是能,但是后续维护的代价非常大,主要有以下原因:

1)FDM 的核心之一是数据复用,缺乏 FDM 的话,相同数据加工都必须编写重复的处理逻辑实现,技术团队的开发量会大大增加;

2)FDM 的核心之二是数据关系简化,缺乏 FDM 的话,每个数据开发工程师都要理解各个源系统之间的数据关系,开发门槛极高,最终导致技术团队实施成本过高;

3)假如 ADM 是从 SDM 加工获得,源系统发生任意变更,都会影响到 ADM,这时 ADM 的稳定性就无从谈起。笔者的公司曾经试过信审系统重构从而新信审系统的数据模型变化极大,而当时数仓缺乏共性整合的 FDM,导致本次变更对依赖数仓的数据应用造成难以估量的影响。而且由于需求分析阶段没有识别到这个风险点,最终导致信审系统重构项目被迫延迟 2 个月才能上线,而数仓为了减少对数据应用的影响,把源系统的变更放在 SDM 内实现,这就是 FDM 的重要性。有 FDM 的话,所有源系统的变更都可以在 SDM 加工到 FDM 的过程进行屏蔽,这样数仓会更加适应源系统引发的变更。

另外,为什么 FDM 是明细级数据的加工呢?这是为了建设数据自助分析平台做准备的。假如是高度汇总的指标数据,业务人员一旦对指标口径发生变更,技术人员就会疲于奔命的变更指标的逻辑代码来满足业务人员的需求。而明细级数据可以为业务人员提供自由组合的业务逻辑,技术人员只需要不断扩展 FDM 就可以满足业务人员频繁变动的需求了。

4、【ADM(Application Data Manager)应用层】
应用层就是以特定业务场景为目标而高度汇总的数据,一般以数据集市的形态呈现,比如大家常说的营销集市、风险集市、绩效集市。由于数据集市的建设对应的是特定且独立的业务场景,几无共性可言,所以必须对每类集市进行单独说明。

四、对比与总结
银行数仓分为四层:贴源层、标准层、主题层、应用层。
阿里大数据之路将数仓分为四层:ODS层(源数据层)、DWD层(数据明细层)、DWS层(轻度汇总层)、DIM层(维度层)、ADS层(数据应用层)
若数仓数据量比较大,业务逻辑比较复杂还可以再次基础上,创建DWT层(数据主题层),在轻度汇总层的基础上,再按照主题进行基于业务逻辑的汇总,方便数据数据应用层的调用和加工。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebTest搭建

0.前言 此框架为真实项目实战,所以有些数据不便展示,只展示架构和思想 工具:pythonseleniumddtunittest 1.架构说明 2.代码封装 Commom层 base_page.py #__author__19044168 #date2021/8/26 import logging import datetime from sele…

【数据分析之道-NumPy(六)】数组操作

文章目录专栏导读1、修改数组形状reshape()resize()flatten()ravel()2、翻转数组transpose()flip()fliplr()flipud()3、修改数组维度newaxis()squeeze()4、连接数组concatenate()stack()hstack()、vstack()5、分割数组split()hsplit()vsplit()array_split()6、数组元素的添加和…

2023学习软件测试,如何月薪过万?这几条必须具备

软件测试,如何月薪过万? 这个问题换做前几年的功能测试或许还有点小难。但如今以点点点为主的功能测试,即将被淘汰,适者生存的法则下,自动化测试如雨后春笋登上舞台。 同一时间,随着各大互联网公司迅速扩…

Carla仿真二:Carla多视图切换代码详解

文章目录前言一、Carla多视图切换效果二、Camera安装坐标系1、Carla.Location2、Carla.Rotation三、接口及代码详解1、接口介绍2、生成上帝视图代码3、生成Camera视图代码四、完整代码前言 1、Carla提供了大量的Python API接口,用户可以通过查找文档实现各类功能&a…

【前缀和】

目录知识框架No.0 筑基No.1 普通前缀和题目来源:牛客网-NC14556:数圈圈题目来源:牛客网-NC14600:珂朵莉与宇宙题目来源:牛客网-NC21195 :Kuangyeye and hamburgers题目来源:牛客网-NC19798&…

混合开发中h5前端离线打包规范流程

1、离线化的目的 首先在H5Native的混合开发实战中,让人头疼最多的恐怕就是网页加载过程中的白屏了,以及弱网、断网状态下h5页面无法正常加载的问题,那么为了解决这些问题,我们H5端跟原生端共同讨论采用Hybrid App离线加载方案&…

fiddler(抓包)的用法和HTTP 协议的基本格式

目录 fiddler(抓包)用法: HTTP 协议的基本格式 HTTP请求: 首行 认识HTTP方法 GET和POST的典型区别: 认识请求“报头”(header) HTTP 响应 HTTP状态码: 状态码的分类: 认识响应 …

SD-WAN基本介绍

一、SD-WAN是什么?它能为我们带来什么? SD-WAN,即软件定义广域网络,是将SDN技术应用到广域网场景中所形成的一种服务。这种服务用于连接广阔地理范围的企业网络、数据中心、互联网应用及云服务,旨在帮助用户降低广域网…

STL——array和vector容器

📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段>——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程&…

解密HTTP协议:探索其组成部分与工作原理

前言 欢迎来到今天的每日一题,每日一提。昨天有聊到,HTTP 和 HTTPS 之间有什么区别?面试官基本秉承着刨根问题的原则,肯定是不会轻易放过我们的,那么自然是要继续拷问了。所以我们今天就聊聊什么是 HTTP,它…

微服务分布式搜索引擎 Elastic Search RestClient 操作文档

文章目录⛄引言一、初始化 Java RestClient二、RestClient 对文档的CRUD操作⛅新增文档⏰查询文档⚡修改文档⌚删除文档三、RestClient 批量文档导入⛵小结⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能…

SpringBoot整合XXL-JOB

XXL-JOB: 官网文档地址:分布式任务调度平台XXL-JOB GitHub地址:https://github.com/xuxueli/xxl-job Gitee地址:https://gitee.com/xuxueli0323/xxl-job 拉取代码,首先执行一下doc/db下的sql文件 tables_xxl_job.sq…

JAVA识别电子发票问题汇总

之前写的java解析电子发票,上线后出现了一下线上的问题,无法解析发票,对问题做个规整,仅供参考! 1. Pdfbox介绍 pdfbox是一款Apache的开源工具,可以进行对pdf进行操作,如题,转图片…

UE4C++学习篇(十九)-- 动画蒙太奇初级使用

用一个第三人称的射击案例来简单介绍一下动画蒙太奇的使用,动画蒙太奇的具体介绍这里就不多说了,不知道的小伙伴可以去搜一下了解。 这里介绍角色射击,射击的时候播放一个射击动画。 选中需要创建出动画蒙太奇的动画,点击创建&am…

物理服务器通过U盘安装CentOS 7操作系统

一、制作U盘启动盘 1、使用UltraISO工具打开需要安装的操作系统iso镜像文件(我安装的是CentOS-7-x86_64-Minimal-2009.iso),如下图所示 镜像下载地址:centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 2、将该系统镜像…

nginx--官方模块

目录 1.概述 2.Nginx的客户端状态 1.使用 2.目录中选择一个随机主页 3.http内容替换 ​编辑 4.nginx请求限制 5.nginx访问控制 1.基于Ip的访问控制 1.1使用 1.2access_mod.conf 1.3只允许自己ip访问 1.4http_x_forwarded_for 1.5http_access_module局限性 2.基于…

【用python将文件夹下面的文件夹里面的文件全部提取出来,并且放到一个新的文件夹】

文件里面有多个文件,每个文件下面有很多jpg格式的照片,把所有照片提取出来并且放在一个新的文件夹下面。 可以使用Python的os和shutil库来完成这个任务。 比如说:我的faces95文件夹下面有95个文件,每个文件下面有十七到十八个照片…

深拷贝和浅拷贝

目录 一.Java的Cloneable和clone()方法 1.Object类中的clone() 2.实现Cloneable接口的类 3.通过clone()生成对象的特点 二.深拷贝和浅拷贝 1.浅拷贝 2.深拷贝 3.实现深拷贝的两种方法 1.一种是递归的进行拷贝 2.Json字符串的方式进行深拷贝 一.Java的Cloneable和clone…

No.037<软考>《(高项)备考大全》【第21章】项目组合管理

【第21章】项目组合管理1 考试相关2 项目组合管理2.1 项目组合管理、项目集管理、项目管理异同2.2 项目组合管理过程组3 练习题参考答案1 考试相关 选择1分必考 案例概率低,知识点看一遍即可 2 项目组合管理 1、项目组合是将项目、项目集,以及其他方面…

2023年MathorCup数学建模赛题浅析

MathorCup俗称妈杯,是除了美赛国赛外参赛人数首屈一指的比赛,而我们的妈杯今天也如期开赛。今年的妈杯难度,至少在我看来应该是2023年截至目前来讲最难的一场比赛。问题的设置、背景的选取等各个方面都吐露着我要难死你们的想法。难度是恒定的…