2016-12-27 16 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 ... 

...と:

要件は、次のようなものです。

私はこれまで調査してきた何を:私の最初の衝動は、ルックアップテーブル内の文字列/フィールドとしてコード(フィールド名(複数可)と文字列関数)を含めると、内のルックアップ後にそのコードを使用していた

変圧器ステージの表現。しかし、変圧器式の中で文字列をコードとして評価する方法はないようですね。

私が思いついたもう一つの解決策は、コードステージをトランスステージ内に多数のネストされたコントロールステートメントに入れることです。これは、特に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

関連する問題