2017-08-28 146 views
0

我正在開發ETL。第一步是文本文件輸入,它將來自「附加輸出字段」的一些元數據添加到流中,包括文件名和上次修改。根據數據庫查詢的結果繼續流式傳輸

我必須向DB進行查詢,以驗證具有最後修改日期時間的文件名是否已經被處理。如果是這樣,流必須停止,並且下一步不能被處理。

這可能嗎?我用google搜索了一下,發現沒有例子。

回答

0

Pentaho並行處理所有步驟,所以這種線性抽象可能有點混亂。

你需要做的是不返回行,如果不想繼續處理。如果後續步驟接收到0行,則它們不會執行任何操作。

有一些方法可以做到這一點:

  1. 構建的方式您的SQL查詢,它只是返回的行是否存在具有相同名稱的文件
  2. 使用開關步驟+檢測到空流+過濾行以確保只有當你沒有從你的查詢結果時,行纔會進入下一步
0

你將很快面對的問題是:「如果我嘗試開始我的轉換已經開始?」。這聽起來像是一個學術問題,直到你的crontab開始僵局,或者你的用戶抱怨你三週前的數據被重複計算。

您需要檢查job。與所有步驟並行運行的轉變相反,工作條目依次運行。您可以使用Scripting/SQL條目並輸入條件,如this question中所述的logdate<now()-10minutes

現在,您的規範還有一個更強大的體系結構:將所有傳入文件放入特定文件夾,處理它們然後將它們移動到歸檔目錄。事實上,在處理之前將它們移動到存檔中,避免重複加載。