2011-11-16 49 views
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_id,範圍在1000..9999之間,不會引起衝突。優選儘可能最低。

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

回答

3

我不知道燒水壺環境中,你使用的是什麼,但一般的程序可以如下:

  1. 創建一個臨時數據庫表(也許在內存數據庫表)
  2. 與記錄初始化它with user_id 1000..9999 and 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; 
      
    • 更新這一記錄與當前USER_NAME(使用更新)

  6. 閱讀的臨時數據庫表中的記錄與非空USER_NAME(使用TableInput),並寫入到輸出流
  7. 刪除臨時數據庫表

希望這有助於

+0

這解決了它,但開銷:從每一行中選擇一個。 ---我有一個「用戶定義的Java類」的概念,它將合併序列的輸出和有序的數據集。它將有一個TreeSet(Java類)用於可見的ID。 ---我認爲這不是一個非常罕見的需求,所以應該有一個非程序員解決方案。也許,我在做夢:-)無論如何,「TableOutput」暗示對我來說非常有價值。 – Notinlist