我有一個Kettle變換,它將數據插入多個數據庫表中。對於每個表都有一個單獨的轉換(使用注入步驟),它進行一些計算,檢查數據並最終插入。這些子轉換使用single threader
步驟調用。確保步驟順序在水壺中運行?
主要轉型看起來是這樣的:
Input from -----> Dummy -----> Dummy -----> Dummy -----> Done
file | | |
| | |
v v v
Select Select Select
values values values
| | |
| | |
v v v
Single Single Single
threader 1 threader 2 threader 3
我的問題是,我想確保Single threader 1
完成對前Single threader 2
運行該行,依此類推特定行。這是因爲第一個單線程在一個表中添加了一個帖子,然後應該在後面的表中引用該帖子,並且如果插入了對不存在(尚)的帖子的引用,則數據庫將引發錯誤。
我不能把單線程放在一條線上,因爲我需要放棄總共大約50個的幾個域來匹配單線程的注入器。這就是select values
所做的。
我該如何解決這個問題?
你有沒有看一步「阻止這一步,直到步驟完成」? – simar
@simar是的,但我不知道如何使用它。如果我理解正確,它會阻止,直到* all *行已經通過一個步驟。這意味着我所有的行(10k +)需要緩衝到某個位置,再加上我不能利用並行性。我只想阻止,直到*一行*通過某個步驟。 – Anders
那麼如果你不需要廣泛的數據轉換操作,當我不認爲這是一個問題(或者你可以在開始執行DDL之前準備好所有數據)。在JDBC中批量插入非常有效。根據我個人的經驗,超過百萬條記錄在10秒內寫入DB – simar