我有以下数据:
ID;NAME;SKILL
1;JOE;XML
1;JOE;JAVA
1;JOE;ORACLE
2;JOHN;JAVA
2;JOHN;API
我需要一个能给我这个结构的计数器:
ID;NAME;COUNTER;SKILL
1;JOE;1;XML
1;JOE;2;JAVA
1;JOE;3;ORACLE
2;JOHN;1;JAVA
2;JOHN;2;API
我如何在Talend实现这一目标?我试图使用Number.sequence,但我不知道如何获得列ID的依赖。因此,每次出现新ID时,我都需要重置序列号。
有什么建议吗?
答案 0 :(得分:3)
您可以通过以下方式完成此操作。
yourInput --- --- tJavaRow TMAP - youroutput
在tJavaRow中添加以下代码。
如果(!input_row.ID.equalsIgnoreCase(context.oldID)){ Numeric.resetSequence(" i",0); context.oldID = input_row.ID; }
在tJavaRow之后添加tmap并添加名为COUNTER的其他列
在COUNTER列中添加以下代码。
Numeric.sequence(" i",1,1);
现在执行你的工作将获得预期的输出。
我的输出。
[statistics] connected
1|JOE|1|XML
1|JOE|2|JAVA
1|JOE|3|ORACLE
2|JOHN|1|JAVA
2|JOHN|2|API
[statistics] disconnected
答案 1 :(得分:0)
有一种更简单的方法:你可以有一个类似input-> tMap->输出的模式。
然后在tMap中,只需添加一个新的Integer列" counter"并用Numeric.sequence(row1.NAME,1,1)
每次输入名称更改时,它都会自动重启序列。