datastage 相关笔记

在load的时候去掉sequentialfile的header和footer

今天在论坛看到的方法,先记录下来:

方法一:

在sequentialfilestage中有个属性可以ignore第一行。对于footer,如果footer使用了与正文不同的格式,可以用使用transformerstage和@INROWNUMstage来将footer去掉。

方法二:

在sequentialfile的filteroption中使用sed-e'$d'-e'1d'来讲header和footer去掉。

方法三:

写个beforejobsubroutine,可以先对这个文件做各种处理,不过我想也是subroutine中调用DSExecutesed-e'$d'-e'1d'。当然Basic中也有专门对sequentialfile处理的函数。

posted@2007-08-1319:37羽翼渐丰阅读(163)|评论(0)|编辑收藏

posted@2007-08-0815:37羽翼渐丰阅读(406)|评论(0)|编辑收藏

trim会drop掉记录

当一条记录过来,某个字段为空,而在transformer中又对该字段trim了,由于该字段为空,不能trim,所以DataStage会认为这是个错误,从而把这个记录drop了,这与实际业务不符合,非主键字段为空并不能就把这条记录drop了。我们可以通过写一个判断来解决该问题:ifLK_1.EMAIL<>''thentrim(LK_1.EMAIL)elseLK_1.EMAIL

posted@2007-08-0221:01羽翼渐丰阅读(147)|评论(0)|编辑收藏

DataStage中可以执行routine,命令行以控制的地方

1before/afterjob和before/afterstage,可以执行shell,命令行以及一些DataStageAPI,如DSJobReport

2jobsequence中有个stage,可以在里面写控制job调度的地方

3每个job的properties中有个jobcontroltab

4命令行可以执行、导入job等,它通过dsjob实现,在DSManager的文档中还讲了有专门的命令行来导入job

5可以编写shell来控制job,对dsjob命令做封装,可以传入参数等。

对于上面这些概念还是很模糊,先记录在此。

posted@2007-08-0219:29羽翼渐丰阅读(288)|评论(0)|编辑收藏

trim全为null的某个字段之后,输出为0

今天又碰到新问题,在transformer中,进去是有很多record,出来之后为0条record,用peek,看了一下,进去的数据的某个字段数据全为null,而在transformer中对此字段trim了,改为不trim就可以了。

posted@2007-08-0215:21羽翼渐丰阅读(211)|评论(0)|编辑收藏

job一直运行,数据不能插入数据库

今天遇到一个问题,job不停的在那里运行,然后link上的数据显示各个环节都是正确的,包括最后插入数据库的link上也显示了数据,但是最后数据库里并没有数据。在Director的log中,日志在从两个源文件把所有数据load出来完之后,日志就死在那里了。

以前这个job是正确的,昨天由于重新load其中一个源文件的元数据,所以出现了上述问题。所以先前以为是由于load的新的源数据有问题,就从此处来找问题的原因,并且认为可能是改了元数据,在其他地方映射的时候有位置不对的地方,所以整了很久。因为以前是好好的,然后又以为是服务器的问题。

这都是定势思维的错误,然后又一急,所以浪费了很多时间,其实很多时候都是这样,出了问题我们不能理性的好好思考。

其实问题很简单:

如果我们按照正常逻辑来分析的话,既然不能读入数据库,肯定是数据不符合数据库对数据的约束,包括主键啊,非空啊,本问题就是由于在stage的不断流转中产生了很多空格,使得最后待插入的数据长度远远大于数据库中定义的字段长度。由于在那里不断reject,所以影响了速度,job一直在那里运行。最后用APT_STRING_PADDER,将其设为0x0(用null代替空格)搞定。

ps:在插入数据库时使用一个reject文件对查错有好处,这样能看到reject是些什么数据,然后就能知道为什么被reject了。

同时我们可以得出如果最后插入数据库时很多数据被reject,但是你并没有用一个reject文件来接收这些reject掉的数据,将使得job基本处于停滞状态。

posted@2007-08-0117:33羽翼渐丰阅读(176)|评论(0)|编辑收藏

DataStageJob重置的三种方法

当一个Job跑到一半终止了要还原,在DSDirector中主要有三种方法来还原:

1Job-----Reset

2Job-----ClearStatusFile

3Job-----CleanupResource

具体细节也不懂,有时间慢慢研究

posted@2007-08-0110:17羽翼渐丰阅读(192)|评论(0)|编辑收藏

Datastage快捷键

DatastageDesiner的快捷键

1关闭某个job<Ctrl+F4>

2<Ctrl+F6>同时打开了两个以上job,在不同的job之间切换。

DatastageDirector的快捷键

posted@2007-07-2417:00羽翼渐丰阅读(180)|评论(0)|编辑收藏

2008-7-2312:06回复