在 Talend 中查找 RowNumber

Abh*_*jit 1 talend

如何在 Talend Open Studio 6.3 中查找行号?我想按如下顺序插入行

  • File1 中的第 1 行到第 10 行
  • File2 中的第 11 行到第 20 行
  • 第 21 行到第 30 行到 File3
  • 然后再次从第 31 行到 file1

如何实现?我已经生成了一个序列列。现在如何进行?是否可以使用 tsamplerow 来完成?假设源文件是这样的:-

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
Run Code Online (Sandbox Code Playgroud)

Vik*_*888 5

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

注意:我使用了 OP 的示例数据并将每个文件的行划分为 3。但在 OP 的场景中,它是 10 行

以下是我尝试过的示例工作,

在此处输入图片说明

我正在生成一个序列号来了解当前的行号,如下所示

在此处输入图片说明

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

在此处输入图片说明

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

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

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

在此处输入图片说明

对于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
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

希望这可以帮助你。