第一次接觸kettle
(之前只是聽過罷了),摸索了幾天,在mac
源碼安裝失敗,轉而快速安裝。在mac
上安裝最新版kettle
併成功啓動代碼以下:git
☁ ~ brew install kettle ☁ ~ cd /usr/local/Cellar/kettle/8.2.0.0-342/ ☁ 8.2.0.0-342 cd libexec ☁ libexec spoon.sh
git clone https://github.com/pentaho/pentaho-kettle # or git clone git@github.com:pentaho/pentaho-kettle.git
setting.xml
將 setting.xml
參見: settings.xml 在你的Maven
啓動目錄/.m2
中。github
☁ 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
報錯問題apache
..................................... [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
後,就一直處在等待中。bash
關於課程實驗,第一次須要親手搭建Kettle
,這算是一次比較有意思的工程實踐機會,花最少的時間來認識認識比較流行並且強大的ETL
工具之一--Kettle
。dom
任務描述:用kettle
完成下列實驗,結果存儲到MySQL
(或者CSV
)。已知Excel
文件,包含列(姓名,年齡,身份證號碼,性別,掛號日期時間,門診號),數據若干。maven
生成數據1,包含列(日,性別,兒童/青年/中年/老年,人次),其中兒童/青年/中年/老年的年齡段本身定義;
生成數據2,包含列(省份,hour,人次)工具
第一次接觸kettle
,力求簡單,僅考慮輸入輸出均爲Excel
,首先按照題目要求捏造一批數據,以下圖所示:
Excel
字段說明:測試
姓名:字符串 年齡:整型 身份證號碼:字符串 性別:字符串 掛號日期時間:日期時間型 門診號:整型
進入安裝目錄/usr/local/Cellar/kettle/8.2.0.0-342/libexec
啓動kettle
:
根據實驗要求,其實所涉及的問題僅僅是輸入和輸出,轉換(分組統計)。建立任務之初,有必要先百度or Google
看看kettle
的輸入輸出是如何實現的?ui
最容易實現的簡單案例就是生成隨機數,並存儲到txt
文件。插件
1)新建一個轉換保存爲test_random
(後綴爲.ktr
)經過拖拽插件方式,在覈心對象->輸入和輸出分別拖拽「生成隨機數」和「文本文件輸出」兩個按鈕,而後點擊「生成隨機數」並按下sheft
鍵,用鼠標指向「文本文件輸出」,以生成剪頭,表示數據流向。以下圖:
2)編輯輸入流,即「生成隨機數」按鈕,如圖所示:
關於支持的隨機數據類型有:
3)而後編輯輸出流,即「文本文件輸出」按鈕,如圖所示:
輸出文件名支持預覽模式,即點擊圖中「顯示文件名...」按鈕:
4)最後執行,看看結果。
經過上述簡單實驗,咱們知道了輸入輸出流的基本操做,下面開始進入正題。
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)執行,結果如圖所示。
針對生成數據2
進行分析,須要處理的點有:
(1)將掛號日期時間設置
String
,因爲不能直接從預設格式中提取日,須要採起字符串截取;(2)對日期和身份證進行字符串截取,分別提取日和省份代碼(身份證前兩位);
(3)按照待分組的字段進行排序;
(4)對省份和時間段進行值映射;
(4) 進行分組統計。
總體設計數據流圖,如圖所示:
在「剪切字符串」組件,設置以下:
在「省份值映射」和「時間值映射」組件中,分別設置以下:
運行結果,如圖所示:
經過本次實驗,初步認識了一下強大的ETL
工具之kettle
,要想獲取更多知識就得更多實驗,從錯誤中反思學到的遠比從成功中收穫更多。做爲工具,只有多多實驗才能更好的掌握好它,印證了那句經典--「實踐出真知」。