当前位置: 首页 > news >正文

银行数仓分层架构

一、为什么要对数仓分层

实现好分层架构,有以下好处:
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层(数据主题层),在轻度汇总层的基础上,再按照主题进行基于业务逻辑的汇总,方便数据数据应用层的调用和加工。

相关文章:

银行数仓分层架构

一、为什么要对数仓分层 实现好分层架构,有以下好处: 1清晰数据结构: 每一个数据分层都有对应的作用域,在使用数据的时候能更方便的定位和理解。 2数据血缘追踪: 提供给业务人员或下游系统的数据服务时都是目标数据&…...

Go并发编程的学习代码示例:生产者消费者模型

文章目录 前言代码仓库核心概念main.go(有详细注释)结果总结参考资料作者的话 前言 Go并发编程学习的简单代码示例:生产者消费者模型。 代码仓库 yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (g…...

求a的n次幂

文章目录 求a的n次幂程序设计程序分析求a的n次幂 【问题描述】要求利用书上介绍的从左至右二进制幂算法求a的n次幂; 【输入形式】输入两个正整数,一个是a,一个是n,中间用空格分开 【输出形式】输出一个整数 【样例输入】2 10 【样例输出】1024 【样例输入】3 4 【样例输出】…...

word脚标【格式:第X页(共X页)】

不得不吐槽一下这个论文,真的我好头疼啊。我又菜又不想改。但是还是得爬起来改 (是谁大半夜不能睡觉加班加点改格式啊) 如何插入页码。 格式、要求如下: 操作步骤: ①双击页脚,填好格式,宋体小四和居中都…...

Linux --- 软件安装、项目部署

一、软件安装 1.1、软件安装方式 在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下: 1.2、安装JDK 上述我们介绍了Linux系统软件安装的四种形式,接下来我们就通过第一种(二进制发布包)形式来安装 JDK。 JDK…...

MATLAB应用笔记

其他 1、NaN值 MATLAB判断数据是否为NaN可以直接使用函数:isnan() 三、数据分析 1、相关性 均值、方差、协方差、标准差、相关系数 mean() %均值 nanmean()%去除NAN值求均值 var() %方差 cov() %协方差 std() %标准差 corrcoef(B,b) %R 相关系数plot()…...

ERTEC200P-2 PROFINET设备完全开发手册(6-2)

6.2 诊断与报警实验 首先确认固件为 App1_STANDARD, 将宏定义改为: #define EXAMPL_DEV_CONFIG_VERSION 1 参照第6节的内容,编译和调试固件,并在TIA Portal 中建立RT项目。启动固件后,TIA Portal 切换到在线,可以看…...

算法套路八——二叉树深度优先遍历(前、中、后序遍历)

算法套路八——二叉树深度优先遍历(前、中、后序遍历) 算法示例:LeetCode98:验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只…...

视频批量剪辑:如何给视频添加上下黑边并压缩视频容量。

视频太多了,要如何进行给视频添加上下黑边并压缩视频容量?今天就由小编来教教大家要如何进行操作,感兴趣的小伙伴们可以来看看。 首先,我们要进入视频剪辑高手主页面,并在上方板块栏里选择“批量剪辑视频”板块&#…...

那些你需要知道的互联网广告投放知识

作为一个合格的跨境电商卖家,我们除了有好的产品之外,还要知道怎么去营销我们自己的产品。没有好的推广,即使你的产品有多好别人也是很难看得到的。今天龙哥就打算出一期基础的互联网广告投放科普,希望可以帮到各位增加多一点相关…...

【hello Linux】进程程序替换

目录 1. 程序替换的原因 2. 程序替换原理 3. 替换函数 4. 函数解释 5. 命名理解 6.简陋版shell的制作 补充: Linux🌷 1. 程序替换的原因 进程自创建后只能执行该进程对应的程序代码,那么我们若想让该进程执行另一个“全新的程序”这 便要用…...

【网络应用开发】实验4——会话管理

目录 会话管理预习报告 一、实验目的 二、实验原理 三、实验预习内容 1. 什么是会话,一个会话的生产周期从什么时候,到什么时候结束? 2. 服务器是如何识别管理属于某一个特定客户的会话的? 3. 什么是Cookie,它的…...

Linux服务器怎么分区

Linux服务器怎么分区 我是艾西,linux系统除了从业某个行业经常要用到的程序员比较熟悉,对于小白或只会用Windows系统的小伙伴还是会比较难上手的。今天艾西简单的跟大家聊聊linux系统怎么分区,让身为小白的你也能一眼看懂直接上手操作感受程序…...

传统机器学习(四)聚类算法DBSCAN

传统机器学习(四)聚类算法DBSCAN 1.1 算法概述 DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。 该算法将具有足够密度的区域划分为簇,并在…...

“华为杯”研究生数学建模竞赛2020年-【华为杯】A题:ASIC 芯片上的载波恢复 DSP 算法设计与实现(附获奖论文及matlab代码实现)

目录 摘 要: 1.问题重述 1.1 问题背景 1.2 问题提出 1.3 研究基础 2.模型假设和已知...

1043.分隔数组以得到最大和

题目: 给你一个整数数组 arr,请你将该数组分隔为长度 最多 为 k 的一些(连续)子数组。分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值。 返回将数组分隔变换后能够得到的元素最大和。本题所用到的测试…...

微服务治理框架(Istio)的认证服务与访问控制

本博客地址:https://security.blog.csdn.net/article/details/130152887 一、认证服务 1.1、基于JWT的认证 在微服务架构下,每个服务是无状态的,由于服务端需要存储客户端的登录状态,因此传统的session认证方式在微服务中不再适…...

数据结构 | 排序 - 总结

排序的方式 排序的稳定性 什么是排序的稳定性? 不改变相同数据的相对顺序 排序的稳定性有什么意义? 假定一个场景: 一组成绩:100,88,98,98,78,100(按交卷顺序…...

crontab -e 系统定时任务

crontab -e解释 crontab 是由 “cron” 和 “table” 两个单词组成的缩写。其中,“cron” 是一个在 Linux 和类 Unix 操作系统中用于定时执行任务的守护进程,而 “table” 则是指一个表格或者列表,因此 crontab 就是一个用于配置和管理定时任…...

前后端交互系列之Axios详解(包括拦截器)

目录 前言一,服务器的搭建二,Axios的基本使用2.1 Axios的介绍及页面配置2.2 如何安装2.3 Axios的前台代码2.4 Axios的基本使用2.5 axios请求响应结果的结构2.6 带参数的axios请求2.7 axios修改默认配置 三,axios拦截器3.1 什么是拦截器3.2 拦…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

ip子接口配置及删除

配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...