Talend:tMAP LookUp - 行后第一场比赛

Talend: tMAP LookUp - fist match after row

您好,我在使用 tMap 组件和 Vloopup 功能时遇到问题。 基本上我得到一个 excel 文件作为输入, 我复制了输入,一个用于主行,另一个用于查找:

Excel 列 (FileInputExcel_1 + FileInputExcel_3):

我的目标是: FileInputExcel_1逐行迭代, 对于每一 FileInputExcel_1 行,我需要在 COL2 中查找 FileInputExcel_1 COL3 RETURN 第一场比赛 FileInputExcel_3 COL1 值 第一场比赛 FileInputExcel_3 ROW >= 实际 ROW 迭代 FileInputExcel_1

即:第 1 行结果应为 61416:

即:第 5 行结果应为 3225:

我已经尝试过使用 tMap,但我不明白如何保持 ROW 规则:尽管有光标(BN_LINE 变量仅返回,但我始终无法获得第一个匹配项在和子作业中,所以不能使用它)。 有 idea/workaround 吗? 非常感谢

如果您了解 Java,您可以先在 Java 列表 (ArrayList) 中加载您的 Excel 文件值(col1 和 col2)。
然后迭代你的 Excel 文件,增加一个计数器。对于每一行,找到 Java 列表中的第一个匹配项,但您从等于计数器的索引开始。

(抱歉我的英语不好)

编辑: TOS 6.2.1 示例
2 个上下文变量:
- 我的价值观(对象)
- 索引(整数)默认值 0

a busy cat http://img4.hostingpics.net/pics/478043schema.png

首先,我们将您的 excel 数据加载到列表中。我们迭代您的文件,对于 tJavaRow 组件中的每一行 "load datas":

if(context.myValues == null){
  context.myValues = new java.util.ArrayList<>();
}
// Create a pair contening col1 and col3
javafx.util.Pair<String, String> pair = new javafx.util.Pair<>(input_row.col1, input_row.col3);
// Add the pair in the list
((java.util.ArrayList<javafx.util.Pair<String, String>>)context.myValues).add(pair);

然后我们再次迭代 excel1(就像在您的工作中一样),但是在 tjavaRow "index" 中,我们搜索自当前索引以来的第一个匹配项:

java.util.ArrayList<javafx.util.Pair<String, String>> myList = ((java.util.ArrayList<javafx.util.Pair<String, String>>) context.myValues);
// For each row in the list startin from the current index
for(int i = context.index; i < myList.size(); i++){
  javafx.util.Pair<String, String> currentPair = myList.get(i);
  // if col3 == col2
  if(currentPair.getValue().equals(input_row.col2)){
    output_row.expectedCol1 = currentPair.getKey();
    break;
  }
}
// move to next index
context.index++;

希望对您有所帮助

在 tMap 中,您必须加入(内部加入,以防您想要获得匹配的记录)输入和查找,如下所示。

row3.COL3=row4.COL2

然后将 tMap 右侧的结果映射为

行 4.COL1 --> 结果。

我有另一个建议,我做了一些改变,100% 工作并且只使用没有 JAVA 片段代码的 Talend 组件。

1、在tFileExcelInput中添加一列(例如rank)表示行号;结果缓冲到 tHashOutput_1

2、使用tMap将tHashOutput_1与自己连接起来,按rank过滤,确保select全部匹配

3、使用tUniqRow消除重复