银行数据仓库体系实践(4)--数据抽取和加载

1、ETL和ELT

        ETL是Extract、Transfrom、Load即抽取、转换、加载三个英文单词首字母的集合:

        E:抽取,从源系统(Souce)获取数据;

        T:转换,将源系统获取的数据进行处理加工,比如数据格式转化、数据精度转换、数据清洗、缺失数据补齐、异常数据排除等。

        L:加载,将数据加载到目标数据库(Target)。

        ELT也是同样三个单词的首字母组合,只是把T、L颠倒了下顺序。ETL强调的是先进性数据转换,然后再加载到目标。这个转换过程可以在原系统进行,也可以在中间环境进行进行。而ELT是把数据加载到数据仓库后再进行转化。ETL优势是充分利用各关联系统的性能,提高效率,但程序部署分散,运维成本较高。ELT是充分发挥数据仓库平台数据加工的高性能,并且可以保存原始数据方便后续复用。

        随着数据仓库平台的性能越来越高,容量成本越来越低,目前更多的是采用ELT方式,充分利用数据仓库的高性能,提高加工效率。但在数据加载前也需要进行数据编码转化、异常数据等影响加载的处理,确保数据正确加载到数据仓库平台,但不做数据逻辑加工。

        由于ETL出现较早,通常使用ETL来代表数据抽取加载和转换的统称。

2、ETL架构设计

        数据ETL需要有ETL服务器集群执行数据ETL作业来进行数据抽取、转换和加载,所有ETL作业的脚本部署多台ETL服务器上,ETL作业可以根据服务器资源由调度工具分配到任意一台ETL服务器执行,常见架构如下图:

        ETL架构不仅仅是作为数据仓库的架构,但也是全行批量数据交换的统一架构和标准,虽然数据仓库是其中最大的一个数据加载的目标系统和数据源系统,但从架构规划角度来看,需要从全行、全集团的角度来设计批量数据交换,考虑多机构间交互场景,减少不必要的转换,提高效率和稳定性。

       ETL服务器集群需要做到高可用,对于不能正常服务或负载过高的服务器,调度平台不会将作业分配到该服务器,所有的ETL作业脚本需要在每台服务器上部署,不能只部署一份代码到共享存储中。

       在硬件资源上,服务器的IO和内存需要配置较高,同是由于批量数据容量较大,网络带宽需要千兆以上,同时需要考虑在传输高峰不能影响交易系统的网络通讯。

(1)文件方式和端到端方式

       数据抽取和加载从是否经过中间落地成文件来区分主要有文件落地方式和端到端不落地(内存)的两种方式。文件方式指ETL服务器的抽取数据作业从源系统获取转焕为文件放到文件共享存储中,再由加载作业到目标系统中。端到端方式是ETL服务器从 源系统获取数据后在内存中直接加载到目标系统。

从步骤中可以看出端到端方式在内存中直接加载,从单个作业速度对比来看速度应该更快,开发更简单,但端到端方式对内存资源要求较高,并行作业的最大值一般较文件低,同时文件具有以下好处:

        1)各数据库对文件导入和导出支持较好,一般都会提供专门的工具和高性能接口(如oracle sqlload导入文件和spool导出文件的性能较高)。因此大批量的数据抽取和加载作业的效率从整体看文件方式不一定比端到端的方式慢。

        2)文件方式耦合性比端到端低,如果发现数据加载出现问题,可以不用重新抽取数据,减少抽数对源系统的性能影响。

        3)文件通用性较好,如果涉及多网络或多机构之间的数据交换,A子公司的ETL服务器无法连接到B子公司的数据库。另外对于非结构化数据来源广泛,导出文件比较通用。

       具体采用文件方式,端到端方式还是两者都采用的方式,各公司需要考虑服务器资源、现有工具及数据库驱动性能、成本、数据交换场景等多种情况来确定。

      

(2)文件方式方案需要考虑的要点

       文件方式比较通用,多机构之间较多采用文件方式进行批量数据交互,但采用文件方式进行架构设计和开发时需要关注以下几点:

