kettle從入門到精通 第六十四課 ETL之kettle kettle中執行SQL指令碼步驟,使用需當心

慕容尘轩發表於2024-06-03

1、群裡有不定時會有同學反饋執行SQL指令碼步驟使用有問題,那麼咱們今天一起來學習下該步驟。trans中的執行SQL指令碼有兩方面功能,使用時需小心,不然很容易踩坑。

官方定義:

翻譯:

您可以使用此步驟執行 SQL 指令碼,可以選擇在轉換的初始化階段執行一次,或者針對步驟接收的每一行輸入執行一次。第二個選項可用於在 SQL 指令碼中使用引數。

2、執行 SQL 指令碼的預設功能是隻在轉換的初始化階段執行一次,這一點非常容易忽視。示例如下圖所示:

1)生成記錄步驟生成兩條資料。

2)寫日誌-one記錄日誌。

3)執行SQL指令碼執行簡單的查詢語句:select now() from dual;

4)寫日誌two記錄日誌。

3、執行SQL指令碼中的執行每一行不進行勾選,表示此步驟只在初始化階段執行一次。如下圖所示:

根據上圖日誌可以清楚的看到寫日誌two步驟只執行了一次,因為它的前置步驟執行SQL指令碼也只執行了一次。

另外如果在寫日誌two中新增前置步驟欄位name,流程會出現錯誤無法正常執行。這是因為執行SQL指令碼步驟只在初始化時執行一次,此時流中沒有欄位name導致的。

看過原始碼的應該瞭解執行SQL指令碼步驟肯定是根據是否執行每一行引數來決定是在init還是在processRow方法中執行。

4、執行SQL指令碼中的執行每一行勾選,表示對步驟接收的每一行輸入執行一次。如下圖所示:

上圖可以清晰的看到寫日誌two可執行了兩次,那是因為執行SQL指令碼也執行了兩次,同時前置步驟的中的name欄位也可以正常列印了。

相關文章