2014-08-27 75 views
0

使用PDI(Kettle)我通過使用CSV InputTable Output步驟來填充我的數據庫的入門級。這很好,但是,我也想確保剛剛插入的數據滿足特定的標準,例如,字段不爲NULL等PDI:將SELECT語句的結果返回給數據流

通常這是數據庫約束的工作,但是,我們希望保留數據庫中的數據,即使其數據庫出錯(用於調試目的也是如此。 csv文件...)。因爲它只是一個臨時表,所以它不會造成任何問題,因爲它不會造成任何問題。

所以要做到這一點,我寫了一些SELECT Count(*) as test123 ...聲明,可以即時顯示是否有錯誤,並且易於處理(如果test123的值爲0,那麼所有的都是好的,否則該作業需要中止)。

我在PDI轉換中使用Execute SQL Statements步驟執行這些語句。我預計結果會自動傳遞給我的數據流,所以我還使用了Copy rows to result步驟將它傳遞給正在執行的作業。

這是問題最可能出現的地方。 我認爲SELECT語句的結果不會自動傳遞給我的數據流,因爲當我在主作業中使用變量${test123}(我認爲這將通過執行SELECT Count(*) as test123 ...隱式創建)執行Simple evaluation時,我從來沒有得到預期的結果。

我在PDI文檔中找不到任何此問題的線索,所以我希望這裏的某些人有一些PDI的經驗,並且可以提供幫助。如果有些東西還不清楚,只需提示一下,我會用更多信息編輯帖子。

問候

編輯: 這是我的主要工作的一個簡單的模型:

開始 - >加載數據(轉換) - >檢查數據(轉換) - >簡單的評價 - - > ...

+0

因此,您在轉換中執行這些SQL語句,其中數據流來自作業或通過連接到數據庫來檢查它? – Seb 2014-08-27 11:12:35

+0

「執行SQL語句」步驟連接到數據庫並執行語句。這是在一個單獨的轉換中完成的,該轉換由一個作業調用。 – daZza 2014-08-27 11:14:26

+0

SQL是必須的嗎?怎麼樣在你的「檢查數據」 - 轉換JavaScript腳步? – Seb 2014-08-27 11:25:00

回答

1

如果我正確地閱讀了你的文章,你正在混淆一些概念。

  1. 您不需要執行SQL腳本,這是表輸入步驟的一項工作。 只需在表格輸入中鍵入您的查詢,您就可以預覽數據,並通過在後續步驟中使用預覽來查看它從步驟進入數據流。執行SQL腳本不是輸入步驟,這意味着它不會將外部數據添加到您的數據流中。

  2. 輸出字段不是變量。使用「設置變量」步驟設置變量,該步驟採用單個輸入行並將特定字段映射到變量,該變量可以在父作業或根作業級別保留。領域就是:領域。如果您有複製行到結果步驟,它們從一個步驟傳遞到下一個步驟,最後傳遞給父作業,但它們不是變量。

+0

這解決了我的轉換和工作。謝謝 – daZza 2014-08-28 12:29:17