1)统一的文件交换规范和文件传输平台

       文件存储规范制定文件目录、文件命名、用户权限、文件校验、文件清理等规范,如果涉及到跨机构批量文件传输,还需要统一有文件传输平台,提供统一的文件高效传输、加密、校验、限流、文件夹同步等功能。国内银行使用较多的文件传输平台有东方通、神州数码等公司产品。

     文件目录规范中需要区分数据产生系统、数据使用系统、数据日期等,文件名中需要说明产生系统、文件内容描述、增量全量标志、数据日期等,规则举例如下:

       数据源系统/数据日期/目标系统/源系统_文件内容描述_数据日期_增全量标志_频率标志.txt

       举例:CBS/20190620/EDW/CBS_DEPOSIT-ACCOUT_20190620_ALL_D.txt

       说明:【CBS、EDW为系统名】【ALL为全量标志】【D为每日】

 2)文件格式:定长or 变长(分隔符)

       定长:文件大,I/O资源消耗大,但能消除回车符、分隔符以及乱字符问题。

       变长(分隔符):文件小,处理性能高,但需处理异常情况较多:

        <1>分隔符:数据中存在分隔符,导致加载报错,可选用两个连续的不可见字符作为分隔符,基本可以解决该问题;

        <2>换行符:导出文件时一般以换行符作为一行数据的结束,如果导出工具支持可以改成不可见字符作为换行符,不支持的话导出时对数据中的换行符进行替换;

        <3>异常字符:如截取导致的半个UTF-8字符的编码或者HEX00等字符,一些数据库不支持会报错,一般这些字符发生在以前的主机上,异常情况下出现没处理,可以提前在源系统进行数据清洗或者导出时进行替换清洗。 

因此一般在这些问题都有较好解决方法不影响抽取加载作业效率的情况下,都会采用变长(分隔符)的方式。

           3)文件编码

       文件导出需要统一编码,一般采用UAT-8编码,适应多国字符,但如果只有国内应用,也可以考虑GB18030或GBK编码,因为这两种编码中文字符比UTF-8编码节省1/3多的存储空间。性能较好。

(3)端到端方式需要考虑的要点

  1)工具选择

       目前市场上商用的ETL工具如DATASTAGE、INFORMATICA,开源的SQOOP都支持端到端的处理,商用工具还提供中间的图形化的数据转换编码功能,但商用软件一般成本较高,对于一些数据库的高性能驱动还需要收费,开源工具功能较通用,但性能需要优化,同时需要有一定的技术能力来定制功能和软件升级。

   2)驱动选择

       选择数据库提供的高性能原生(native)驱动,不要使用ODBC驱动,原生的驱动性能数倍于ODBC等通用驱动,采集数据较多时能很大提高效率。

   3)字符编码

       需要将数据从源系统导出时转换为目标数据库的编码格式,在全公司的数据库编码和数据仓库内的字符编码需要进行统一规范,既可以减少转换成本,也可以减少生僻字、无法转换等异常情况。

3、抽取和加载开发设计

   (1)开发需求分析

       由于源系统和目标系统数据库不同,数据质量不高,需要注意之间不同数据库之间的字段类型、长度、精度的转换,为后续数据加工做好清洗:

       1)源系统字段没有明确精度和长度时,如Oracle中字段类型为number,没有定义精度,使用DATASTAGE时,当大于15位的number型数字接近最大值时会自动进位,所以在目标表设计字段精度时需要考虑这种异常情况。

       2)字符字段的全角和半角是否都统一为半角;

       3)字符字段左右空格是否都统一去掉;

       在开发抽取加载作业时,需要配置以下主要信息,这些信息需要在数据调研和需求分析时提前确定:

(2)全表字段自动加载

       一般开发时会采用固定字段抽取加载的方式,但由于源系统的表结构会经常变化,比如增加字段,字段长度变长,如果每次变化都要随之修改,许多时间会耗费在这些小修小改中,因此在进行抽取和加载时,需要根据源系统表结构自动生成对应的抽取脚本、目标表结构、加载脚本,自动适应源系统的表结构变化。

