加入后 Pentaho 将值映射到字段

Pentaho map values to field after join

我正在使用 Pentaho Data Integration 进行数据源集成,我需要加入一个 table A 和多个 Google Analytics 数据流(我们称它们为 GA_A,GA_B, GA_C, ... GA_Z). 所有 GA 流都有相同的字段,但它们来自不同的配置文件。我在每个合并步骤中使用 LEFT OUTER JOIN 来保留 table A 中的所有数据,同时添加每个 GA 数据流的值。问题是,当我进行连接时,每个数据流中的所有 GA 字段都添加到结果中,但用下划线重命名。这是一个例子:

GA_A , GA_B 和 GA_C 都有字段 "name" 并连接到 table A。在最后的连接结果中,我获取字段 "name" 、 "name_1" 和 "name_2").

这显然是由于 LEFT OUTER JOIN 的性质造成的。但是,我想 "map" of "send" 来自 "name_1"、"name_2"、"name_3" 等的所有值到字段 "name"。我怎样才能做到这一点?我看到 PDI 中有一个 "Value Mapper" 步骤,但我不想对从 GA 带来的 10 个字段中的每一个都使用一个步骤(另外,我不确定该步骤是否符合我的要求做)

谢谢!

正如@Brian.D.Myers所说,有多种解决方案可用。

首先,如果所有 GA 流都具有相同的结构,则无需对所有这些流都使用 join - 您可以先合并所有数据(只需将它们定向到同一步骤,即虚拟步骤),然后再执行连接 - 在这种情况下,您不会获得多个 name_* 字段。

但是,如果 table A 和 GA 流中仍有同名的字段 - 它们显然会用下划线重命名(如您所指出的,这是必不可少的)。要处理这个问题,有几个选项:

  1. 如果您只需要复制值 - 使用 Set field value 步骤 - 它会将值从一个字段复制到另一个字段
  2. 如果有一些复杂的处理逻辑 - 使用 Javascript 步骤
  3. 如果流相对较小并且您实际上需要保留这两个字段 - 您可以使用 "Stream lookup" 步骤而不是 Merge join - 它允许您指定 "merged" 列的名称所以没有发生命名冲突。