当前位置: 首页 > 编程日记 > 正文

一个较为详细的ETL系统实现方案

转至:http://www.cognoschina.net/club/viewthread.php?tid=5627

ETL流程及调度设计(ETL Schedule)(PSP)

1. ETL调度目标
快速见效系统要抽取39家分行四个系统的数据进行加工处理,数据从下传文件到ODS库,ODS库到LDM,再计算PI值和汇总PI,整个ETL处理过程需按一定步骤和满足某些条件进行,某些关键的文件如汇率数据、机构会影响整个ETL的处理,因此,快速见效的ETL处理流程将一个比较复杂的过程。
考虑到将来ETL处理的样性和复杂性,引入了Job的概念,将ETL处理过程分为一个一个的Job,Job可能是清洗\加载\转换,也可能是PI加工。为了对复杂的ETL处理过程更好的调度和监控,专门设计一个ETL调度系统。通过ETL调度系统的开发使用,将清晰、高效地通过Job调度的方式处理快速见效的ETL过程。


2. ETL调度功能说明

调度维护
1) 调度系统参数维护,对调度系统的公共参数:期数、进程数、数据日期、本期开始日期和本期结束日期进行设置和修改。
2) 下传文件信息维护,维护所有区域的下传文件名称、文件状态、文件数据日期和对应区域的归属关系。
3) 作业步定义与维护,定义作业对应的实际ETL处理过程,生成作业编号,定义作业类型和作业的驱动关系,作业的运行所需要的条件。
4) 调度异常处理,对调度过程出现的异常情况进行处理,提供错误查找、出错重跑功能。

日志管理
1) 调度过程日志,管理记录调度中的主要过程和异常信息,如调度开始、调度完成、数据库操作异常和读写文件异常的日志。
2) Job执行日志,管理记录Job执行信息的日志,提供该日志的查询、删除和执行状态重置功能。
3) Job详细事件日志,管理记录Job执行中的详细事件(清洗记录条数、数据库具体操作情况)的日志,提供对日志的查询、删除操作。

作业调度
正常情况下的作业调度,对整个ETL过程进行调度,提供分段提交处理和自动提交处理功能。

可调度的Job类型
1) C程序(清洗),ETL调度提供与C程序的接口,从而可以对C程序进行调度。
2) 用C封装的SQLLDR(加载),将ORACLE SQLLDR封装在C程序中进行调度。
3) PROC程序(合并、转换),对合并和转换过程,调度提供相应的接口,从而对ORACLE的PROC程序进行调度。
4) 存储过程(转换),将存储过程封装在PROC程序中进行调度。
5) DataStage(PI加工),调度系统提供了与DataStage的接口,可以对DataStage各个种类的Job进行调度。


作业步(ETL_Step)的功能类型及数据处理
0. 文件FTP: 将各个分行的源业务系统(NLNS、SBS、NACS)的以预定的文件格式以FTP方式通过中行网络传输到QUICK WIN项目系统的ETL服务器
1. 文件注册:0中FTP的源数据文件,经过解压缩后,必须在QUICK WIN项目系统中注册,只有经过文件注册过程后QUICK WIN项目系统才能确认“那些分行的源数据” 已经正确到达,ETL系统就可以相应的处理流程。
2. 数据清洗:从各分行FTP来的源数据文件,可能存在非法数据或冗余数据或者数据规则标准不统一,而且文件格式上也不能被QUICK WIN项目的ETL过程立即使用,因此必须对数据文件进行数据清洗(删除非法、冗余数据、统一数据规则标准、转换成QUICK WIN项目的ETL过程能“加载”处理的文件格式)。
3. 数据加载:将清洗后的数据(文件格式)通过SQL LOADER加载到ORACLE数据库相应的数据库表中。
4. ODS数据合并:将各个分行的相同类型的源业务系统数据合并到ORACLE数据库中同一张数据表中。
5. LDM数据加工:面向业务生产数据(ODS数据库表中的数据)根据“QUICK WIN分析模型”将数据转换、加工成面向分析主题的“分析型数据”。
6. PI加工:根据业务需求、业务规则和分析模型,从LDM数据表中加工出QUICK WIN所需的PI。
7. 报表加工:根据业务需求、业务规则和分析模型,从LDM数据表和PI表中中加工出QUICK WIN所需的报表。
8. ETL调度程序:调度ETL加工各个过程的运行。
9. 监控程序:监控ETL过程的运行状态(加工进度、加工效率、成功、警告、错误等)信息,及时向系统的运行维护人员报告系统运行状态。

