一,安裝Kettle
1,關于簡易安裝Kettle
第一次接觸
kettle
(以前隻是聽過罷了),摸索了幾天,在
mac
源碼安裝失敗,轉而快速安裝。在
mac
上安裝最新版
kettle
并成功啟動代碼如下:
☁ ~ brew install kettle
☁ ~ cd /usr/local/Cellar/kettle/8.2.0.0-342/
☁ 8.2.0.0-342 cd libexec
☁ libexec spoon.sh
2,關于源碼嘗試安裝kettle
- 【Kettle源碼下載下傳】:https://github.com/pentaho/pentaho-kettle
git clone https://github.com/pentaho/pentaho-kettle
# or
git clone [email protected]:pentaho/pentaho-kettle.git
- 設定
setting.xml
将
setting.xml
參見: settings.xml 在你的
Maven
啟動目錄
/.m2
中。
☁ pentaho-kettle [master] ⚡ ll /Users/zhangbocheng/.m2
total 8
drwxr-xr-x 97 zhangbocheng staff 3104 11 8 17:28 repository
-rw-r--r-- 1 zhangbocheng staff 2345 11 8 20:10 setting.xml
- 安裝
☁ pentaho-kettle [master] mvn clean install >> /Users/zhangbocheng/Desktop/kettle.log
- 關于
error.log
未設定
setting.xml
報錯問題
.....................................
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 47:49 min
[INFO] Finished at: 2019-11-08T17:44:01+08:00
[INFO] Final Memory: 230M/985M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project pdi-ce: Could not resolve dependencies for project org.pentaho.di:pdi-ce:pom:9.0.0.0-SNAPSHOT: Could not transfer artifact org.hitachivantara.karaf.assemblies:client:zip:9.0.0.0-20191107.125717-160 from/to pentaho-public (http://nexus.pentaho.org/content/groups/omni/): Failed to transfer file http://nexus.pentaho.org/content/groups/omni/org/hitachivantara/karaf/assemblies/client/9.0.0.0-SNAPSHOT/client-9.0.0.0-20191107.125717-160.zip with status code 502 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <goals> -rf :pdi-ce
setting.xml
後,就一直處在等待中。
二,實驗案例
關于課程實驗,第一次需要親手搭建
Kettle
,這算是一次比較有意思的工程實踐機會,花最少的時間來認識認識比較流行而且強大的
ETL
工具之一--
Kettle
。
1,關于實驗題目
任務描述:用
kettle
完成下列實驗,結果存儲到
MySQL
(或者
CSV
)。已知
Excel
檔案,包含列(姓名,年齡,身份證号碼,性别,挂号日期時間,門診号),資料若幹。
生成資料1,包含列(日,性别,兒童/青年/中年/老年,人次),其中兒童/青年/中年/老年的年齡段自己定義;
生成資料2,包含列(省份,hour,人次)
kettle
,力求簡單,僅考慮輸入輸出均為
Excel
,首先按照題目要求捏造一批資料,如下圖所示:

Excel
字段說明:
姓名:字元串
年齡:整型
身份證号碼:字元串
性别:字元串
挂号日期時間:日期時間型
門診号:整型
進入安裝目錄
/usr/local/Cellar/kettle/8.2.0.0-342/libexec
啟動
kettle
:
根據實驗要求,其實所涉及的問題僅僅是輸入和輸出,轉換(分組統計)。建立任務之初,有必要先百度
or Google
看看
kettle
的輸入輸出是如何實作的?
2,執行個體預熱
最容易實作的簡單案例就是生成随機數,并存儲到
txt
檔案。
1)建立一個轉換儲存為
test_random
(字尾為
.ktr
)通過拖拽插件方式,在核心對象->輸入和輸出分别拖拽“生成随機數”和“文本檔案輸出”兩個按鈕,然後點選“生成随機數”并按下
sheft
鍵,用滑鼠指向“文本檔案輸出”,以生成剪頭,表示資料流向。如下圖:
2)編輯輸入流,即“生成随機數”按鈕,如圖所示:
關于支援的随機資料類型有:
3)然後編輯輸出流,即“文本檔案輸出”按鈕,如圖所示:
輸出檔案名支援預覽模式,即點選圖中“顯示檔案名...”按鈕:
4)最後執行,看看結果。
3,實驗步驟
通過上述簡單實驗,我們知道了輸入輸出流的基本操作,下面開始進入正題。
1)将上述實驗中的輸入輸出全部改為
Excel
。進行相關配置說明如下:
Excel
輸入:
在檔案選項下,表格類型根據實際進行适配(
xls or xlsx
),在檔案或目錄後,點選“浏覽”選擇自己的源資料檔案,然後點選“添加”;
在工作表選項下,點選“擷取工作表名稱...”添加工作表,即
Excel
中的
sheet
;
在字段選項下,點選“擷取來自頭部資料的字段...”自動擷取字段,由于原
Excel
中整型資料轉入會變成浮點型,是以需要進行更改,如圖所示:
最後可以進行預覽。
Excel
輸出:隻需要配置輸出檔案名即可,其他均為預設。
2)接下來需要處理的就行核心步驟,即轉換。首先針對
生成資料1
進行分析,由于
kettle
中分組需要首先進行排序,進而需要處理的點有:
(1)将挂号日期時間截取到日;
(2)對年齡按照一定标準進行轉換(自己定義);
(3)按照待分組的字段進行排序;
(4) 進行分組統計。
按照上述思路,在“轉換”和“統計”核心對象中,分别找到對應元件,完成基本資料流節點配置,如圖所示:
在“字段選擇”元件中,對時間進行處理。在中繼資料選項中,需要對
Date
進行轉換成
String
,格式設定為
yyyy-MM-dd
,同時可以對字段進行更名操作。另外還可以對字段進行選擇,修改,移除。如圖所示:
注意,這裡如果不将時間設定為
String
,進行一個小實驗可以可以發現,最後存儲的依然是帶時間的日期,本次實驗過程中在這個坎糾結了,錯誤地以為是
kettle
不支援多關鍵字(兩個以上)排序,如下圖所示:
經過與各位大佬溝通确認,
kettle
是不可能不支援對多關鍵的排序的,對此深信不疑,那麼問題就從
kettle
本身存在的可能
bug
消失了,對一個小白而言,不熟悉
kettle
本身應遵守的規則,這是緻命的,隻能對懷疑的其他種種可能進行逐一實驗了。期間懷疑過待排序關鍵字的順序問題,測試發現都不是問題的根本原因,整個過程下來隻有對日期做過預處理,而且從錯誤中發現,引起錯排的唯一合了解釋就是日期按照預處理之前的原始資料的日期時間型排序的。單獨對日期設計實驗,如果對預處理生效,那麼輸出也是預期結果。
- 驗證日期實驗
輸入流,如圖所示:
假設日期類型不改成
String
,如圖所示:
輸出流,結果預覽,如圖所示:
輸出流,
Excel
輸出,如圖所示:
驗證明驗室結果發現,預覽資料并沒有存儲到輸出
Excel
中去,然後嘗試轉換為
String
,輸出便一緻了。再次驗證,
kettle
對日期類資料處理有待提高。
在“數值範圍”元件中,對年齡進行處理,劃分标準自己定義(如下定義可能存在瑕疵)如圖所示。
在“排序記錄”元件中,按照生成資料要求,需要對日期,性别,年齡段進行來襲,如圖所示。
在“分組”元件中,進行分組統計,如圖所示。
3)執行,結果如圖所示。
4,實驗二簡要說明
針對
生成資料2
進行分析,需要處理的點有:
(1)将挂号日期時間設定
String
,由于不能直接從預設格式中提取日,需要采取字元串截取;
(2)對日期和身份證進行字元串截取,分别提取日和省份代碼(身份證前兩位);
(4)對省份和時間段進行值映射;
整體設計資料流圖,如圖所示:
在“剪切字元串”元件,設定如下:
在“省份值映射”和“時間值映射”元件中,分别設定如下:
運作結果,如圖所示:
三,總結
通過本次實驗,初步認識了一下強大的
ETL
工具之
kettle
,要想擷取更多知識就得更多實驗,從錯誤中反思學到的遠比從成功中收獲更多。作為工具,隻有多多實驗才能更好的掌握好它,印證了那句經典--“實踐出真知”。
PS:如果你覺得文章對你有所幫助,别忘了推薦或者分享,因為有你的支援,才是我續寫下篇的動力和源泉!
作者:
zhangbc
出處:
http://www.cnblogs.com/zhangbc/
格言:
我願意做一隻蝸牛,慢慢地向前爬,不退縮,不洩氣,做好自己,立足當下,展望未來!
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
posted @
2019-11-12 13:44
天堂的鴿子
閱讀(1207)
評論(0)
編輯
收藏
舉報