kettle中使用javascript步驟和fireToDB函數實現自訂資料庫查詢,kettlefiretodb
kettle中使用javascript步驟和fireToDB函數實現自訂資料庫查詢
假設你需要實現非傳統的資料庫查詢操作,為了討論這種情景,我們假設你需要讀取資料庫中的Regex,然後檢查輸入的每行的欄位匹配運算式的個數。
在javascript步驟執行資料庫查詢
在javascript步驟初始化的時候,查詢資料庫,擷取Regex記錄集。然後每一行的輸入資料迴圈檢查是否匹配運算式,如果匹配,記錄變數加一,最後把結果寫到到前行的新增欄位中。思路很清楚,但是如何在javascript步驟實現資料庫查詢?
這裡介紹一個非常有用的函數fireDb(),他需要事先在轉換中定義好一個資料庫連接作為參數,以及一個SQL查詢語句參數,這裡的sql只能是select查詢語句,因為fireDb()函數沒有事務或錯誤處理,返回值是記錄行的數組,每行是一個有多個欄位的數組。
下面是程式碼片段,這段代碼只執行一次,最好放在initialization tab,這樣可以提高javascript步驟的執行效率。
// read all rules from Scrapbook DB
var xArr =fireToDB("Scrapbook", "SELECT rule FROM rules;");
var regex = [];
// for each row, save the returned rulefor later use
for (var i in xArr){
regex.push(xArr[i][0]);
}
下面這些代碼是每行都要執行的;
var rules_matched = 0;
var jstr = newjava.lang.String(string_to_test);
// count matching rules
for(var i in regex){
varrule = regex[i];
if (jstr.matches(rule)){
rules_matched++;
}
}
可以在這裡下載樣本,試試fireDb()函數的用法,樣本中mysql的樣本資料的SQL語句。其中代碼中“Scrapbook”是轉換中定義的與mysql資料庫連接的名稱。