java - 在输入之间迭代时如何对 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;
解决方案
如果您在 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")
推荐阅读
- java - Spring Boot 1.5.x 与 Java 11 的兼容性
- c - 探索 getchar() 函数
- java - Settings Activity Android 方法无法从静态内容中引用
- javascript - 如何为所有其他客户端移动特定客户端 div 他的鼠标位置
- php - 如何为路由创建中间件组
- python - 如何在单独的线程中实现阻塞监听功能,而main继续在Python中工作
- python - 使用 loc 的 Pandas 浮点值问题
- inheritance - Flutter:继承自抽象的无状态小部件
- laravel - Laravel 通知序列化问题
- spring - Axon 4 - 配置注入时未检测到 ProcessingGroup 注释类