在输入之间进行迭代时,如何对tjavaflex组件中插入的行求和?

时间:2019-01-31 08:06:49

标签: java talend data-integration

在Talend(开放式工作室,用于数据集成)7.0.1(和更早版本)中。我使用tJavaFlex记录已向数据库中插入多少行。

Talend作业详细信息: 1.将大文件拆分为多个小文件 2.在较小的文件之间进行迭代,然后将其插入数据库 3.记录已插入多少行

Talend job

记录部分记录每次迭代,如下所示:

2019-01-31 09:39:20 |Stage_SalesInvoiceLine | Rows inserted 5000
2019-01-31 09:39:25 |Stage_SalesInvoiceLine | Rows inserted 5000
2019-01-31 09:39:32 |Stage_SalesInvoiceLine | Rows inserted 5000

我需要帮助弄清楚如何使其看起来像这样:

2019-01-31 09:39:32 |Stage_SalesInvoiceLine | Rows inserted 15000

tJavaFlex behaviour when changing loop position我试图在这里寻找答案,但未能解决我的问题

tJavaFlex主代码部分中的当前代码(开始和结束部分为空)

Integer Inserted = ((Integer)globalMap.get("tJDBCOutput_6_NB_LINE"));
String InsertedS = "Rows inserted " + Integer.toString(Inserted);
row19.TimeStamp = TalendDate.getDate("yyyy-MM-dd HH:mm:ss ");
row19.LogRow = "Stage_SalesInvoiceLine | " + InsertedS;

1 个答案:

答案 0 :(得分:0)

如果在tJavaFlex中使用局部变量,则它们将在每次迭代时重置。相反,您可以在子作业开始之前定义一个全局变量,在tJavaFlex中对其进行递增,并在完成所有插入操作后检索其值。

tSetGlobalVar (NB_INSERTS set to 0)
    |
OnSubjobOK
    |
database inserts -- OnComponentOK -- tJavaFlex
    |
tFixedFlowInput -- tFileOutputDelimited

在上面的tJavaFlex中,您可以在主要部分中增加变量:

globalMap.put("NB_INSERTS", (Integer)globalMap.get("NB_INSERTS") + (Integer)globalMap.get("tJDBCOutput_1_NB_LINE_INSERTED"))

tFixedFlowInput中:"Rows inserted " + (Integer)globalMap.get("NB_INSERTS")