如何将骆驼消息 body 拆分成行以便在 Talend ESB 中迭代它们
How to split a camel message body into rows in order to iterate over them in Talend ESB
因此,正如标题所说,我正在使用 Talend ESB 来处理骆驼消息传递。在我的例子中,我将文件的内容作为消息 body 发送到 child Talend 作业。在某些情况下,文件的内容可能有 2 行以上。我所需要的只是能够在 child-job 本身内独立地迭代每一行。
我想我的问题是 2 折。 1.如果可能我该怎么做?和 2. 是更适合路由级别的迭代过程,还是 child-job 路由调用。
现在,我正在处理的文件是 |
分隔的。为了处理这个问题,我让 tRouteInput_1 直接转到 tExtractDelimtedFields 并使用这些值全局设置变量,就像这样。
问题是它只读取文件的第一行,然后继续。我需要能够遍历 file/camel 消息中的每一行。
谢谢,
亚历克斯
首先,您需要使用 tNormalize
.
在行分隔符上拆分文件
在我的示例中,我通过使用包含整个文件的 tFixedFlowInput
来模拟您的 tRouteInput
,行由 \n
分隔。然后对于 tNormalize
返回的每个结果行,提取您想要的字段(在 tExtractDelimitedFields
中,创建与您的行结构对应的模式):
结果:
.--------+--------.
| tLogRow_1 |
|=-------+-------=|
|field1 |field2 |
|=-------+-------=|
|field1.1|field1.2|
|field2.1|field2.2|
|field3.1|field3.2|
'--------+--------'
您需要在 tExtractDelimitedFields
中使用“\|
”转义“|
”,因为该组件接受正则表达式,并且管道具有特殊含义。
关于你的第二个问题,我认为最好在子作业中而不是在路由中执行此操作,因为在路由视角中有专门的组件不可用。
因此,正如标题所说,我正在使用 Talend ESB 来处理骆驼消息传递。在我的例子中,我将文件的内容作为消息 body 发送到 child Talend 作业。在某些情况下,文件的内容可能有 2 行以上。我所需要的只是能够在 child-job 本身内独立地迭代每一行。
我想我的问题是 2 折。 1.如果可能我该怎么做?和 2. 是更适合路由级别的迭代过程,还是 child-job 路由调用。
现在,我正在处理的文件是 |
分隔的。为了处理这个问题,我让 tRouteInput_1 直接转到 tExtractDelimtedFields 并使用这些值全局设置变量,就像这样。
问题是它只读取文件的第一行,然后继续。我需要能够遍历 file/camel 消息中的每一行。
谢谢, 亚历克斯
首先,您需要使用 tNormalize
.
在行分隔符上拆分文件
在我的示例中,我通过使用包含整个文件的 tFixedFlowInput
来模拟您的 tRouteInput
,行由 \n
分隔。然后对于 tNormalize
返回的每个结果行,提取您想要的字段(在 tExtractDelimitedFields
中,创建与您的行结构对应的模式):
结果:
.--------+--------.
| tLogRow_1 |
|=-------+-------=|
|field1 |field2 |
|=-------+-------=|
|field1.1|field1.2|
|field2.1|field2.2|
|field3.1|field3.2|
'--------+--------'
您需要在 tExtractDelimitedFields
中使用“\|
”转义“|
”,因为该组件接受正则表达式,并且管道具有特殊含义。
关于你的第二个问题,我认为最好在子作业中而不是在路由中执行此操作,因为在路由视角中有专门的组件不可用。