前言:
本系列会参照浅析 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
开发作业
具体作业如附件
逻辑运算表达式
If Lnk_emp_dept.HIREDATE >= Lnk_emp_dept.START_DATE AND Lnk_emp_dept.HIREDATE <= Lnk_emp_dept.END_DATE Then 1 Else 0
字段逻辑运算表达式
数据验证:
总结:
思路:先将两个表关联,把字段都放到同一个控件当中,然后利用 Transformer Stage 字段逻辑运算及判断去做比较。