I have a csv file and I need to create separate xml files for each row, name of each xml file should match to the value of some column in csv.
Sounds easy but I cannot figured out how to do it...
I've made following job and in tFileOutputXML component I selected "Split output in several files" and "Rows in each output file - 1":
I try to use "row1.columnName" as a file name in tFileOutputXML but it doesnt work - files named as null1.xml, null2.xml, etc. As I understad this is because Output component is initialized once at the beginning of the job, when no data read from csv yet.
How can I acheeve what I need?
That's because output files are opened when subjob starts.
Use the following design:
tFlowToIterate transform each field of the current row to a global variable.
The "iterate" connection trnasform the flow to an iteration (for simple, you may consider it like a separate subjob).
tFixedFlowInput start a new flow using the global variables to initialize the fields, like this:
This flow is pushed to tFileOutputXML where you can reuse the global which contained the file name like this:
Hope this heps.
Thanks, thats works (I suspected something like this). But this solution has an inconvenience because I need to maintain not only the schema which I can put in repository, but also a tFixedFlowInput component mapping where I need to map each column to corresponding global value... This looks like a tautology - column1 = (String)globalMap.get("row1.column1"). And the same for all columns, there are many....
Is there any solution for that?
Talend named a Leader.
Kickstart your first data integration and ETL projects.
Part 2 of a series on Context Variables
Learn how to do cool things with Context Variables
Find out how to migrate from one database to another using the Dynamic schema