我有一个文件来源,数据如下所示:
ID BarcodeNumber
------------------------
1 123456789
1 33
2 987654321
2 44
我想获得如下数据:
ID BarcodeNumber
------------------------
1 12345678933
2 98765432144
有关如何完成此任务的任何建议?
编辑:我想在数据流中这样做,因为这可能有数十亿行。
答案 0 :(得分:6)
所需的状态是,对于每个ID,所有条形码将连接在一起。
要完成此操作,您的数据必须按ID排序。如果文件尚未排序,则您需要通过排序任务运行它。
对数据进行排序后,您需要在Asynchronous mode中添加脚本转换。它将是异步的,因为行数不会与行数相同。
psuedo代码将类似于
If Row.ID <> LastID
If LastID <> ""
Output0Buffer.ID = LastID
Output0Buffer.Barcodes = Barcodes
LastID = Row.ID
Barcodes = ""
Barcodes = Barcodes + Row.Barcodes
答案 1 :(得分:4)
源文件:
ID,RowNum,Barcode
1,1,123456789
1,2,33
2,1,987654321
2,2,44
拆分文件的行。对于此处源文件中假设的简单情况,我们可以使用条件拆分。对于更复杂的情况,我们可以使用Script组件作为拆分器。从这里开始,解决方案将是非常标准的排序和合并。合并后,添加一个派生列:TRIM(Barcode1)+ TRIM(Barcode2),其中Barcode1来自&#34;左侧&#34;其中包含RowNum 1行,而#34;右侧&#34;表示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)