數據倉庫開發——Kettle使用示例


Kettle是一個開園ETL工具,做數據倉庫用Spoon。
工具:下載Spoon,解壓即可用
 
1、認識常用組件:
    表輸入
    插入\更新
    數據同步
    文本文件輸出
    更新
    自動文檔輸出
    表輸出
 
    列轉行
    增加常量
    增加序列
    排序記錄
    行轉列
    過濾記錄
    數據庫連接
 
    合並記錄
    排序合並
    記錄關聯(笛卡爾輸出)
    記錄集連接
 
    分組
    在內存中分組
 
2、第一個例子
    生成 100 個隨機數,隨機數取值於[0,100)之間, 計算小於等於 50 的隨機數個數和 大於50 的隨機數個 數。 並把這兩個統計數字放在數據庫表的一行的兩列中, 即輸出的結果有一行,一行包括兩列,每列是一個統 計值。
 
     
    1.生成隨機數,0-1區間內
    2.定義常量,100
    3.計算,隨機數乘以100,使得生成的數據在0~100區間內
這里后面有分支,默認是數據分發,這里要保證數據全部都流到兩條支路去要選擇復制分發模式,在計算器這個步驟上面右鍵,選擇數據發送,復制發送模式
    4.條件判斷有幾種方法,這里用的是根據java代碼過濾記錄
    5.分組計算總條數,4步中結果為真進分組1,否則分組2,分組里面計算總條數
    6.關聯記錄
    7.輸出
 
3、數據倉庫
    目標:數據倉庫就是把別的業務組的表查出來, 再轉換, 保存到我們這邊創建的新的業務表中。后續再開發接口(http、webservice、dubbo等)給別的組調用。
 
    3.1用戶評價表中有各種評價得分,這里對經紀人的各種得分求平均分保存到bidb_brance中
                   
    0.建立數據庫連接
        數據源1:mysql://172.16.2.187:33096/jjskfang
        數據源2:mysql://172.16.2.245:33096/bidb_branch
 
    1.表輸入
        使用數據源1,
        初始數據為:
        SELECT ID, WORKER_ID, WORKER_NAME, USER_ID, USER_NAME, GRADE, SCORE, PROFESS_SCORE,
        KNOW_SCORE, SERVICE_SCORE, TAGS, CONTENT, ORDER_ID, ORDER_TYPE, `STATUS`, MODIFY_TIME,
        CREATE_TIME FROM jjskfang.CUSTOMER_COMMENT
        WHERE `STATUS` = 1
 
    2.字段選擇
        選擇必要的字段,這里也可以省略這一步
        選擇:WORKER_ID, WORKER_NAME,SCORE, PROFESS_SCORE, KNOW_SCORE,SERVICE_SCORE
 
    3.排序:選擇排序字段為WORKER_ID,分組前必須對分組字段進行排序,類似禹sql里面的group by
 
    4.分組:根據WORKER_ID分組,同時使用聚合函數(這里就完全類似sql里面的分組和聚合函數了),如下圖:
                                        
 
    5.計算器:用計算器計算出各個指標的平均數,如圖:
   
 
    6.插入|更新:這一步將數據保存到目標數據庫中,准備工作為先在數據源2中創建需要的表:
        建表如圖:
                         
        插入|更新如圖:選擇數據源2,表為剛剛創建的表
                                            
        這一步根據workerId查詢判斷執行更新或者插入操作,到這里這個簡單的轉換工作就完成了,可以去數據庫里面查詢一下,看到數據都出來了是不是滿滿的成就感呢
 
                           
 
    感悟:做到這里讓我想到一個問題,以前做車輛管理系統高危用戶五級風險預警,當時是用java算出來的,真是讓人頭大。先去查詢用戶駕駛行為,再查詢用戶行為報警等各種數據,然后拼命的循壞各種判斷,得到分析后的數據再保存到另外一個表中,來來回回寫了一堆代碼,最后發現執行的時候,定時器一啟動服務啟內存就完全不夠用了,因為我開始是一次性把所有數據查出來再分析的。然后又去想怎么改程序,最終終於拼湊出來了。
現在用kettle去做貌似就簡單多了,現在感受到的是開發起來方便,干凈利落。不知道放到定時器運行的時候性能效率怎么樣?后續持續研究。
 
    4、java調用Kettle示例
        從網上復制的代碼, 后續自己寫示例驗證
public class KettleTest {
    public static void main(String[] args) {
        String filename = "/wang/work/study/Kettle/sample/excel_trans.ktr";
        try {
            KettleEnvironment.init();
            EnvUtil.environmentInit();       
            TransMeta transMeta = new TransMeta(filename);
            Trans trans = new Trans(transMeta);
            trans.execute(null); // You can pass arguments instead of null.
            trans.waitUntilFinished();
            if ( trans.getErrors() > 0 ){
                throw new RuntimeException( "There were errors during transformation execution." );
            }
        }
        catch (KettleException e ) {
            // TODO Put your exception-handling code here.
            System.out.println(filename);
            System.out.println(e);
        }
    }
}
 
    5、java開發定時器執行ktr腳本
        這個步驟省略。
 
總結:工具的使用並不難,關鍵在於理解業務,還有寫sql的能力!
 
僅供參考,不足之處還請見諒,歡迎指正!轉載請標明出處。如有疑問,歡迎評論或者聯系我郵箱 1034570286@qq.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM