5

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

user_id (integer)
user_name (string)

user_id介于 100 和 65536 之间。我想target_user_id根据以下逻辑添加一个(整数)字段:

  • 如果user_id在 1000..9999 范围内,则令该target_user_id字段等于user_id
  • 如果没有,则填写target_user_id1000..9999 范围内的内容,而不会引起冲突。最好尽可能低。

流的长度在 9000 以下。该user_id字段在原始流中是唯一的。

4

1 回答 1

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. 使用非空用户名读取临时数据库表中的每条记录(使用 TableInput)并写入输出流
  7. 删除临时数据库表

希望这可以帮助

于 2011-11-25T10:37:16.320 回答