首页 > 解决方案 > 在输入之间迭代时如何对 tjavaflex 组件中插入的行求和?

问题描述

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

Talend Job 详细说明: 1. 将大文件拆分为多个小文件 2. 在小文件之间迭代,将它们插入数据库 3. 记录已插入的行数

人才工作

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

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 更改循环位置时的行为我试图在这里寻找答案,但未能解决我的问题

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;

标签: javatalenddata-integration

解决方案


如果您在 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")


推荐阅读