<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-75  評論-193  文章-5  trackbacks-0

    需求:

    kettletest1數據庫中有table_source數據表,結構如下:

    1. Id                主鍵
    2. t_id             數據時間
    3. part_id        實例ID
    4. yg               數據字段1
    5. wg              數據字段2

    該表中的數據對于不同的實例ID,一分鐘一條數據,t_id字段表示數據的時間,精確到分鐘。

    kettletest2數據庫中有table_target數據表,結構如下:

    1. Id                     主鍵
    2. marketdate      數據日期,格式為 yyyy-MM-dd
    3. pointtime        時間,格式為 HH:mm
    4. pointnumber   時間的數字表示,00:01表示為1,00:00表示為1440
    5. plantcode        實例Code
    6. yg                    數據字段1
    7. wg                   數據字段2

    需定期將table_source表中的數據獲取至table_target表中,并進行如下處理:

    1、將t_id數據時間字段拆分為三個字段,分別為marketdate、pointtime、pointnumber。

            a、marketdate取t_id的日期部分。
            b、pointtime取t_id的時間部分。
            c、pointnumber為時間的數字表示,等于hour*60+minute。
            d、但當t_id的時間為某日的00:00時,需將其轉化為24:00,并且marketdate需取日期的前一天。如t_id為2008-12-04 00:00,則marketdate為2008-12-03,pointtime為24:00,pointnumber為1440。

    2、將part_id字段映射為plantcode字段,并根據如下規則進行轉換:
            part_id                 plantcode
             3206                        P01
             3207                        P02
             3208                        P03

    測試中使用的數據庫均為mysql數據庫。

    實戰:

    整個轉換工作共分為三個步驟,如下圖:

    job

    1、定義需獲取的數據的日期

    trans1

    2、刪除table_target表中已有數據,注意一定要將“執行SQl語句”面板中的“變量替換”要選上,否則SQL語句中的變量不會被替換,我剛開始沒注意到這個地方,找問題找了半天。

    trans2

    3、獲取table_source中的數據,并將其插入table_target表

    trans3

            3-1、獲取table_source表的數據

    trans3-1

            3-2、值映射

    trans3-2

            3-3、字段選擇

    trans3-3

            3-4、對t_id字段進行處理,增加了pointnumber字段。在這一步驟中發現kettle的一個bug,就是不能在JavaScript中使用str2date函數,錯誤的具體信息參見:http://jira.pentaho.com/browse/PDI-1827。這個問題也折騰了好長時間,剛開始怎么也想不通這個函數使用時怎么會報錯呢,后來只好從字符串中截取年、月、日信息。

           該步驟中還存在另外一個使人困惑的問題,就是點擊“測試腳本”按鈕,會報錯,但是執行job和transformation時則不會報錯。

    trans3-4

            3-5、增加pointnumber字段至輸出結果中

    trans3-5

            3-6、插入數據至table_target表

    trans3-6

     

    3-4步驟中的JavaScript代碼如下:

    var pointTimeStr = pointtime.getString();
    var pointnumber = 1;

    if (pointTimeStr == "00:00") {

       
    var marketDateStr = marketdate.getString();
       
    var marketDateYear = substr(marketDateStr, 0, 4);
       
    var marketDateMonth = str2num(substr(marketDateStr, 5, 2))-1;
       
    var marketDateDay = substr(marketDateStr, 8, 2);

       
    var date = new Date();
        date.setYear(marketDateYear);
        date.setMonth(marketDateMonth);
        date.setDate(marketDateDay);

       
    var temp1 = dateAdd(date, "d", -1);
        marketdate.setValue(date2str(temp1,
    "yyyy-MM-dd"));
        pointtime.setValue(
    "24:00");

        pointnumber
    = 1440;
    }
    else {   
       
    var hourStr = pointTimeStr.substr(0, 2);
       
    var hour = str2num(hourStr);
       
    var minuteStr = pointTimeStr.substr(3, 5);
       
    var minute = str2num(minuteStr);
       
        pointnumber
    = hour * 60 + minute;
    }

     

    至此,整個轉換工作完成,小結一下:

        如果對kettle等etl工具比較熟悉的話,使用etl工具進行數據轉換、抽取等事情還是比較方便的,比起寫程序還是有優勢的。但是這個轉換過程中遇到的kettle的兩個bug比較讓人頭疼,覺得kettle好像還不是很穩定。

    posted on 2008-12-14 21:55 The Matrix 閱讀(34331) 評論(5)  編輯  收藏 所屬分類: Kettle

    評論:
    # re: Kettle的第二個實踐--數據獲取并轉換 2009-01-06 19:59 | Eric sune
    你好,我最近也剛剛開始使用這個工具,請問一下 執行SQL的時候 里面的參數要如何才能傳遞進去?  回復  更多評論
      
    # re: Kettle的第二個實踐--數據獲取并轉換 2009-01-09 13:11 | The Matrix
    @Eric sune
    在上面的這個例子中,define acquire date步驟就定義了獲取日期參數,然后在后面的刪除數據的sql中就用到了該參數  回復  更多評論
      
    # re: Kettle的第二個實踐--數據獲取并轉換 2009-05-05 17:25 | 初學者
    我想要從上面的查詢結果來獲取數據怎么辦?
    你這里是從系統參數里來獲取的,謝謝。  回復  更多評論
      
    # re: Kettle的第二個實踐--數據獲取并轉換[未登錄] 2011-03-17 16:51 | fd
    ggdgdgd  回復  更多評論
      
    # re: Kettle的第二個實踐--數據獲取并轉換 2013-03-27 15:27 | 少年了沒
    執行sql語句的結果怎么取得  回復  更多評論
      
    主站蜘蛛池模板: 亚洲日韩在线视频| 国产无遮挡又黄又爽免费视频| 日韩亚洲精品福利| 亚洲日韩久久综合中文字幕| 91短视频免费在线观看| 亚洲自偷自拍另类图片二区| 9420免费高清在线视频| 亚洲毛片在线免费观看| 无码人妻一区二区三区免费手机| 久久精品国产亚洲av麻豆图片 | 亚洲国产一区二区三区在线观看| 在线精品一卡乱码免费| 涩涩色中文综合亚洲| 成人免费午夜无码视频| 无码色偷偷亚洲国内自拍| 高清在线亚洲精品国产二区| 日韩毛片在线免费观看| 亚洲精品无码久久久久去q | 成在人线av无码免费高潮水| 亚洲午夜久久久影院伊人| 无码午夜成人1000部免费视频| 亚洲精品国产成人99久久| 97性无码区免费| 亚洲成AV人影片在线观看| 国产精品亚洲精品日韩已方| 国产精品网站在线观看免费传媒 | 成人片黄网站色大片免费观看cn | 亚洲乱码国产乱码精品精| 222www在线观看免费| 国产亚洲一卡2卡3卡4卡新区| 亚洲精品国产电影| 6080午夜一级毛片免费看| 青青青亚洲精品国产| 亚洲第一AAAAA片| 毛片免费视频在线观看| 久久久久久av无码免费看大片| 日木av无码专区亚洲av毛片| 日本免费电影一区| 免费h视频在线观看| 亚洲精品第一国产综合亚AV| 亚洲精品国产精品乱码不99|