If the source contains different sized (in this case tab separeted entries) use line protocol handler to read the input and store each element in one tuple.
source := RETRIEVE({
source='source',
transport='File',
protocol='Line',
datahandler='Tuple',
options=[
['filename', '${WORKSPACEPROJECT}/source.txt']
],
schema = [['line','String']]
}
)
After that splitt the input regarding some condition with the split operator, in this example if the line starts with I or starts with S:
#PARSER PQL
#ADDQUERY
splitted = ROUTE({
predicates = ['startsWith(line,"I")', 'startsWith(line,"S")']
},
source
)
i_pre_out = MAP({
expressions = [['Split(line,"\t")','line']]
},
0:splitted
)
i_out = MAP({
expressions = [
['line[0]','val1'],
['line[1]','val2'],
['line[2]','val3'],
['line[3]','val4'],
['line[4]','val5'],
['line[5]','val6'],
['line[6]','val7']
]
},
i_pre_out
)
s_pre_out = MAP({
expressions = [['Split(line,"\t")','line']]
},
1:splitted
)
s_out = MAP({expressions = [
['line[0]','val1'],
['line[1]','val2'],
['line[2]','val3'],
['line[3]','val4'],
['toFloat(line[4])','val5'],
['line[5]','val6']
]
},
s_pre_out
)