2016-08-07 49 views
1

如何在Talend中实现Row_number() over (partition by colname)以下数据?在talend中执行Row_number()(由colname分区)

Product_Category Product_Item 
100 A123 
200 B678 
200 B234 
100 A456 
200 B345 

这可以在tmap组件中完成吗?

+0

你有什么..如果它的数据库中的数据的源,它将更容易得到这个row_number()在tDBXInput组件中完成.. – garpitmzn

+0

Source是一个文件ñ目的地也是一个文件 – user6673748

回答

2

您可以使用Numeric.sequence函数来完成此操作。

例如: tFixedFlowInput - > TMAP - > tLogRow

步骤。

  1. 的TMAP中,定义一个变量,如SEQ
  2. 变量应该是int类型
  3. 为变量的公式将使用Numeric.sequence,与产品类别作为序列标识符 离:
    Numeric.sequence(row1.product_category,1,1)
  4. 穿上TMAP的输出序列,以及其他两个源列
  5. 将输出发送到别的东西,像一个tLogRow

使用您的样本数据,这里是输出

.----------------+------------+---. 
|   tLogRow_1   | 
|=---------------+------------+--=| 
|product_category|product_item|seq| 
|=---------------+------------+--=| 
|100    |A123  |1 | 
|200    |B678  |1 | 
|200    |B234  |2 | 
|100    |A456  |2 | 
|200    |B345  |3 | 
'----------------+------------+---' 

https://help.talend.com/display/TalendDataIntegrationStudioUserGuide61EN/E.1+Numeric+Routines

+0

谢谢,这工作,但如果我需要在另一列的订单工作将是可能的?例如,row_number()over(由col1按col2分区)直到现在我们刚刚实现了row_number()(由 – user6673748

+0

分区)此外,必须在日期列上完成顺序以将记录是最新的日期。 – user6673748

+0

你当然可以改变顺序。如果您按产品项目进行排序,则在tMap之前,它仍然有效,您将得到稍微不同的序列号。例如:B234将得到seq 1. – dbh

0

这里有,我申请的数字序列输入..加入我的输出,只是有一个序列行的一个问题结果搞砸了

我希望我的行号从2开始,在列发票的基础上增加1,所以在变量字段中,我创建了一个变量var_rw并将其定义为Numeric.sequence(Invoice,2, 1),它指的rwnbr列Var.var_rw

但我的输出来了错误的:(如果你看到的输出,如果我有两张发票会跳过一个数字和数字作为4

发票代码实际预期 I123 ASD 4 2 I123 DFG 5 3 i234 DTH 6 2 i234 RDF 7 3 i234 SDF 8 4 i234 WES 9 5

+0

道歉的输出格式..我从我的手机发布..所以我不能格式化它的权利 – user6673748

相关问题