sequence - 水壶:用无冲突的顺序填充字段

标签 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字段在原始流中是唯一的。

    最佳答案

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

  • 创建临时数据库表(可能是内存数据库表)
  • 使用 user_id 1000..9999 和 user_name=null 的记录初始化它(使用 TableOutput)
  • 通过使用 user_name 更新相应的数据库记录,打开输入流并处理具有 user_id 1000..9999 的记录。 (使用更新)忽略所有其他记录。
  • 关闭并重新打开输入流
  • 通过以下方式处理 user_id 不在 1000..9999 中的每个输入流记录:
  • 通过执行 SQL 查询 (DBLookup) 获取最低的未使用 user_id
    SELECT MIN(user_id) FROM temporary_table WHERE user_name IS NULL;
    
  • 使用当前用户名更新此记录(使用更新)
  • 使用非空用户名读取临时数据库表中的每条记录(使用 TableInput)并写入输出流
  • 删除临时数据库表

  • 希望这可以帮助

    关于sequence - 水壶:用无冲突的顺序填充字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8154068/

    相关文章:

    algorithm - 如何检查数列是否不收敛?

    reporting - 使用 Pentaho BI 服务器中的 PDI 转换作为报表参数的数据源

    postgresql - Pentaho 中的数据哈希

    postgresql - 勺子转换更新给出 'duplicate key value violates unique constraint'

    java - 在 Ubuntu 14.04 64 位上运行 Spoon 时出错

    Java Midi Sequencer - 使用播放头进行音符播放

    ios - RxSwift 将 Observable<Bool> 转换为 Observable<Void>

    sql - PostgreSQL 列值必须按顺序排列

    mongodb - 限制号mongodb 输入中的行数