作业步(ETL_Step)的流程和依存关系。
1) 清洗类型的Job的运行依赖于相应下传文件的状态,必须是在下传文件检查及登记后才能进行清洗Job的调度。
2) ODS层加载类型Job的运行依赖于相应的清洁文件是否由清洗程序生成,即相应的清洗Job是否正确运行完成。
3) 从ODS到LDM的数据转换依赖ODS层的相关数据是否齐备,即相应的加载Job是否正确运行完成。
4) PI加工的进行依赖LDM层数据,即相应的转换Job是否正确运行完成。
5) 根据数据依赖关系,分区域进行作业调度,各区域之间的ETL处理可以并行处理。



作业调度方式
1。。。。。。。
2. 调度策略
采取条件驱动的策略来进行Job的调度,Job一满足驱动条件便开始运行。针对快速见效系统的ETL情况,定义四种类型的驱动条件:
1) 前导Job驱动
ETL过程中各个操作需按一定次序进行,前导Job表示ETL过程中先要进行处理的Job,Job的前导Job可以有多个

2) 下传文件驱动
当下传文件未下传完毕时,下传文件清洗不能进行,因此,下传文件通常作为清洗文件的驱动条件,当系统检测到下传文件已下传并正确后,便可进行相应的清洗,驱动Job执行的下传文件可能有多个, 
3) 时间驱动
当到达某个时点时,Job便开始运行

4) 上述三种条件综合驱动
要上述三种情况至少两种均满足,Job才能运行。


3. Job的并发设计
每个Job只要满足了驱动关系后,便开始以后台方式运行。这样便实现了不同区域和同一区域的Job的最大限度的并行。考虑系统资源的情况,可以事先设定最大并行数。

4. 并发冲突设计
当并行跑的Job都需要共同使用同一资源的时候,会产生资源占用的冲突,ETL过程中通常的冲突, 用令牌的方式来避免冲突,只有获得令牌的JOB才能跑,否则等待令牌释放。

定义数据转换流程中检查点和核对点 

1) 下传文件,下传文件与源系统数据进行比较检查,核对下传数据准确性。
2) 清洁文件,将清洁文件与下传文件进行比较检查,从而可判断清洗处理过程的正确性。
3) ODS库表,将ODS库表中的数据与下传文件中数据进行比较检查,从而可判断加载处理过程的正确性。
4) LDM库表,将LDM库表中的数据与ODS库表中数据进行比较检查,从而可判断转换处理过程的正确性。
5) PI值,将PI值与LDM层相关的库表进行比较检查,从而可判断PI计算处理过程的正确性。

日志信息设计
1) 调度过程日志。以文件的方式存在,用于记录Job调度中的主要过程和异常信息,如调度开始、调度完成、数据库操作异常和读写文件异常。
2) Job执行日志。数据库表方式存在,给Job的调度提供必要的信息,是Job调度策略计算的依据,调度模块和Job之间的接口之一。
3) Job详细事件日志。数据库表方式存在,记录ETL处理过程中的详细信息,如清洗记录成功条数、失败条数或数据库操作情况(INSERT\UPDATE\DELETE)。


给出异常处理设计:所有被拒绝的行、可接受的错误数以及合理退出的方式 

通知设计:重要信息(成功/失败)的通知
1. 成功退出
1) 分段提交方式,当分段提交的当次任务都正确完成,即Job运行状态临时表中登记的作业状态全部为完成时,退出ETL调度。
2) 自动提交方式,当当期所有的任务都正确完成,即Job运行状态表中登记的作业状态全部为完成时,退出ETL调度。

