目前在做的项目涉及到了增量抽取,就增量抽取时间戳的设定做点总结。
项目中涉及到了OLTP库(DB2)、Informatica这方面建了三个库,分别为CDS、ODS、DW,这三个库均为Oracle数据库。
OLTP库中的表均有自更新时间(self_update_time)字段,标识下级节点上报到OLTP库节点的时间;CDS、ODS、DW三层库也均有ETL_LOADTIME字段,分别标识数据到本库的时间戳。
CDS库只存放每次增量的快照,ODS存有历史数据(相当于OLTP的拷贝),DW库就不用说了 。
在OLTP->CDS抽取和ODS->DW抽取时均要要用时间截取增量数据,对于这块时间的使用讨论如下:
1、第一种方式,同样也是最简单、最经典的方式。使用自建变量string($$Vtime)和系统变量($$SessStartTime)
OLTP->CDS:
在SQ组件的sql覆盖中加where字句: where self_update_time>=to_date('$$Vtime','yyyy-mm-dd hh24:mi:ss')
and self_update_time<to_date('$$SessStartTime','yyyy-mm-dd hh24:mi:ss')
(注:这块在运行会话时有可能会报错,是因为此处字符转换格式的问题,字符转换的格式具体要依库而定,帮助文档里有常用库的转换格式。也可在日志中查找错误信息,错误信息对转换错的字符格式有显示,可根据其更改成相应格式即可)
变量$$Vtime 在此使用过之后,在后续的Exptrans组件中更改变量的值,以备下次抽取使用。更改表达式如下:
SETVARIABLE ($$VTIME,to_char( SESSSTARTTIME,'yyyymmddhh24miss' ))