2016-12-27 4 views
1

Ich habe eine komplexe Transformation, bei der eine Nachschlagephase eine von etwa 30 verschiedenen/spezifischen Zeichenfolgenoperationen angibt, die in einer Zeile ausgeführt werden müssen. Ich frage mich, wie man dies in DataStage effizient macht?IBM DataStage: Zeichenfolge als Code/Ausdruck auswerten

Die Forderung ist so etwas wie dieses:

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 ... 

... und so weiter.

Was ich bisher erforscht:

Mein erster Impuls den Code (Feldname (n) und String-Funktionen) als String/Feld in der Lookup-Tabelle enthalten war und verwenden Sie diesen Code nach der Suche in einem Transformatorstufe Ausdruck. Es scheint jedoch keine Möglichkeit zu geben, eine Zeichenfolge als Code in einem Transformer-Ausdruck zu bewerten. Eine andere Lösung, die ich gefunden habe, besteht darin, den Code in eine Menge verschachtelter Steueranweisungen innerhalb einer Transformatorstufe zu stecken, was schrecklich ineffizient erscheint, zumal DataStage keine Steueranweisung zu bieten scheint, die etwas wie "CASE" entspricht "/"SCHALTER". Oder tut es?

Das Ersetzen der Steueranweisungen durch eine Schaltstufe, die in verschiedene Nachschlage-/Transformer-Stufen eingespeist wird, scheint effizienter zu sein, da sie parallel ausgeführt werden könnten, aber ein Designschwieriger wäre.

Ich habe noch nicht in Server-Routinen versucht.

Antwort

0

Ich bin vertraut mit Datastage 8.5. Eine lange If/Then/Else-Anweisung in der Transformation würde funktionieren, aber ja, es ist unordentlich und ineffizient.

Mein erster Gedanke ist die Verwendung einer Server-Routine vom Typ Transform-Funktion.

Die Funktion könnte wie folgt funktionieren:

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 

Dann in Ihrem verwandeln Sie die Funktion verwenden, könnte Ihr col_b Wert einzustellen.

Ich denke, das größte Problem dabei ist, ob BASIC die Zeichenfolge Operationen, die Sie benötigen. Unten ist ein Link zu ihrer Programmierseite.

IBM - Working with Routines

IBM - Basic Programming Language

Verwandte Themen