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欄位也可以正常列印了。