在Talend中查找RowNumber

时间:2017-01-11 08:58:40

标签: talend

如何在Talend Open Studio 6.3中查找行号?我想按照

这样的顺序插入行
  • File1
  • 中的第1行到第10行
  • File2
  • 中第11行到第20行
  • 第21行至第30行至第3行
  • 然后再从第31行到file1

如何实现?我已经生成了一个序列列。如何继续?是否可以使用tsamplerow完成? 假设Sourcefile是这样的: -

EMPNO,EMPNAME,DEPTNO
10,A,1
11,B,2
12,C,3
13,D,4
14,E,1
15,F,1
16,G,2
17,H,3
18,I,4
19,J,2
20,K,3
21,L,1
22,M,2

1 个答案:

答案 0 :(得分:4)

您可以使用Numeric.sequence("s1",1,1)在talend作业中定义增量值来获取当前行号。

注意:我使用了OP的示例数据,每个文件的行数除以3.但在OP的情况下,它是10行

以下是我尝试的示例作业,

enter image description here

我正在生成序列号以了解当前行号,如下所示

enter image description here

获取当前行值后,我有另一个变量,每3行(在我的例子中)将增加(如下所示)(在OP的示例中,它是每10行。)

enter image description here

这是我在SequenceRow上下文变量上所做的表达。

context.SequenceRow = (input_row.SequenceNumber > context.RowRangePerFile && input_row.SequenceNumber % context.RowRangePerFile == 1) ? context.SequenceRow+1 : context.SequenceRow;

最后,我根据tMap_2值过滤了SequenceRow中的行,如下所示

enter image description here

对于out1,过滤条件为(out2.SequenceRow > context.TotalNoOfFiles && out2.SequenceRow % context.TotalNoOfFiles == 1) || out2.SequenceRow == 1

对于out3,过滤条件为(out2.SequenceRow > context.TotalNoOfFiles && out2.SequenceRow % context.TotalNoOfFiles == 2) || out2.SequenceRow == 2

对于out4,过滤条件为(out2.SequenceRow > context.TotalNoOfFiles && out2.SequenceRow % context.TotalNoOfFiles == 0) || out2.SequenceRow == 3

我已经提取了您在问题中提供的样本数据,

EMPNO,EMPNAME,DEPTNO
10,A,1
11,B,2
12,C,3
13,D,4
14,E,1
15,F,1
16,G,2
17,H,3
18,I,4
19,J,2
20,K,3
21,L,1
22,M,2

我在每个文件中每写3行,我得到的输出是

enter image description here

希望这可以帮助你。