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

Not*_*ist 5 pentaho sequence kettle

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

user_id (integer)
user_name (string)
Run Code Online (Sandbox Code Playgroud)

user_id是介于100和65536之间的任何内容.我想target_user_id根据以下逻辑添加(整数)字段:

  • 如果user_id在1000..9999范围内,那么让该target_user_id字段等于user_id
  • 如果没有,那么填写target_user_id1000..9999范围内的东西,不会引起冲突.最好尽可能低.

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

Gre*_*g H 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;
      
      Run Code Online (Sandbox Code Playgroud)
    • 使用当前用户名更新此记录(使用 Update)

  6. 使用非空 user_name 读取临时数据库表中的每条记录(使用 TableInput)并写入输出流
  7. 删除临时数据库表

希望这可以帮助