PDI Kettle / Spoon表到外键匹配

时间:2014-05-14 18:25:08

标签: pentaho kettle data-integration

我有一个具有ID和源(varchar)

的源表
1 Facebook
2 Twitter
3 Google

我有包含Source(varchar)和Views(Int)

的传入数据
Facebook 10
Twitter 12
Reddit 14

我希望水壶工作能够做到这一点:

  1. 检查源表中是否存在源,如果是,则替换为来自源的相应ID添加名为sourceID的INT类型的字段
  2. 如果不存在,请将其添加到源表中。
  3. E.g。从上面的数据来看,结果应该是这个

    sourceID,Views
    1,10
    2,12
    4,14 (Reddit wasn't in the table so it created it and the autoincrement gives it ID 4).
    

    我无法找到实现此目的的正确步骤

2 个答案:

答案 0 :(得分:2)

我的回答使用了两种转换:在第一步中,通过使用匹配键 source 连接源和键来创建中间结果。此外,确定最大源ID并将其存储在变量中。请注意,两个排序元素和merge元素可以替换为单个“内存中合并”元素。

First transformation: merge sources and views

在第二个转换中,读取中间结果,并根据是否存在现有源,对现有数据执行更新,或者将新条目插入到源表中。新条目的源id计算为从变量检索的最大id和从1开始的序列的总和。

Second transformation: insert and update

答案 1 :(得分:0)

我建议使用组合查找步骤。

您指定source_name是要匹配的键,source_id是要检索的键。如果表中存在源,则返回密钥,否则,将其插入表中并返回新密钥。

您可以指定是否要使用db计数器,auto_increment字段,或者是否要将tableMax + 1用作新密钥。

它允许您缓存整个表,这可以极大地提高性能。