摘要:
本文通过实例让使用者能够更详细的了解 Transformer Stage 组件在 DataStage job
开发中的作用,灵活掌握特定性能的开发技巧。作为 DataStage job 中最为重要的组件,优化并且在使用过程中更好的运用其替代组件,使
...
IBM InfoSphere DataStage 是业界主流的 ETL(Extract, Transform,
Load) 工具,它使用了 Client-Server 架构,在服务器端存储所有的项目和元数据,并支持在多重数据结构中对大量数据进行收集、整合和转换。客户端
DataStage Designer 为整个 ETL 过程提供了一个图形化的开发环境,用户在 Designer
中对 DataStage Job 的进行设计和开发。DataStage 中提供了多个过程处理 Stage
来满足 ETL 的需要,然而 Transformer Stage 在这些 Stage 中用途和使用方法最为广泛,本文将对
Transformer Stage 在 ETL 过程中的用法及实现的功能做出详尽描述。本文中涉及到 IBM
InfoSphere DataStage 为 IBM Information Server 8.0.1
版本。
Transformer Stage 组件介绍
Transformer Stage 在 DataStage 中是一个重要的,功能强大的组件,在 ETL
过程中,它承担“T”( 即数据的转化 ) 的责任。在 Transformer Stage 中可以指定数据的来源和目的地,匹配对应输入字段和输出字段,并指定转换规则和约束条件。
图 1. Transformer Stage 运用在 DataStage
job 中的运用
图 2. Transformer Stage 列映射与字段表达式
Transformer Stage 在 DataStage job
中可实现的功能及案例分析
1. 字段转换
字段转换是 Transformer Stage 中最常见的一个功能,它能够将源数据根据一定的规格转换成为目标数据。下面将以
ETL 过程中比较常见的 Date 与 Timestamp 相互转换为例,说明字段转换的实现方式。
1.1 源数据类型为 Timestamp,目标类型为 Date
清单 1. 时间转换函数
TimestampToDate(in.ADD_DATE) |
图 3. 字段转换表达式
图 4. 字段转换前后对比
1.2 源数据类型为 Date,目标类型为 Timestamp
这种转换需要将 Date 类型先转换为 Varchar 类型,再将 Varchar 补齐 Timestamp
所需的时分秒的字符,再转换为 Timestamp 类型
清单 2. 时间转换函数
StringToTimestamp((DateToString(in.ADD_DATE,"%yyyy-%mm-%dd"):' 00:00:00'), "%yyyy-%mm-%dd %hh:%nn:%ss") |
图 5. 字段转换表达式
图 6. 字段转换前后对比
1.3 其他类型的转换
DataStage 提供了丰富的字段转换的函数,下图为字段转换函数列表。用户可根据自己的实际需求选取其中最简便的方式实现转换。
图 7. Parallel job 中的字段转换函数
2. 字段逻辑运算及判断
利用 Transformer Stage 进行字段间的运算及判断,该功能等同于 SQL 中的逻辑运算与判断。
下图为根据源字段长度返回目标字段的值。Transformer Stage 根据逻辑判断将返回‘ YES
’ , ’ NO ’ 和 NLLL 三个值
清单 3. 逻辑运算表达式
IF Len(trim(in.CLASS_CODE)) < 10 THEN 'NO' ELSE IF Len(trim(in.CLASS_CODE)) = 10 THEN 'YES' ELSE SetNull() |
图 8. 字段逻辑运算表达式
3. 数据复制
ETL 的过程中可能会有同一个数据流需要被复制,并用作不同目标的输出方式的情况,这时 Transformer
Stage 就进行简单的字段复制来实现。用户可将被复制的列映射选中,直接拖拽到复制的列映射中去,并设置输出
Stage 属性。
图 9. copy link 即为 out link 的复制数据流
图 10. 复制的数据流保证数据列映射的一致性
4. 数据过滤
数据过滤功能相当于 SQL 中的 where 语句,Transformer Stage 中数据过滤的优势在于,可以根据不同的逻辑,在
stage 写入不同的条件限制来输出数据。
下图中, 双击 Transformer Stage 中的 Constraints 属性按钮,在弹出的窗口中会显示每个
link 对应的属性框,可以根据具体的业务逻辑,填写每个 link 的约束条件,这样 Transformer
Stage 就会根据相应的条件输出被约束后的数据。
图 11. Transformer Stage 中的约束表达式
5. 字段关联
Transformer Stage 实现字段关联的功能仅限于 Server job 中。Transform
stage 可以根据数据源所生成的 Hash File 中的 Key 值,与主数据进行关联,实现方式等价于数据库中的表关联。下图
job 以一个主表关联两个维表为例,做出详细说明。
下图中, 双击 Transformer Stage 中的 Constraints 属性按钮,在弹出的窗口中会显示每个
link 对应的属性框,可以根据具体的业务逻辑,填写每个 link 的约束条件,这样 Transformer
Stage 就会根据相应的条件输出被约束后的数据。
图 12. Transformer Stage 在 Server job
中的数据关联用法
Job 中的主数据与两个维表,通过以下两个关联字段的表达式进行关联,用户可以根据 DataStage 提供的
Server job 函数对关联字段进行预处理,保持关联字段的类型和长度一致。
清单 4. 关联字段处理表达式
TRIM(Master_data.CNTRY_CODE) SUBSTRINGS(Master_data.CNT_AUDIT_DATE,1,10) |
图 13. 关联条件表达式及列映射
Transformer Stage 的自定义函数及变量
1. 自定义函数的使用
DataStage 中提供了 Routines 函数功能,Routines
是一个非常强大的内置函数库供开发人员使用,当然再多的函数也有可能满足不了特定的业务需求,因此开发人员也可以开发自定义的
Routines 函数,然后将其用于转换过程。通过下面的实例开发人员可以了解如何开发一个 Routines
函数并在 Transform Stage 中进行调用。 首先新建一个 Routines,根据具体 Transform
Stage 使用情况可以选择 Server 或者 Parallel Routine。
图 14. 新建 Routine
在 General 标签页,命名其为 TestRoutine
图 15. 命名 Routine
切换至 Arguments 标签页,定义函数输入参数,如下图所示,我们定义一个输入参数 inputpara
图 16. 定义 Routine 输入参数
切换至 Code 标签页,在这里编写实际的代码逻辑
保存代码后,点击 Compile 按钮,然后通过 Test 界面进行相关测试以确保函数逻辑准备。
清单 5. 自定义函数编码
* 如果输入参数为空或者空串,返回‘ BLANK ’ 如果输入参数小于 10,则自加 1,否则返回 ’ Great than 10 ’ * If inputpara="" OR IsNull(inputpara) Then Ans="BLANK" GoTo ExitFunc End If inputpara<=10 Then Ans=inputpara +1 End Else Ans="Great than 10" End ExitFunc: |
图 17. 定义 Routine 输入参数
如果需要在 Transform Stage 中对相应字段进行函数调用的话,打开 Transformer
Stage Property 属性页,选中所需修改的字段,点击引用按钮,选择如图 16 所示的 DS Routine,即可进行相关操作。
图 18. 在 Transform Stage 中引用函数
2. 阶段变量 Stage Variables 的使用
DataStage 中还提供了 Stage Variables 这种阶段变量的方式来实现复杂逻辑的处理,并提高处理效率。Transformer
Stage 可以定义一个 Stage Variables,将字段的 Derivation 赋值为 Stage
Variables,减少一次或者多次计算量。Stage Variables 是对于 job 级别的变量,因而不能直接在整个
project 中被调用。通过下面的实例开发人员可以了解如何开发一个 Stage Variables 并在
Transform Stage 中进行调用。实例中的 Stage Variables 用来生成同一批数据加载中的唯一键。双击
Transformer Stage 中的 stage properties 属性按钮,在弹出的窗口选中
Variables 页签,定义一个 job 级别的 variables , 命名为“BatchKey”.
并保存。
图 19. 在 job 中定义 Stage Variables
在 Transformer Stage 的列映射右半部分的 Stage variables 属性框中,就能显示出已经定义的“BatchKey”,输入变量的表达式。
图 20. Stage variables 表达式
清单 6. Stage variables 表达式
'#':in.FILE_CODE:'_':CurrentDate():'_': TimetFromTimestamp(DSJobStartTimestamp) |
特别注意的是,为了保证同一批数据加载的唯一键,这里用到了 DataStage 的自带函数 DSJobStartTimestamp,该函数返回的结果为作业开始运行的时
收藏分享 |