parsing - Talend - 合并定界文件的两行以获得一个寄存器

标签 parsing rows talend csv

我正在解析分隔文件文件以获取将放入数据库表中的信息。

现在,我有一个文件,我必须在其中合并每两行,以获取有关一个寄存器(数据库表的一行)的信息 - 第 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 将数据分成输入和输出部分:

Split the file using a tMap

这只是根据 Id 字段是否以“IN”或“Out”开头,沿着两条路径之一发送数据。

在此之后,您需要将其与另一个 tMap 重新组合,设置如下:

Recombine the files using a tMap

此连接基于从 Id 文件中提取的键,并在组合输出中使用适当的列。

不幸的是,您无法使用 tMap 拆分流,然后直接将其重新连接回另一个 tMap,因此最好的选择是将其输出到两个单独的位置(数据库表或临时 CSV 文件),然后当子作业完成,然后读取这些单独的位置并与第二个 tMap 重新组合。

示例作业可能如下所示:

example Job setup

如果您没有要加入的自然键,那么您可以通过获取第一个 tMap 的输出,然后添加一个表达式为 Numeric.sequence 的列来生成一个自然键。作为该列的值。

关于parsing - Talend - 合并定界文件的两行以获得一个寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21312979/

相关文章:

c# - Double.Parse 用于 native 语言支持

firefox - 什么是推测解析?

java - 在 Java 中解析以下日志条目的最佳方法是什么?

Mysql连接具有相同值的行

R——如何根据 grep 行名称进行子集化

mysql - 通过 VPN 的 Talend 连接

python - 如何在python中解析来自套接字的二进制数据?

mysql - 我在nodejs中有一个函数mysql,无法解析结果

Talend 导出和导入作业

Java/Talend 根据条件分解字符串并清理数据