您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
Transformer Stage在DataStage中的用法及功能实现
 
来源:数据仓库之路 发布于 2016-6-8
  6397  次浏览      22
 

摘要: 本文通过实例让使用者能够更详细的了解 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,该函数返回的结果为作业开始运行的时

收藏分享

   
6397 次浏览       22
相关文章

每日构建解决方案
如何制定有效的配置管理流程
配置管理主要活动及实现方法
构建管理入门
相关文档

配置管理流程
配置管理白皮书
CM09_C配置管理标准
使用SVN进行版本控制
相关课程

配置管理实践
配置管理方法、工具与应用
多层次集成配置管理
产品发布管理
最新活动计划
软件架构设计方法、案例与实践 8-23[特惠]
Linux内核编程及设备驱动 8-15[北京]
Python、数据分析与机器学习 8-23[特惠]
嵌入式软件架构设计 8-22[线上]
QT应用开发 9-5[北京]

软件配置管理的问题、目的
软件配置管理规范
CQWeb 7.1性能测试与调优指南
为什么需要使用ClearCase
ClearCase与RTC的集成
利用ClearQuest 进行测试管理
更多...   

产品发布管理
配置管理方法、实践、工具
多层次集成配置管理
使用CC与CQ进行项目实践
CVS与配置管理
Subversion管理员

配置管理实践(从组织级到项目级)
通号院 配置管理规范与应用
配置管理日构建及持续集成
丹佛斯 ClearCase与配置管理
中国移动 软件配置管理
中国银行 软件配置管理
天津华翼蓝天科技 配置管理与Pvcs