2. 失败退出
1) 关键作业异常,关键作业运行异常时,影响剩下的作业不能运行时,则退出ETL调度。
2) 超过ETL时限,当超过预先设定的ETL 时限时,退出ETL调度。
3) 数据库异常,当不能正常操作数据库时,退出ETL调度。
4) 操作系统异常,当发生操作系统异常,导致程序不能正常运行,如文件系统异常导致读写文件错时,需要退出ETL调度。
5) 手工退出,需要人为干预ETL调度的时候,能以手工操作的方式退出ETL调度。

给出各个阶段号说明 给出表格:表6-N ETL_Step编号表(ETL控制参数)

ETL 调度优先级别 
按Job驱动关系进行Job的调度,前导Job优先于后续Job。

ETl流程及调度模块说明 
模块概要说明
模块概要说明(总体层次)
模块名称 模块编号 开发工具/环境 模块功能说明 备注
作业调度 J01 AIX+Shell+C ETL调度主模块,负责整个ETL过程的调度处理。 维护员
作业管理 J02 EXECL+BRIO+C 定义作业步对应的实际ETL处理过程,生成作业编号,定义作业类型和作业的驱动条件。 管理员
异常重跑 J03 AIX+Shell+C 当ETL运行出现异常时,提供断点重跑机制。 维护员
参数管理 J04 Brio EIS 调度系统的公共参数:期数、进程数、数据日期、本期开始日期和本期结束日期进行设置和修改。 管理员
日志管理 J05 BrioSDK,EIS 包括调度过程日志、Job执行日志和Job详细事件日志的查询和删除。 管理员

模块概要说明(明细层次)
模块名称 模块编号 模块类型 开发环境 模块功能说明 备注
CTLINIT J01_01 作业调度 AIX,PROC 检查输入参数和驱动关系,初始化资源令牌状态/Job运行状态/下传文件状态。 
UNCOMPR J01_02 作业调度 AIX,PROC,SHELL 检测下传目录下的压缩/打包的文件,并将这些文件解压缩/展开,之后移动到非下传目录下。 
FILEREG J01_03 作业调度 AIX,PROC 根据下传文件控制表 检查各文件头的控制信息,将检查结果记录在下传文件控制表中。 
CHKREGJOB J01_04 作业调度 AIX,PROC 扫描Job运行状态(或临时)表看所有(或本次提交需要完成的)Job是否完成,根据Job执行日志信息登记完成的Job(在Job运行状态表登记)。 
CALREGJOB J01_05 作业调度 AIX,PROC 根据Job运行状态/下传文件状态/ Job驱动关系计算可已运行的Job,并在Job运行状态表中将这些Job登记为“就绪“状态。 
JOBRUN J01_06 作业调度 AIX,PROC,SHELL 依据当前进程数/资源令牌占用清况发出调度一个Job运行的命令,并登记Job运行状态为“正运行“。 
CRTJOB J02_01 作业管理 EXECL 生成作业列表和作业对应的驱动条件。 
CHKJOB J02_02 作业管理 PROC 检查作业列表的合法性,包括驱动关系的合理性检查。 
RERUN J03_01 异常重跑 AIX,PROC,SHELL 当ETL运行出现异常时,提供断点重跑机制。 
PARADM J04_01 参数管理 BRIO EIS,SQLPLUS,SHELL 调度系统的公共参数:期数、进程数、数据日期、本期开始日期和本期结束日期进行设置、修改及查询。 
LOGADM J05_01 日志管理 BRIO EIS,SQLPLUS 包括调度过程日志、Job执行日志和Job详细事件日志的查询和删除。 




ETL流程及调度的模块设计说明表(设计阶段) 
见附件《ETL调度详细设计.doc》
给出ETL流程及调度的程序设计说明表(实现阶段):参见 “1.15节”

1.2 ETL监控(ETL Monitor) (PSP)
ETL监控结构设计, 

