在talend中使用带有tMemorize和tJavaFlex的Joblets

时间:2015-04-15 13:24:23

标签: talend

我正在尝试在Talend中创建一些加速,这将加快一些进程。 我有来自MSSQLInput的输入,然后对结果进行排序和过滤。然后我有一个tMemorizeRows和一个tJavaFlex,其目的是记住列中的行以执行计数。计数基于客户ID,一旦id改变,计数开始回到1并且进程再次开始并继续结束。我把它重构为一个joblet,但它不起作用,错误是:

  

ID_tMemorizeRows_1无法解析为变量

我有一个以

开头的tJavaFlex
int counte = 1;

主要代码是

if(ID_tMemorizeRows_1[0].equals(ID_tMemorizeRows_1[1]))
{
counte = counte + 1; 
} 
else 
{ 
counte = 1; 
} 
context.Enqnum = counte;

Enqnum变量并正确创建并添加到tMaps组件中。

有谁知道为什么会发生这种情况,有人告诉我这是因为当你把东西转移到一个joblet时它得到一个新的/不同的名字所以它必须在Java中专门调用,如果是这样的话怎么办我找到了这个名字?

谢谢 富

1 个答案:

答案 0 :(得分:0)

我确实有一个决议。我试图添加图像,但我的声誉不够高。

当使用joblets时,我们知道Talend基本上通过将其插入到主要作业的代码中来回收joblet中使用的代码。

这是我创建的joblet,我知道它有效,因为我已经将它重构为一个joblet而不是从sctatch构建它。它的作用只是在一个有序数据集中记忆第0行和第1行,java执行计数,tMap将结果附加到作业(如上所述)。

(我会在我的问题中尝试使用inser图像,我没有足够的声望点将其插入到问题中)。

当作业运行时,它运行正常。但是当我想在工作的另一部分重用相同的joblet时会出现问题。 Talend所做的是根据joblet的名称将源代码中的名称分配给每个组件。 例如,如果将Joblet称为 ThisJob ,则 tMemorizeRows_1 将被称为 ThisJob_1_tMemorizeRows_1 。 组件中的行(在此示例中为ReferenceID)将重命名为: 的 ReferenceID_ThisJob_1_tMemorizeRows_1

但是当你为你的工作添加第二个joblet时,它会给它一个新名称,例如 ThisJob_2 。在添加第二个joblet之前,此名称将根据您更改作业的程度而有所不同。因此,名称中的数字取决于此活动。

如果你立即将joblet添加到你的工作中,那么joblet将被称为 ThisJob_2 ,如果你在添加它之前添加了5个其他组件,则可能会将joblet称为 ThisJob_6 等(我不能100%确定talend如何重命名组件)

添加joblet时,您可以在joblet组件上看到joblet的名称,然后在创建任何链接/连接到其他组件时恢复原始的joblet名称。

将代码中的每个组件分配给名为 currentComponent 的变量也很重要。

解决

我所做的是使用Java代码使用下面的代码拆分名称。这样我就可以获得joblet的当前名称,并在我的Java中使用此名称。

String string = currentComponent;
String[] parts = string.split("_");
String part1 = parts[0];
String part2 = parts[1];
String joblet = part1+'_'+part2;
String newrow = "ReferenceID_"+joblet+"_tMemorizeRows_1";

我希望这是有道理的。 感谢