很久没有来这里了,实在有点对不起大家,这段时间都太忙了,有不少网友找我联系都没时间去回,实在抱歉!今天想跟大家一起学习下DataStage中如何自定义Routines以及使用自定义的Routines。
其中在google里也可以收到类似的例子,而且比我也讲得详细,大家有兴趣也可以去搜下相关资料。这里我仅把我做的一个例子分享给大家,抛砖引玉吧!
在DataStage中Routines是一个非常强大的内置函数库(个人看法),其中包括大量内置函数可供我们使用,对于其中的函数个人也了解不多,更多地是遇到相关问题查找其帮助文档。当然再多的函数也有可能满足不了自身的业务需求,因此学会自定义一些函数还是有必要的。费话少说,下面来看看我是怎样自定义Routines,然后将其用于转换过程。
1。
既然Rountines是个函数库,那我们自定义的当然就只是它其中的一个函数而已,想到函数那就简单了:
函数名:myTest1
参数(整个最简单的):inputparameter
返回值:暂时不用管,等会儿再吹!:)
函数功能:当读出某字段的值为1时,将该字段改为2;值为空或null时,将其改为inputparameter is blank!!;值不为空也不为1时,将其改为inputparameter is not 1!!(哈哈,没见过这么垃圾的功能吧!我自己都没见过,呵呵,不过我是只注重过程不注重结果的人!)
2。
2.1 新建一个Routines的目录
在Designer中右键Routines,如上图,新建一个放自定义Routines的目录,如果你不愿意,我也没办法,个人习惯而已!
2.2 新建一个Server Routine
在刚刚建的那个Routine目录下点右键,新建一个自己的Routine,在弹出的对话框中填入Routine name,Type(表示你要在哪个stage中用自定义的这个Routine),Category(表示该Routine所在的目录,如果在第一步中没有建该目录就不用管了),description(对该Routine的必要描述,你总得让其他人看得懂吧:)) ,如下图:
在Arguments标签页中填入该Routine的参数,在我们这里就是inputparameter
接下来就是最关键的Routine功能的实现,如下图:
这里的实现主要用的是Basic语言,如果你用过VB,那语言上应该没问题。Basic的语法我就不说了,大家可以去google一下,附件是我的代码,非常简单,重点说说代码中以下几个关键点:
IsNull(inputparameter)=1判断输入的inputparameter是否为null,如果发现是null,IsNull()返回1,对Oracle中值为空的字段值,用ds来读是null形式。
Ans是函数默认的返回值,如果要想函数返回某个值,只需将要想返回的值赋于Ans。
Call DSLogInfo()是调用DS中内置的log信息函数,即把信息显示在director中相应的Job运行log里。
2.3 编译,测试自定义的Routine
2.4 测试成功后,就要开始使用我们定义的Routine了
首先做一个ServerJob,Job的主要功能完成从源(Oracle数据库中某个表)到目标(某个文件)的抽取和转换过程,如下图:
具体Oracle_OCI_0 和Sequential_File_1的配置就不用多讲了,大家可以参考我写的<DataStage实践之简单入门>,如果还有问题可以Q我,这里主要说下在Transformer_2中如何使用自定义的Routine:
打开Transformer_2 Stage,双击Derivation区域中要对某个字段使用Routine的那个区域,如下图(双击Derivation所在列的红色区域,即Column Name为FlAG):
双击后出现一个文本框:
再右键该文本框,选DS Routine....,再弹出框中选中你自定义的Routine:
再双击%inputparameter%,使其为选中状态,右键选中区域,在选择Input Column...后选择
Flag字段,如下图:
这一步其中就是将Flag作为参数赋予自定义的Routine(myTest1),讲到这里大家都清楚了吧:),编译,运行,OK!
你们试试吧!!!
总结:其实自定义Routines的难点并不在于如何使用,而在于如何写一个效率高而又满足我们业务需求的Code,所以学会写才是问题的关键。祝你们好运!!
本文出自 “JohnWey程序员日记” 博客,转载请与作者联系!