ETL监控主要功能概述
1) ETL调度检测下传文件状态,并登记到下传文件状态表中,通过Hyperion Client设计对下传文件状态查询的BQY文档,发布到Hyperion Performance Suite 8 Server,再通过Http或直接通过ODBC进行BQY查询来获取下传文件状态,从而实现了文件传输监控功能。
2) 当某个区域的某些文件清洗完成时,ETL调度在Job运行状态表中登记该区域相应清洗Job的状态(异常或完成);当文件加载、转换或加工完成时,ETL调度同样方式在Job运行状态表中登记相应Job的状态,通过设计对Job运行状态查询的BQY,并发布到Hyperion Performance Suite 8 Server,再通过Http或直接通过ODBC进行BQY查询来获取Job的当前状态,从而实现了加载、转换和加工的监控功能。
3) 对Job的执行情况(开始时间、结束时间)的监控通过设计查询Job执行日志表的BQY文档来实现,对Job的详细事件的监控通过设计查询Job详细事件日志表的BQY来实现。
4) 对调度的整体情况的监控,则可直接通过TELNET查看调度过程日志,便能知道调度的完成情况和异常情况(数据库错、参数非法或操作系统错等)。

? ETL监控模块说明: 
? ETL监控的模块概要说明
模块概要说明(明细层次)
模块名称 模块编号 模块类型 开发环境 模块功能说明 备注
FILEMON J06_01 ETL监控 BRIO,EIS 监控各个区域的下传文件传输情况和文件状态。 
JOBMON J06_02 ETL监控 BRIO,EIS 对各个区域的清洗、加载、转换和加工过程的完成情况进行监控。 
EVTMON J06_03 ETL监控 BRIO,EIS 对JOB的执行开始时间、结束时间和JOB运行过程中的详细操作情况进行实时监控。 
MAINMON J06_04 ETL监控 BRIO,EIS 对调度的整体情况的监控,包括调度成功完成、异常退出、数据库错、参数情况和操作系统出错进行监控。

转载于:https://www.cnblogs.com/linboaixuzhiling/p/3207415.html

相关文章:

python与anaconda区别_anaconda和python的区别是什么?

anaconda和python的区别是什么?Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。使用python需要下载安装执行python代码的环境。官方的Python包含了核心的模块和库,为了完成其他任务,需要安装其他的模块和库。Anaconda 是Py…

opencv 1 图像载入、显示和输出

三个函数 imread() namedWindow() inshow()1. imread 函数原型: Mat imread(const string& filename, int flags 1 );参数解析: const string& finename 将要载入的图片路径名。 Windows操作系统下面支持如下类型的图片: Window…

英文申请书范例

Dear Sir or Madam, I am applying for the position of Executive Assistant as advertised in the Recruitment Daily last evening. 我来应聘昨天晚上在每日招聘上发布的行政助理一职。 I have over five years of experience within this role during which time I have de…

c++ ofstream使用方法

ofstream是从内存到硬盘&#xff0c;ifstream是从硬盘到内存&#xff0c;流缓冲即是内存空间。 插入器<< : 向流输出数据。 cout << "test!" << endl; 将字符串输出到标准输出流。 析取器>> : 从流中输入数据 cin >> x; 从标准输入流…

JAVA 继承内存模型_Java内存模型

JVM的组成类加载器(classloader)执行引擎(execution engine)运行时数据区域(runtime data area)对于Java程序员来说&#xff0c;在虚拟机自动内存管理机制下&#xff0c;不再需要像C/C程序开发程序员这样为内一个new 操作去写对应的delete/free操作&#xff0c;不容易出现内存泄…

Error: The INF file contains Unicode characters that could not be converted correctly

昨天第一次为自己的windows mobile程序制作CAB安装包&#xff0c;但是在生成过程中&#xff0c;却出现了这样一个问题&#xff1a;编译完成 -- 0 个错误&#xff0c;0 个警告time -> G:\WindowsMobile\time\time\bin\Debug\time.exe------ 正在启动项目“SmartDeviceCab1”的…

嵌入式开发板设置无密码登录

本次配置需要修改的ssh登录的配置文件 vi /etc/ssh/sshd_config允许root用户远程登录 设置PermitRootLogin参数值为yes #LoginGraceTime 2m PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #MaxSessions 10允许无密码登录 设置PermitEmptyPasswords 参数值修改为ye…

