1

我有一个复杂的转换,其中查找阶段指定了大约 30 个不同/特定的字符串操作之一,这些操作必须在一行上完成。我想知道如何在 DataStage 中有效地做到这一点?

要求是这样的:

    If 
      col_a = 1 
    Then 
      col_b := some_string_function(col_c) 
    Else If 
      col_a = 2 
    Then 
      col_b := some_other_string_function(col_d) 
    Else If 
      col_a = 3 
    Then 
      col_b := yet_another_string_function(col_c & col_d) 
    Else If ...

... 等等。

到目前为止我探索的内容:

我的第一个冲动是将代码(字段名称和字符串函数)作为字符串/字段包含在查找表中,并在变压器阶段表达式中查找后使用该代码。但是,似乎没有办法将字符串评估为转换器表达式中的代码?

我想出的另一个解决方案是将代码放入transformer stage内的许多嵌套控制语句中,这似乎非常低效,尤其是因为DataStage似乎没有提供与“CASE”/“SWITCH”等等效的控制语句”。或者是吗?

用输入到不同查找/变压器阶段的开关阶段替换(部分)控制语句似乎更有效,因为它们可以并行完成,但设计起来很痛苦。

我还没有涉足服务器例程。

4

2 回答 2

0

我熟悉 Datastage 8.5。在转换中有一个长的 If/Then/Else 语句会起作用,但是是的,它很混乱而且效率低下。

我的第一个想法是使用转换函数类型的服务器例程。

该功能可以像这样工作:

Transform function    
Arguments: col_A, col_C, col_D

    FUNCTION CALC_B(col_A,col_C,col_D)
    Begin Case
      Case colA = 1
           Ans = StringFunc(colC)

      Case colA = 2
           Ans = OtherStringFunc(colC,colD)

      Case colA = 3 OR colA = 4
            Ans = YetOtherStringFunc(colC,colD)
    End Case

然后在您的转换中,您可以使用该函数来设置您的 col_B 值。

CALC_B(myrow.colA,myrow.colC,myrow.colD)

我认为最大的问题是 BASIC 是否有你需要的字符串操作。下面是他们的编程页面的链接。

IBM - 使用例程

IBM - 基本编程语言

于 2017-03-17T18:58:01.497 回答
0

DataStage BASIC 有无数的字符串函数。好吧,也许只有440左右。它的 CASE 构造编译为等效的 If..Then..Else 结构。实际上,它们都在最低级别编译为一系列 TEST..JUMP 指令。

于 2020-09-17T08:23:49.727 回答