在 talend 中实现 Row_number () over (partition by colname)

Implement Row_number () over (partition by colname) in talend

如何在 Talend 中为以下数据实现 Row_number () over (partition by colname)

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

可以在tmap 组件中完成吗?

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

例如: tFixedFlowInput -> tMap -> tLogRow

步骤。

  1. 在tMap中,定义一个变量,比如seq
  2. 变量应该是int类型
  3. 变量的公式将使用Numeric.sequence,产品类别作为序列标识符 例如:
    Numeric.sequence(row1.product_category,1,1)
  4. 将 seq 放在 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

这里有一个问题,我将数字序列应用于输入..我的输出只是添加了一个序列行,结果一团糟

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

指向 rwnbr 列

但是我的输出出错了:(如果你看到输出,如果我有两张发票,它会跳过一个数字并将其编号为 4。

实际预期的发票代码 i123 ASD 4 2 i123 DFG 5 3 i234 潜孔卫星 6 2 i234 RDF 7 3 i234 自卫队 8 4 i234 WES 9 5