(3)源系统数据表变化通知和监控

        虽然抽取和加载作业可以适应源系统表结构变化,但字段长度、精度变化、字段删除、代码值变化和字段含义变化会对后续数据加工作业带来影响。因此源系统需要将这些变更提前告知数据仓库或目标系统,否则就会产生生产问题,但源系统开发同事往往会产生遗漏,因此在公司数据治理制度中明确开发分工、数据问题责任界定。如在每次版本需求分析时需要考虑数据变化对数据仓库及其它系统的影响,并在测试阶段提前进行影响测试。在上线前也需要检查下系统表结构变化的DDL文件,分析影响并通知影响系统。

        由于源系统字段的变化会影响到后续的数据流向的所有系统,因此在数据仓库的模型设计时需要提前设计冗余,减少字段长度、精度变化的影响,比如源系统字段长度是128,在数据仓库主数据模型中可以设计为500。减少对后续数据使用系统的影响。具体影响分析工具会在后续的“元数据管理”中详细说明。

        由于只靠源系统的通知并不完全可靠,还需要做好源数据表结构变化和代码值变化的监控,每天对抽取的表结构和上一日进行比对,代码值与代码值映射表中比对,对发现未告知的情况进行邮件告警,并评估影响、及时处理,以免问题积累,需耗费大量精力修复。

(4)自动化脚本生成及执行

       对于抽取加载作业需要做成标准化程序,即一个程序处理所有的抽取加载作业,根据不同的配置信息来完成所有作业,在调度工具中的所有抽取加载作业指向的是同一个程序,由这个程序根据传入的作业名和日期自动化生成脚本并执行。这样对于开发只是进行配置信息的确认和导入即可,不需要涉及代码开发。

       许多ETL工具需要开发脚本再执行,特别一些商用的软件如DATASTAGE还提供了可视化的开发界面,但这样开发也比较耗时,对于使用的ETL工具如DATASTAGE、SQOOP也支持编程和脚本调用作业,所以可以用统一的程序来调用ETL工具进行抽取加载数据。提高开发效率,以下是供参考的流程。

(5)监控及异常处理

       数据抽取和加载作业是数据仓库每天第一批作业,如果发生问题往往对整个批处理时效产生较大影响,甚至影响监管报送时效。因此需要对作业进行监控,及时预警。

       因此在开发抽取和加载作业时,需要注意:

       1)统一返回码并提供错误信息;

       2)抽取和加载作业必须支持重跑,也就是在作业任何阶段发生异常时可直接重做,需要设计时考虑异常中断下,如何恢复初始数据;

       3)调度平台需要根据抽取加载作业返回码判断作业是否成功,是否可以继续,对于异常情况需要及时与行内监控预警系统对接,按预警级别发送作业错误告警信息;

       4)调度平台需要获取到作业的日志,对于一些ETL工具,这部分需要进行集成,以便减少后台日志查看的工作量,直接在调度平台进行问题定位。

(6)开发分工

       ETL作为全行或全公司的批量数据交互基础架构,需要在全行或全公司进行规范和开发流程培训。ETL服务器及工具、抽取加载的标准程序由统一团队来维护,需要进行权限分配并提供培训及技术支持。

       那对于抽取加载作业具体由源系统还是目标系统来开发不同的公司有不同的做法,

       1)由源系统开发,如果源系统是将数据加工结果给到目标系统,由于比较熟悉数据,一般由源系统加工完后直接开发抽取加载作业将数据提供给目标系统;

       2)由目标系统开发,目标系统比较熟悉数据用途及优先级,如果全表抽取的话数据加工主要在目标系统,由目标系统来开发抽取加载作业,源系统只需要做好数据权限分配即可。

        3)由数据仓库团队统一开发,一般公司较小时可以由统一团队来开发,但随着开发项目增多,会出现瓶颈,影响效率,需要由各数据使用方来开发抽取加载作业。


————————————————
版权声明:本文为「acumen_leo」博主的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/acumen_leo/article/details/93399151

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

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

