【问题标题】:Position Autoincrement in Talend在 Talend 中定位自动增量
【发布时间】:2020-06-23 08:00:33
【问题描述】:

所以我有点迷茫,不知道怎么挂这个……

假设我在 Talend 中有一个 2 DB 表,让我们先说 一个表 invoices_only ,其字段、invoiceNummer 和作者是这样的

然后,一张带有字段(invoiceNummer、article、quantity 和 price)的表 invoices_table,对于一张发票,我可以有很多文章,例如

通过tmap想得到一个表invoice_table_result,有新的列,一个为文章位置,一个为总价。对于我知道我可以使用类似 Numeric.sequence("s1",1,1) 函数的位置,但不知道如何在找到新发票编号时重新启动我的计数器,当然还有总价这只是一个基本的乘法

所以我的结果应该是这样的

这是我的 talend 工作的草稿,我正在查找表 invoice_only 和 invoices 之间的 invoicenummer

有什么建议吗?谢谢。

【问题讨论】:

    标签: java talend talend-mdm


    【解决方案1】:

    我使用的一个技巧是像这样执行序列:

    Numeric.sequence("s" + row.InvoiceNummer, 1, 1)
    

    这样,当您仍在同一个 InvoiceNummer 上时,序列就会递增,并且只要找到新的 InvoiceNummer,就会开始一个新的序列。

    【讨论】:

    • 正如@Jim Macaulay 在他的回答中所说,如果调用序列的工作部分本身被多次调用,请不要忘记重置序列。
    【解决方案2】:

    有两种方法可以实现,

    tJavaFlex
    Sql

    tJavaFlex
    您可以将当前数据与之前的数据进行比较,并使用以下函数重置序列值,

    if () {      
    Numeric.resetSequence(seqName, startValue); 
    }
    

    Sql
    将数据加载到表中后,创建一个发布作业并使用更新查询来更新记录。您必须选择记录并获取值的排名。在选择之上,您必须执行更新。

    select invoicenumber, row_number() over(partition by invoicenumber, order by invoicenumber) from table name where -- conditions if any.
    

    更新语句因数据库而异,请提供您使用的数据库,以便提供更新查询。

    我建议你通过 Sql 来实现这一点

    【讨论】:

    • 谢谢 Jim,它是一个 Microsoft SQL 数据库,我找到了一种使用序列号的方法。
    • 数据库解决方案的问题是我不想打开与数据库的 2 连接,而 post 工作就是这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    相关资源
    最近更新 更多