【问题标题】:How to split a camel message body into rows in order to iterate over them in Talend ESB如何将骆驼消息体拆分为行以便在 Talend ESB 中对其进行迭代
【发布时间】:2018-01-09 13:08:32
【问题描述】:

所以,正如标题所说,我正在使用 Talend ESB 来处理骆驼消息传递。就我而言,我将文件内容作为消息正文发送给子 Talend 作业。在某些情况下,文件的内容可能有 2+ 行。我所需要的只是能够在子作业本身内独立地迭代每一行。

我想我的问题是 2 折。 1. 如果可能,我该怎么做? 2. 迭代过程更适合路由级别,还是路由调用的子作业。

现在,我正在处理的文件是 | 分隔的。为了处理这个问题,我让 tRouteInput_1 直接进入 tExtractDelimtedFields 并使用这些值来全局设置变量,就像这样。

这个问题是它只读取文件的第一行,然后继续。我需要能够遍历文件/骆驼消息中的每一行。

谢谢, 亚历克斯

【问题讨论】:

    标签: esb talend


    【解决方案1】:

    首先,您需要使用 tNormalize 在行分隔符上拆分文件。
    在我的示例中,我使用tFixedFlowInput 模拟您的tRouteInput,其中包含整个文件作为单行,行由\n 分隔。然后对于tNormalize 返回的每个结果行,提取您想要的字段(在tExtractDelimitedFields 中,创建与您的行结构对应的架构):

    结果:

    .--------+--------.
    |    tLogRow_1    |
    |=-------+-------=|
    |field1  |field2  |
    |=-------+-------=|
    |field1.1|field1.2|
    |field2.1|field2.2|
    |field3.1|field3.2|
    '--------+--------'
    

    您需要在tExtractDelimitedFields 中使用“\\|”来转义“|”,因为该组件接受正则表达式,并且管道具有特殊含义。

    至于您的第二个问题,我认为最好在子作业而不是路由中执行此操作,因为路由透视图中没有专门的组件。

    【讨论】:

    • 这太完美了!!!实际上,我昨晚深夜通过反复试验偶然发现了这个exact 解决方案。您对所有组件都提供了详尽的解释,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 2011-12-11
    • 1970-01-01
    • 2013-05-31
    • 2013-01-06
    • 2013-01-24
    相关资源
    最近更新 更多