我有一个复杂的转换,其中查找阶段指定必须在一行上完成的大约30个不同/特定字符串操作之一。我想知道如何在DataStage中有效地做到这一点?
要求是这样的:
struct info *data1 = (info *) malloc (sizeof(info));
......等等。
到目前为止我所探讨的内容:
我的第一个冲动是将代码(字段名称和字符串函数)作为字符串/字段包含在查找表中,并在变换器阶段表达式中查找后使用该代码。但是,似乎无法将字符串作为变换器表达式中的代码进行评估?
我提出的另一个解决方案是将代码放入变换器阶段内的许多嵌套控制语句中,这看起来非常低效,特别是因为DataStage似乎没有提供等同于&#34的控制语句。 ; CASE" /" SWITCH&#34 ;.或者是吗?
用一个开关阶段代入(部分)控制语句进入不同的查找/变换器阶段似乎更有效,因为它们可以并行完成但是设计起来会很痛苦。
我还没有涉足服务器例程。
答案 0 :(得分:0)
我熟悉Datastage 8.5。在转换中使用长的If / Then / Else语句会起作用,但是,它是凌乱且低效的。
我首先想到的是使用Transform函数类型的Server例程。
该功能可以这样工作:
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是否具有您需要的字符串操作。以下是他们的编程页面的链接。
答案 1 :(得分:0)
DataStage BASIC具有海量字符串功能。好吧,也许只有440左右。 其CASE构造可编译为等效的If..Then..Else结构。 实际上,它们都编译为最低级别的一系列TEST..JUMP指令。