0

我有一个具有 ID 和 Source(varchar) 的源表

1 Facebook
2 Twitter
3 Google

我有具有 Source(varchar) 和 Views(Int) 的传入数据

Facebook 10
Twitter 12
Reddit 14

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

  1. 检查源表中是否存在源,如果存在,请将名为 sourceID 的 INT 类型字段替换为源中的相应 ID
  2. 如果它不存在,请将其添加到源表中。

例如从上面的数据结果应该是这样的

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).

我无法找到实现这一目标的正确步骤

4

2 回答 2

2

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

第一次转换:合并源和视图

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

第二个转换:插入和更新

于 2014-05-15T22:53:04.733 回答
0

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

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

您可以指定是否要使用数据库计数器、auto_increment 字段或是否要使用 tableMax+1 作为新键。

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

于 2014-05-16T14:13:33.593 回答