ETL DataStage实现V12

3、添加、删除、修改JOB的调度,对,这里就是大名鼎鼎的调度,可以在这里实现,可以按照不同时间调度。对了,本人偶尔发现的小秘密,一个JOB可以加多个调度,而且都起作用的(是不是大家都知道了?)。可惜它的调度方式只能满足一般的应用,一些复杂的调度,就得我们自己动手了。唉!它咋不能做的再强点呢?

3、删除JOB,在Designer中也是可以的。

其实有些功能,不只是在一个组件中有,在其他组件中也是可以用的。

2.3    JOB注意事项

一些初学时的注意事项:

1、用文件或者数据库做源时,做好后最好先“View Data”一下,然后再编译、运行。这是出错最多的地方

2、运行完之后,一定要在director中看一下日志。大部分错误都是由于数据库配置或者文件名称不对,也可能是定义的列与实际的列不是完全匹配等引起的。其实DS的报错和其他程序的报错差不多,大多数是可以看明白是哪些地方,为什么报错的

3Server Job对列的定义要求不严,类型长度短点长点都无所谓,而Parallel Job长度必须正确,定义的短了,就会截断数据;如果中间用到Active Stage,在Active Stage中源和目标长度必须一样,否则会报警告。

4、如果不知道哪个Stage该怎么用,DS Basic怎么用,可以查看安装客户端时自带的PDF帮助,这个应该是最详细的,在网上很难找到这类的帮助。

第3章    ETL设计

ETL的设计是个庞大的工程,不同的项目设计差别很大。对于特别简单或者特别复杂的项目,在此不做讨论,只讨论一些常见的项目中利用DS实现ETL的设计。

ETL一般需要考虑的问题有:接口数据的获取,频率,数据校验,接口间及后续处理的关联关系,入库方式;优先级,顺序乱序执行,出错处理,重传处理,调度监控等。除了这些问题,可能还会有个别数据不是格式化数据,文件格式DS无法识别,文件标识的时间与实际数据数据时间不一致等问题。

3.1    设计原则

3.1.1    简单

说起来简单,做起来难,呵呵。一直以来都追求简单,无奈做出来的却是越来越复杂,越来越难以让人明白。不过,始终相信简单就是好的,以此做为设计和开发的第一原则。

3.1.2    全面考滤,重点实现

设计之前,需要全面考滤ETL要实现的各种功能。包括源数据都有哪些,如何得到,数据是如何存储的,如何调度,出错如何处理,过了期的数据如何处理,整个ETL过程如何监控等。所有这些项下面都有各种各样的小项,每个小项又是千变万化,不可能每项都能想到,即使能想到,也不可能都能设计时考滤进去。所以设计要把大项尽可能的考滤进去,可以用比较容易扩展的设计,包括小项80%的功能。

3.1.3    充分利用各种资源

ETL中涉及到好多系统,用到很多技术,ETL的设计就是要充分利用已有资源的优势(包括人员,操作系统,DS,数据库等),综合运用,达到ETL和其他系统最好的结合。这个可能要求对各种资源了解的比较清楚。

3.1.4    层次分明

稍复杂的ETL,涉及到的面就比较多,除需要考滤实现的难易程度,性能,实现成本,还得考滤程序的稳定性和可扩展性。层次分明将是其实现的一个重要保证

3.1.5    规范严明

开始时规范可能定的不够详细,不是很准确,但是一定得有,而且相关人员需要知道为什么要这么定。这些规范可能包括ShellDS JOB,存储过程如何命名如何注释等。也许按照规范可能开始时比较费事,而且看不到任何的好处,等做的多了,时间长了,只要看看规范或者是程序的注释部分,就能知道程序实现了什么功能,如何实现,而不用一行行的看代码。

3.2    总体架构

这里只是ETL的架构,而不是整个数据仓库的架构。主要的架构包括以下部分。这个图只是表示大概部分,监控可以完成整个ETL的监控,或者是对部分重要任务的监控。


3.3    调度

ETL,堆在一块不运行也没什么用,如何能让它正确的运行起来呢?那就是调度了。

调度是ETL的灵魂。ETL调度的设计,决定了ETL所能实现的功能以及灵活性,也决定了其他ETL部分工作量的大小。

调度涉及到的问题主要有优先级,顺序乱序执行,出错处理,重传处理,调度监控。

优先级就是任务之间执行的先后紧急顺序,将DS Job分为几个优先级,同一优先级或者不同优先级的JOB间有依赖、互斥等关系。

顺序乱序执行,顺序就是按照时间的先后顺序加载,而乱序则可以不按照时间顺序执行,主要是一些高频率JOB,异常情况不适合人工处理。

        出错处理、重传处理,就是要求整个ETL支持重做。

        调度监控,对ETL的处理结果和重要步骤有一个记录,有问题时发邮件或者短信通知相关负责人。

如果这些都不太复杂,可以用sequence Job,在调度的JOB中用Job Control自编程的方式实现部分任务执行日志的记录。对于很复杂的,sequence Job难以实现的,可以自己写调度程序实现(如Shell, Python , Java)。

3.4    E T L

这部分是整个ETL的主要部分,无论是工作量,还是复杂程度,都是最大的。这部分的实现很大部分与源数据,源数据与目标数据数据的对应有很大关系。如果需要做的很简单,完全可以一个JOB搞定,没有必要分的很细。如果比较复杂,可能需要分为E T L三个步骤或者更多,DS的设计也会在项目中经建目录的方式将其分开,各步骤生成的文件也将以不同的命名方式放在ETL服务器不同的目录下。

这部分的处理,尽早将没用的数据过滤,不正确的格式转换等,使得后来的处理尽量少,尽量简单。下面有些具体的处理方式,可以在Extract时做,也可以在Transform中做,load时就尽量少做些与入库不相关的操作了。执行的顺序可以是E T L,也可以是E L T,或者是E T L T等。但是做为一个整体,最好有一致的方式处理,而不是不同的任务处理方式千变万化。

这部分正是DS的强项。

3.4.1    Extract

就是从数据源获取数据。在数据抽取时,尽量将没用的数据,不对的数据在抽取时过滤掉,格式等不符合的转换掉。如果源系统对自己的性能要求比较高,则用对源系统打扰尽量少的方式获取,如db2exportoracleexp等方式,然后再做处理。

涉及到的功能主要有:

数据范围过滤,抽取表中所有数据或者根据时间抽取相应数据

字段过滤,只抽取需要的字段,不需要的就不用管

条件过滤,根据抽取条件抽取数据

去除回车换行,如果已抽取成文件,字段中的回车换行将很难去掉

除此之外,还有

格式转换,特别是时间格式,最好是做成统一格式

赋缺省值,对于空的部分数据,根据需要赋一个缺省值

类型变换,如将number类型转换为varchar类型

代码转换,就是将在不同源系统中同一含义不同的编码表示转换成统一的编码表示,如将代表性别”男”的‘N’‘0’转换成‘M’

数值转换,就是度量单位的转换

3.4.2    Transform

就是将抽取的数据,进行一定的处理,生成目标表所需要的格式,内容。

涉及到的处理主要有:

字段合并、拆分:字段合并就是将多个字段合并成一个字段;拆分就是将一个字段拆成多个字段

数据翻译,就是不同的数据集进行关联,从另一个数据集中得到所需要的部分数据

数据聚合,就是做一些sum,max等操作

以下文章点击率最高

Loading…

     

如果这文章对你有帮助,请扫左上角微信支付-支付宝,给于打赏,以助博客运营

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注