Beispiel für eine Schleife: mehrere sich wiederholende Werte in einem einzigen Feld ( DataStage® )

Sie können die Stage 'Transformer' verwenden, um eine einzelne Zeile für Daten mit sich wiederholenden Spalten in mehrere Ausgabezeilen zu konvertieren.

Eingabedaten mit mehreren sich wiederholenden Werten in einem einzelnen Feld

Wenn Daten vorhanden sind, bei denen eine einzelne Spalte mehrere sich wiederholende Werte enthält, die durch einen Begrenzer voneinander getrennt sind, können Sie die Daten vereinfachen, um mehrere Ausgabespalten zu erstellen: eine für jeden der Werte mit Begrenzer. Sie können auch angeben, dass bestimmte Werte herausgefiltert werden und keine neue Zeile für sie erstellt wird.
Die Eingabezeile enthält beispielsweise die folgenden Daten:
Col1 Col2 Namen
abc def Jim/Bob/Tom
Das Namensfeld soll vereinfacht werden, sodass für jeden neuen Namen, der durch den umgekehrten Schrägstrich (/) angegeben wird, eine neue Zeile erstellt wird. Außerdem soll der Name 'Jim' herausgefiltert werden und die Spalte mit dem Namen 'Col2' gelöscht werden, sodass die resultierenden Ausgabedaten für die Beispielspalte zwei Zeilen mit zwei Spalten erstellen.
Col1 Name
abc Bob
abc Tom
Um dieses Szenario in der Stage 'Transformer' zu implementieren, müssen Sie die folgenden Einstellungen vornehmen:
Stagevariable
Definieren Sie eine Stage-Variable, um eine Anzahl der durch das Begrenzungszeichen getrennten Felder zu speichern. Der Wert von StageVar1 wird durch den folgenden Ausdruck festgelegt:
DCOUNT(inlink.Names, "/")
Schleifenbedingung
Geben Sie den folgenden Ausdruck als die Schleifenbedingung ein:
@ITERATION <= StageVar1
Die Schleife setzt die Zählung in der Spalte "Namen" fort.
Schleifenvariable
Definieren Sie eine Schleifenvariable, um den Wert für den neuen Spaltennamen in den Ausgabezeilen bereitzustellen. Der Wert von LoopVar1 wird durch den folgenden Ausdruck festgelegt:
FIELD(inlink.Names, "/", @ITERATION, 1)
Dieser Ausdruck extrahiert die Teilzeichenfolgen (getrennt durch Schrägstrich (/)) aus der Eingabespalte.
Ausgabelinkeinschränkung
Definieren Sie eine Ausgabelinkeinschränkung, um den Namen 'Jim' herauszufiltern. Verwenden Sie den folgenden Ausdruck, um die Einschränkung zu definieren:
LoopVar1 <> "Jim"
Ausgabelinkmetadaten und Ableitungen
Definieren Sie die Ausgabelinkspalten und deren Ableitungen: Löschen Sie die Spalte Col2, indem Sie sie nicht in die Metadaten einbeziehen.
  • Col1 - inlink.col1
  • Name - LoopVar1