I have a talend job that i am trying to read the columns from the csv file sequentially row by row for each combination (if possible trying to collect unique combination) of COLUMN A & COLUMN B to get the values and store in tjava (context variables to reuse and query the tdbinput)
OPTION 1: My job design looks like this: tfilelist-Iterate-->tjava -->tdbinput
Tjava:
```
`int n = 600; // The line number
int i=0;
String line="";
int linenumber=0;
```
`try(BufferedReader br = new BufferedReader(new FileReader((String)globalMap.get("tFileList_1_CURRENT_FILEPATH"))))`
`{`
`while ((line = br.readLine()) != null && linenumber< n )`
`{`
`if(iteration == 0)`
`{`
`iteration ;`
`continue;`
`}`
`String[] tokens = line.split(",");`
```
for(String token : tokens)
{
//Print all tokens
System.out.println(token);
}
```
`context.columnA=tokens[0];`
`context.columnB=tokens[1];`
```
linenumber ;
}
```
```
```
When i try to use the context.columnA in the other component tdbinput it will has the last overwritten value and not the iterated value for each row sequence
tdinput: select * from test where testcol='" context.columnA "'; RESULT IS NULL because context.columnA value is empty from tjava
OPTION 2:I tried using : tfileinputdelimited--main-->tjavarow
tjavarow:
context.columnA = input_row.columnA ;
context.columnB= input_row.columnB;
but this approach doesnt help me to directly pass the inputs into tdbinput(to query the database using select)
So i would like to know if there is a way to iterate from tfileinputdelimited---iterate-->tjava??? but unable to store the schema results between the component.
Updated job design for approach2: enter image description here
Anyone please advise a way to perform either using java code to handle it or adjust the talend components to achieve the desired result
CodePudding user response:
try using your second approch :
tfileinputdelimited ->tJavaRow-main1->tFlowtoIterate->tdbInput
You can use the global Variable in tdbInput as below ((String)globalMap.get("main1.lot"))