我有一个文件源,其中数据如下所示:
ID BarcodeNumber
------------------------
1 123456789
1 33
2 987654321
2 44
我想得到如下数据:
ID BarcodeNumber
------------------------
1 12345678933
2 98765432144
关于如何做到这一点的任何建议?
编辑:我想在数据流中执行此操作,因为这可能有数十亿行。
我有一个文件源,其中数据如下所示:
ID BarcodeNumber
------------------------
1 123456789
1 33
2 987654321
2 44
我想得到如下数据:
ID BarcodeNumber
------------------------
1 12345678933
2 98765432144
关于如何做到这一点的任何建议?
编辑:我想在数据流中执行此操作,因为这可能有数十亿行。
期望的状态是,对于每个 ID,所有条形码都将连接在一起。
为此,您的数据必须按 ID 排序。如果文件尚未排序,则需要通过排序任务运行它。
对数据进行排序后,您需要在异步模式下添加脚本转换。它将是异步的,因为输入的行数与输出的行数不同。
伪代码将类似于
If Row.ID <> LastID
If LastID <> ""
Output0Buffer.ID = LastID
Output0Buffer.Barcodes = Barcodes
LastID = Row.ID
Barcodes = ""
Barcodes = Barcodes + Row.Barcodes

源文件:
ID,RowNum,Barcode
1,1,123456789
1,2,33
2,1,987654321
2,2,44
拆分文件的行。对于这里源文件中假设的简单情况,我们可以使用条件拆分。对于更多涉及的情况,我们可以使用 Script 组件作为拆分器。从这里开始,解决方案将是非常标准的 wrt 排序和合并。合并后,添加一个派生列:TRIM(Barcode1) + TRIM(Barcode2) 其中 Barcode1 来自“左侧”,其中行数为 1,而 Barcode2 来自“右侧”。如果您关心排序组件的性能,请将拆分的行放在两个表中,然后比较性能。
Cond. Split: RowNum1 (RowNum == "1"), RowNum2 (RowNum == "2")
Sort: By ID; Pass through: Barcode
Merge Join: Left outer join, Join key: ID; Output: ID, Barcode1 and Barcode2
Derived column: TRIM(Barcode1) + TRIM(Barcode2)