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

user_id (integer)
user_name (string)
user_id介于100到65536之间。我想根据以下逻辑添加target_user_id(整数)字段:
  • 如果user_id的范围是1000..9999,则让target_user_id字段等于user_id
  • 如果不是,则在1000..9999范围内填充target_user_id而不引起冲突。最好是最低的。

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

    最佳答案

    我不确定您使用的是哪种水壶环境,但是一般步骤如下:

  • 创建一个临时数据库表(也许是内存数据库表)
  • 使用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;
    
  • 使用当前用户名更新此记录(使用更新)
  • 使用非空的user_name读取临时数据库表中的每条记录(使用TableInput),并写入输出流
  • 删除临时数据库表

  • 希望这可以帮助

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

    10-11 03:18