2016-12-27 361 views
1

我有一個複雜的轉換,查找階段指定了必須在一行上執行的大約30個不同/特定字符串操作之一。我想知道如何在DataStage中有效地做到這一點?IBM 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 ... 

...等等。

我迄今探索:

我的第一個念頭是包括代碼(字段名(S)和字符串函數)作爲查找表串/場,並使用該代碼在查找後變壓器階段表達。但是,似乎沒有辦法在變換表達式中將字符串評估爲代碼?

我想到的另一個解決方案是將代碼放入變換器階段內的大量嵌套控制語句中,這看起來非常低效,特別是因爲DataStage似乎沒有提供類似於「CASE 「/「開關」。還是呢?

代(部分)與一個開關階段進料到不同的查找/變差動階段似乎更有效,因爲它們可以並行地完成,但將是設計一種疼痛控制語句。

我還沒有涉足服務器例程。

回答

0

我熟悉Datastage 8.5。在轉換過程中有一個很長的If/Then/Else語句可以工作,但是是的,這是混亂而低效的。

我的第一個想法是使用一個類型爲Transform函數的服務器例程。

功能可以工作是這樣的:

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 - Working with Routines

IBM - Basic Programming Language

相關問題