相关文章

【labVIEW】学习记录

【labVIEW】学习记录 一、简介二、安装及激活三、使用 回到目录 一、简介 labVIEW&#xff08;Laboratory Virtual Instrument Engineering Workbench&#xff09;是一款由美国国家仪器公司&#xff08;National Instruments&#xff09;开发的可视化编程环境和开发平台。LabV…

3.3 实验三:以太网链路聚合实验

HCIA-Datacom实验指导手册&#xff1a;3.3 实验三&#xff1a;以太网链路聚合实验 一、实验介绍&#xff1a;二、实验拓扑&#xff1a;三、实验目的&#xff1a;四、配置步骤&#xff1a;步骤 1 掌握使用手动模式配置链路聚合的方法步骤 2 掌握使用静态 LACP 模式配置链路聚合的…

【JavaEE进阶】 数据库连接池与MySQL企业开发规范

文章目录 🌴数据库连接池🎋数据库连接池的使用🎄MySQL企业开发规范⭕总结🌴数据库连接池 数据库连接池负责分配、管理和释放数据库连接,它允许应⽤程序重复使⽤⼀个现有的数据库连接,⽽不是再重新建⽴⼀个. 没有使⽤数据库连接池的情况:每次执⾏SQL语句,要先创建⼀…

Linux系统——函数与数组

目录 一、函数 1.函数的定义 2.使用函数 3.定义函数的方法 4.函数举例 4.1判断操作系统 4.2判断ip地址 5.查看函数列表 6.删除函数 7.函数返回值——Return 8.函数的作用范围 9.函数传参 10.函数递归 10.1病毒 10.2阶乘 10.2.1 用for循环 10.2.2函数阶乘 10.…

Python实战项目Excel拆分与合并——合并篇

在实际工作中&#xff0c;我们经常会遇到各种表格的拆分与合并的情况。如果只是少量表&#xff0c;手动操作还算可行&#xff0c;但是如果是几十上百张表&#xff0c;最好使用Python编程进行自动化处理。下面介绍两种拆分案例场景&#xff0c;如何用Pandas实现Excel文件的合并。…

ELK日志解决方案

ELK日志解决方案 ELK套件日志系统应该是Elasticsearch使用最广泛的场景之一了&#xff0c;Elasticsearch支持海量数据的存储和查询&#xff0c;特别适合日志搜索场景。广泛使用的ELK套件(Elasticsearch、Logstash、Kibana)是日志系统最经典的案例&#xff0c;使用Logstash和Be…

Scikit-learn (sklearn)速通 -【莫凡Python学习笔记】

视频教程链接&#xff1a;【莫烦Python】Scikit-learn (sklearn) 优雅地学会机器学习 视频教程代码 scikit-learn官网 莫烦官网学习链接 本人matplotlib、numpy、pandas笔记 1 为什么学习 Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一. Sk…

burp靶场--WebSockets安全漏洞

burp靶场–WebSockets安全漏洞 https://portswigger.net/web-security/websockets/what-are-websockets ### 什么是 WebSocket&#xff1f; WebSocket是一种通过 HTTP 发起的双向、全双工通信协议。它们通常在现代 Web 应用程序中用于流数据和其他异步流量。 在本节中&#x…

ChatGPT 官方中文页面上线

根据页面显示&#xff0c;OpenAI 现已推出 ChatGPT 的多语言功能 Alpha 版测试&#xff0c;允许用户选择不同语言的界面进行交互。 如下图所示&#xff0c;ChatGPT 会检测系统当前所使用的语言&#xff0c;并提示用户进行语言切换。 用户也可通过设置页面选择其他语言。目前&a…

Linux之系统安全与应用

Linux系统提供了多种机制来确保用户账号的正当&#xff0c;安全使用。 系统安全措施 一. 清理系统账号 1.1 将用户设置为无法登录 Linux系统中除手动创建的各种账号外&#xff0c;还包括随系统或程序安装过程而生成的其他大量账号。除了超级用户root以外&#xff0c;其他的…