2012/08/27 夜

杂记于2012/08/27 唉&#xff0c;&#xff0c;最近公司在搬家&#xff0c;一直没有时间来看技术方面的资料&#xff0c;丫的上个星期天还接到第二天凌晨3点钟呢。。。唉。。有点受不了啊。。这苦逼的运维工作&#xff0c;&#xff0c;&#xff0c;呵&#xff0c;来说说这其中让…

存储过程和函数 PROCEDURE FUNCTION

SQL语句执行的时候&#xff0c;要首先编译&#xff0c;然后在被执行。在大型数据库系统中&#xff0c;为了提高效率&#xff0c;将为了完成特定功能的SQL语句集进行编译优化后&#xff0c;存储在数据库服务器中&#xff0c;用户通过指定存储过程的名字来调用执行。 具体而言&am…

Android——学习:线性布局权重分配

LinearLayout在Android中被广泛使用&#xff0c;LinearLayout有一个比较重要的属性——android:layout_weight。按照字面理解就是该控件的权重&#xff0c;这个值默认是 零&#xff08;0&#xff09;。 举个例子&#xff1a; 在下图中&#xff0c;整个界面是一个Linearlayout&a…

java bean配置文件_Spring中多配置文件及引用其他bean的方式

Spring多配置文件有什么好处&#xff1f;按照目的、功能去拆分配置文件&#xff0c;可以提高配置文件的可读性与维护性&#xff0c;如将配置事务管理、数据源等少改动的配置与配置bean单独分开。Spring读取配置文件的几种方式&#xff1a;1、使用Spring自身提供的ApplicationCo…

putty 串口登录开发板

安装putty 多个平台均可以安装putty pc端配置 使用串口线连接开发板 ls /dev 查看是否出现类似于ttyUSBx的文件 sudo putty 弹出页面&#xff0c;选择Serial Serial line填写/dev/ttyUSBx Speed填写115200(根据不同开发板&#xff0c;选择不同参数) 依次点击Load&#xff0…

win7下解决Android SDK Manger慢

2019独角兽企业重金招聘Python工程师标准>>> 今天准备做个Android小程序&#xff0c;以前配置的环境太久了&#xff0c;于是想配最新&#xff0c;但是花了大半天的时间遇到各种问题&#xff0c;最终还是配置好了。 1、首先修改C:\Windows\System32\drivers\etc\host…

Linux 工具进阶

参考网址 https://linuxtools-rst.readthedocs.io/zh_CN/latest/advance/index.html 转载于:https://www.cnblogs.com/artesian0526/p/9712258.html

ASP.NET MVC:利用ASP.NET MVC4的IBundleTransform集成LESS

背景 LESS确实不错&#xff0c;只是每次写完LESS都要手工编译一下有点麻烦&#xff08;VS插件一直没有安装好&#xff09;&#xff0c;昨天在官方看到了如何用IBundleTransform集成LESS&#xff0c;今天就记录一下。 参考资料&#xff1a;http://www.asp.net/mvc/tutorials/mvc…

java锁屏_JAVA设置桌面不锁屏设置

//下面是编译命令// javac -encoding utf-8 Main.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;public class Main extends WindowAdapter {JLabel label null;public Main() {JFrame jFrame new JFrame("保持打开就不会锁屏");Container …

网线直连开发板

pc 端配置 点击pc端无线链接图标编辑链接以太网编辑IPv4设置方法&#xff1a;与其他计算机共享根据putty获取的动态ip使用ssh登录 解决 ip 无法登录问题 设置 pc 端 ip 和开发板 ip 在同一个网段 比如开发板 ip 是 10.42.0.123 可以设置自己机器的 ip 为 10.42.0.11 sudo i…

linux系统中指定端口连接数限制

限制22端口只能有两个连接 [code] iptables -P INPUT DROP iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT iptables -A INPUT -p tcp --dport 22 -j ACCEPT [/code] 在此…

PHP-错误处理

