DS Transformer Stage 之 字段逻辑运算及判断

浏览: 2796

前言:

本系列会参照浅析 Transformer Stage 在 DataStage 作业中的用法及功能实现中对DS 中 Transformer Stage 在工作中作用及相应的案例。

环境:

版本:IBM InfoSphere DataStage V11.3.1

操作系统:linux redhat 6.4

数据库版本:Oracle 11.2.0.4.0

Transformer Stage 组件介绍

Transformer Stage 在 DataStage 中是一个重要的,功能强大的组件,在 ETL 过程中,它承担“T”( 即数据的转化 ) 的责任。在 Transformer Stage 中可以指定数据的来源和目的地,匹配对应输入字段和输出字段,并指定转换规则和约束条件。

数据构造:

=================================================================创建源数据表=======================================================================
CREATE TABLE EMP (
EMPNO NUMBER( 8 ),
ENAME VARCHAR2( 20 ),
HIREDATE DATE,
SAL NUMBER( 7 ,2 ),
DEPTNO NUMBER( 6 ) );

CREATE TABLE DEPT (
DEPTNO NUMBER( 6 ),
DNAME VARCHAR2( 20 ),
DNAMEINFO VARCHAR2 (20 ),
AREANO NUMBER( 6 ),
START_DATE DATE,
END_DATE DATE);

=================================================================创建目标表=========================================================================

create table T_emp_dept as
select empno,
ename,
hiredate,
sal,
t.deptno,
dname,
dnameinfo,
areano,
start_date,
end_date,
' ' FLAG_NO

from emp p, dept t
where p.deptno = t.deptno --100000
and p.hiredate BETWEEN T.START_DATE AND T.END_DATE
and 1=2


=================================================================加载数据===========================================================================

INSERT INTO EMP
SELECT ROWNUM ,
'Name'|| ROWNUM ,
SYSDATE+ ROWNUM /100 ,
FLOOR(DBMS_RANDOM.VALUE( 7500 ,10000 )),
FLOOR(DBMS_RANDOM.VALUE( 1 ,50 ))
FROM SRC
WHERE ROWNUM <= 100000 ;
COMMIT

--想插入多少行,就修改这个ROWNUM小于等于的值,在200000内
INSERT INTO DEPT
SELECT ROWNUM , 'Dname' ||ROWNUM , 'dnameinfo'|| ROWNUM ,FLOOR (DBMS_RANDOM.VALUE( 1, 20 )),SYSDATE - ROWNUM /100,SYSDATE + ROWNUM /100
FROM SRC
WHERE ROWNUM <= 500000 ;

COMMIT;

实现内容

获取员工入职日期在相应部门表里面有效时间内,实现脚本如下:

select empno,
ename,
hiredate,
sal,
t.deptno,
dname,
dnameinfo,
areano,
start_date,
end_date,
' ' FLAG_NO
from emp p, dept t
where p.deptno = t.deptno --100000
and p.hiredate BETWEEN T.START_DATE AND T.END_DATE


===================================================DS里面转换成,我们可以增加一个字段flag_no,将满足条件的置为1 不满足的置为0,然后在后面脚本做过滤========
select *
from (select empno,
ename,
hiredate,
sal,
t.deptno,
dname,
dnameinfo,
areano,
start_date,
end_date,
case
when p.hiredate >= T.START_DATE AND p.hiredate <= T.END_DATE then
1
else
0
end flag_no

from emp p, dept t
where p.deptno = t.deptno(+))
where flag_no = 1



开发作业

具体作业如附件

Clipboard Image.png

逻辑运算表达式

If Lnk_emp_dept.HIREDATE >= Lnk_emp_dept.START_DATE AND Lnk_emp_dept.HIREDATE <= Lnk_emp_dept.END_DATE Then 1 Else 0

字段逻辑运算表达式

Clipboard Image.png

数据验证:

Clipboard Image.png

总结:

思路:先将两个表关联,把字段都放到同一个控件当中,然后利用 Transformer Stage 字段逻辑运算及判断去做比较。

推荐 1
本文由 我是最优雅的杀手,不杀人专杀狗 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册