免费开源的微信小程序源码、小游戏源码精选70套!

微信小程序已经成为我们日常的一部分了&#xff0c;也基本是每个程序员都会涉及的内容&#xff0c;今天给大家分享从网络收集的70个小程序源码。其中这些源码包含&#xff1a;小游戏到商城小程序&#xff0c;再到实用的工具小程序&#xff0c;以及那些令人惊叹的防各大站点的小…

【Linux】文件描述符 | 重定向 | C文件指针与fd的关系 | 用户级缓冲区

文章目录 一、文件描述符1. 理解&#xff1a;Linux下一切皆文件2. 文件描述符&#xff08;fd&#xff09;的概念3. 文件描述符的分配规则4. 进程创建时默认打开的 0 & 1 & 2 号文件 二、重定向1. 重定向的本质2. 使用dup2系统调用函数3. bash下的三种重定向4. 三种重定…

全面理解“张量”概念

1. 多重视角看“张量” 张量&#xff08;Tensor&#xff09;是一个多维数组的概念&#xff0c;在不同的学科领域中有不同的应用和解释&#xff1a; 物理学中的张量&#xff1a; 在物理学中&#xff0c;张量是一个几何对象&#xff0c;用来表示在不同坐标系下变换具有特定规律的…

(N-141)基于springboot,vue网上拍卖平台

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis-plusredi…

GNS3连接Vmware虚拟机

1 安装配置Gns3、Vmware 安装过程略&#xff0c;最终版本号&#xff1a; Gns3&#xff1a;2.2.44.1 Vmware&#xff1a;17.0 建议保持一致&#xff0c;特别是Gns3&#xff0c;功能虽然强大的&#xff0c;但bug问题感觉也不少 2 虚拟机配置 新建两台Ubuntu 22.04虚拟机&#…

【JavaScript权威指南第七版】读书笔记速度

JavaScript权威指南第七版 序正文前言&#xff1a;图中笔记重点知识第1章 JavaScript简介第一章总结 第2章 词法结构注释字面量标识符和保留字Unicode可选的分号第二章总结 第3章 类型、值和变量【重要】原始类型特殊类型第三章总结 第4章 表达式与操作符表达式操作符条件式调用…

【JAVA面试精选篇-初生牛犊不怕虎】

文章目录 🌽 简介🧺 线程池🌄 Redis⏰ JVM🚛 数据结构🍎 Mysql🍡 结语🌽 简介 海阔凭鱼跃,天高任鸟飞! 学习不要盲目,让大脑舒服的方式吸收知识!!! 本人马上离开济南,回泰安发展,为了积极准备面试,目前在梳理一些知识点,同时希望能够帮助到需要的人… …

Rabbitmq调用FeignClient接口失败

文章目录 一、框架及逻辑介绍1.背景服务介绍2.问题逻辑介绍 二、代码1.A服务2.B服务3.C服务 三、解决思路1.确认B调用C服务接口是否能正常调通2.确认B服务是否能正常调用A服务3.确认消息能否正常消费4.总结 四、修改代码验证1.B服务异步调用C服务接口——失败2.将消费消息放到C…

智能AI系统开发,专业软件硬件物联网开发公司,探索未来科技新纪元

在信息时代&#xff0c;人工智能&#xff08;AI&#xff09;、物联网等前沿技术日益受到人们的关注。智能AI系统、专业软件硬件物联网开发公司应运而生。今天&#xff0c;我们将向大家介绍一家位于XX城的专业公司&#xff0c;致力于智能AI系统开发和软件硬件物联网领域的创新研…

大数据安全 | 期末复习(下)

文章目录 &#x1f4da;安全策略和攻击&#x1f34b;&#x1f407;安全协议&#x1f407;IPsee&#x1f407;SSL&#x1f407;SSH&#x1f407;S/MIME协议&#x1f407;公钥基础设施PKI&#x1f407;PGP&#x1f407;HTTPS&#x1f407;防火墙&#x1f407;防毒墙&#x1f407;…