水壶:填充字段,顺序没有冲突

时间:2011-11-16 15:22:50

标签: sequence pentaho kettle

我有一个具有以下结构的数据流

user_id (integer)
user_name (string)

user_id是100到65536之间的任何值。我想根据以下逻辑添加target_user_id(整数)字段:

  • 如果user_id的范围是1000..9999,那么让target_user_id字段等于user_id
  • 如果没有,则填写target_user_id,其范围为1000..9999,不会引起冲突。最好尽可能低。

流的长度低于9000. user_id字段在原始流中是唯一的。

1 个答案:

答案 0 :(得分:3)

我不确定您使用的是什么Kettle环境,但一般程序可能如下:

  1. 创建临时数据库表(可能是内存数据库表)
  2. 使用user_id 1000..9999和user_name = null(使用TableOutput)的记录对其进行初始化
  3. 使用user_name更新相应的数据库记录,打开输入流并使用user_id 1000..9999处理记录。 (使用更新)忽略所有其他记录。
  4. 关闭并重新打开输入流
  5. 使用user_id处理每个输入流记录,而不是在1000..9999中:

    • 通过执行SQL查询(DBLookup)获取最低的未使用的user_id

      SELECT MIN(user_id) FROM temporary_table WHERE user_name IS NULL;
      
    • 使用当前用户名(使用更新)

    • 更新此记录
  6. 使用非null user_name(使用TableInput)读取临时数据库表中的每条记录并写入输出流
  7. 删除临时数据库表
  8. 希望这有帮助