我正在解析分隔文件文件以获取将放入数据库表中的信息。
现在,我有一个文件,我必须在其中合并每两行,以获取有关一个寄存器(数据库表的一行)的信息 - 第 1 行有一些来自数据库行的字段,第 2 行有一些来自数据库行的字段。其他字段放在同一行中。
如何一次处理两行?
例如,假设我有一个包含 6 行的文件,它对应于我的数据库表(有 9 列)中的 3 个条目。从“奇数行”我得到第 1、3、4、5、8 和 9 列。从“偶数行”我得到剩余的信息(第 2、6 和 7 列):
IN | COLUMN1 | xxxxxxx | COLUMN3 | COLUMN4 | COLUMN5 | xxxxxxx | xxxxxxx | COLUMN8
OUT | xxxxxxx | COLUMN2 | xxxxxxx | xxxxxxx | xxxxxxx | COLUMN6 | COLUMN7 | xxxxxxx
IN | COLUMN1 | xxxxxxx | COLUMN3 | COLUMN4 | COLUMN5 | xxxxxxx | xxxxxxx | COLUMN8
OUT | xxxxxxx | COLUMN2 | xxxxxxx | xxxxxxx | xxxxxxx | COLUMN6 | COLUMN7 | xxxxxxx
IN | COLUMN1 | xxxxxxx | COLUMN3 | COLUMN4 | COLUMN5 | xxxxxxx | xxxxxxx | COLUMN8
OUT | xxxxxxx | COLUMN2 | xxxxxxx | xxxxxxx | xxxxxxx | COLUMN6 | COLUMN7 | xxxxxxx
最佳答案
您可以尝试将文件分成 2 种类型的行,然后使用 tMap 将它们连接起来。
为了进一步澄清,您需要根据文件是 IN 还是 OUT 来拆分文件,然后根据您的需要使用 tMap 连接列。
我对您的示例数据进行了一些修改,使其看起来有点像:
|=---+-----------+-----------+-----------+-----------+-----------+-----------+-----------+----------=|
|IN1 |ROW1COLUMN1|xxxxxxx |ROW1COLUMN3|ROW1COLUMN4|ROW1COLUMN5|xxxxxxx |xxxxxxx |ROW1COLUMN8|
|OUT1|xxxxxxx |ROW1COLUMN2|xxxxxxx |xxxxxxx |xxxxxxx |ROW1COLUMN6|ROW1COLUMN7|xxxxxxx |
|IN2 |ROW2COLUMN1|xxxxxxx |ROW2COLUMN3|ROW2COLUMN4|ROW2COLUMN5|xxxxxxx |xxxxxxx |ROW2COLUMN8|
|OUT2|xxxxxxx |ROW2COLUMN2|xxxxxxx |xxxxxxx |xxxxxxx |ROW2COLUMN6|ROW2COLUMN7|xxxxxxx |
|IN3 |ROW3COLUMN1|xxxxxxx |ROW3COLUMN3|ROW3COLUMN4|ROW3COLUMN5|xxxxxxx |xxxxxxx |ROW3COLUMN8|
|OUT3|xxxxxxx |ROW3COLUMN2|xxxxxxx |xxxxxxx |xxxxxxx |ROW3COLUMN6|ROW3COLUMN7|xxxxxxx |
'----+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------'
唯一真正的补充是,现在有一个关于如何将其连接到第一列的 IN 或 OUT 旁边的关键。
首先,您需要使用如下设置的 tMap 将数据分成输入和输出部分:
这只是根据 Id 字段是否以“IN”或“Out”开头,沿着两条路径之一发送数据。
在此之后,您需要将其与另一个 tMap 重新组合,设置如下:
此连接基于从 Id 文件中提取的键,并在组合输出中使用适当的列。
不幸的是,您无法使用 tMap 拆分流,然后直接将其重新连接回另一个 tMap,因此最好的选择是将其输出到两个单独的位置(数据库表或临时 CSV 文件),然后当子作业完成,然后读取这些单独的位置并与第二个 tMap 重新组合。
示例作业可能如下所示:
如果您没有要加入的自然键,那么您可以通过获取第一个 tMap 的输出,然后添加一个表达式为 Numeric.sequence 的列来生成一个自然键。作为该列的值。
关于parsing - Talend - 合并定界文件的两行以获得一个寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21312979/