错误处理 一、错误的分类 1、语法错误&#xff1a; 程序没法运行&#xff0c;直接提示语法错误。 2、运行时错误&#xff1a; 只有程序运行到某行&#xff0c;或在某些特定的情形下运行才会发生的错误。 3、逻辑错误&#xff1a; 程序从头到尾运行都没有发生&#xff08;并提示…

C语言的变量的内存分配

今晚看了人家写的一个关于C语言内存分配的帖子&#xff0c;发现真是自己想找的&#xff0c;于是乎就收藏了。。。 先看一下两段代码&#xff1a; char* toStr() {char *s "abcdefghijkl";return s; } int main() {cout << toStr() << endl;return 0; }…

java打包_java工程打包(方式一)

1、新建工程myprojectpackage cn.zj;public class TestMain {public static void main(String[] args) {System.out.println("Hello World!");}}2、右击Java工程选择Export—>选择JAR file—>Next3、选择要打包的文件&#xff0c;不需要的文件不必打包&#xf…

s32v 开发板安装 apex 驱动

安装驱动 首先要获取到 apex.ko 文件&#xff0c;这个应该是硬件厂商提供&#xff0c;执行下面命令安装 首先需要给 apex.so 文件加上可执行权限 insmod apex.ko查看是否安装成功 执行下面命令&#xff0c;查看是否安装成功&#xff0c;如果安装成功&#xff0c;执行的结果中…

android常见错误与问题

1. Unable to start activity ComponentInfo 原因有很多种&#xff0c;我碰到一种&#xff1a; 可能是当前Activity里引用的View&#xff0c;并不存在于绑定的Layout里&#xff0c;而是在其他的Layout里&#xff0c;在Copy代码的时候&#xff0c;常会发生这种问题。

链式前向星(模板)

一种非常厉害的存图的数据结构&#xff01; 本质&#xff1a;模拟链表的操作&#xff0c;链式存储图。&#xff08;2&#xff0c;3都可以模拟链表的操作&#xff0c;替代链表&#xff09; &#xff08;1&#xff09;二维数组存图&#xff1a;Map[x][y]&#xff0c;一维代表出发…

tar 打包问题

项目中使用到 tar 文件&#xff0c;同一个 tar 文件解压之后在压缩&#xff0c;在程序执行的时候不能使用了 原因是 tar 对文件名长度有限制&#xff0c;当文件名过程的时候&#xff0c;使用 --formatustar 进行压缩

QT webkit学习笔记(2)

五、QWebDataBase Class介绍 QWebDataBase提供了对基于JavaScript创建的HTML 5数据库。新一代的HTML 5标准也提供对基于javaScript SQL数据库访问的支持。QWebDataBase就是这些数据库的C接口。关于HTML 5的详情&#xff0c;可以参见HTML 5 Draft Standard. 六、QWebHistory Cla…

java 数组越界异常_数组越界异常 求解决!!!

源自&#xff1a;4-3 滚动状态判断与处理数组越界异常 求解决&#xff01;&#xff01;&#xff01;package com.example.imooc;import java.io.BufferedInputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.ne…

WPF外包公司—北京动点软件WPF最新的电子书整理打包下载

最近看到很多朋友寻找以前的WPF电子书&#xff0c;其实这些书在书店目前是很难买到了&#xff0c;不过还是很经典的&#xff0c;希望大家收藏~ WPF揭秘 http://download.csdn.net/detail/ping_vip/3935100 WPF经典教程 http://kiccp.sinaapp.com/store/info/83 WPF程序设计指南…

java后端判断用户是否关注公众号

/*** 判断用户是否关注了公众号* param openid* return*/ public static boolean judgeIsFollow(String openid){int subscribe 0; // String url "https://api.weixin.qq.com/cgi-bin/user/info?access_token"token"&openid"openid"&a…

QtCreator动态编译jsoncpp完美支持x86和arm平台

如果是做嵌入式开发。 在Qt下支持JSon最好的办法&#xff0c;可能不是采用qjson这个库。QJson这个库的实例只提供了x86环境下的编译方法。 Installing QJson-------------- QJson requires:- Qt 4.0 or greater- cmake 2.6 or greater For Unix/Linux/Mac: mkdir build cd b…