Talend - één rij te veel, variabel aantal uitvoerrijen

Background: It's common in Talend to use something like tSplitRow to map one row with many fields into multiple rows. A row with fields:

Date | Name | MorningPhone | Day Phone | EveningPhone ...could be split into:

Date | Name | Phone ... and you'll always have 3 resulting rows from one row.


Question: What if I want number of rows from a variable number of fields?

I have a schema: UniqueID | FieldSet where FieldSet is a delimited field of columns divisible by nine. If there are 45 fields, in this delimited column, I want 5 rows. 81 fields => 9 rows.

Ik probeer tJavaRow te gebruiken om de velden te ontleden, maar ik weet niet hoe ik dat moet combineren met tSplitRow om het juiste aantal velden te genereren.

Ideeën? Bedankt!

0

2 antwoord

Ik gebruikte een aangepaste tJavaRow - dit veranderde een speciaal geformuleerde reeks in een nieuwe tabel. Soort van een hack, maar het werkte.

String input = "";
String OUT = "";


try {
      input = java.net.URLDecoder.decode(input_row.CustomField16, "ASCII");

} catch (UnsupportedEncodingException e) {
      e.printStackTrace();
}

String[] pieces = input.split(";");

/*for(int a=0; a
2
toegevoegd
Deze methode is verouderd. Zie mijn antwoord hieronder
toegevoegd de auteur Daniel San, de bron
Ik kan hier geen betere manier voor bedenken.
toegevoegd de auteur drmirror, de bron

Talend is geëvolueerd sinds deze vraag is gesteld, en een veel betere manier om dit te doen, is het onderdeel tNormaliseren gebruiken.

enter image description here

Eerst gebruiken we een bestand als dit als invoer:

pepe|123|123
juan|454|2423|34343|5454

We lezen dit bestand met de component tFileInputRegex. We moeten de reguliere expressie en het schema definiëren. De reguliere expressie zal zijn:

"^([^|]+)\\|(.+)"

Het schema zal zijn:

enter image description here

Vervolgens verbinden we tFileInputRegex met een tNormalize. We hebben de scheidingsteken ingesteld op:

"\\|"

En tot slot gebruiken we de uitvoer zoals we nodig hebben.

1
toegevoegd