greenplum已經很少人用了,最近新專案要用這個的時候發現網上資料不多,尤其是kettle+gp的組合。所以最後經過幾天加班才研究出來,特地記錄一下。
這裡用的kettle是最新的版本kettle9.0.0.0-423; greenplum是6.0.1的;gp安裝在linux上的虛擬機器上,這裡說寫merge模式的。
首先為什麼要用gpload這個元件呢,是因為開始用kettle的表輸出和插入更新這兩個元件來把mysql的資料抽到greenplum裡,速度實在是慢到接受不了,後面用postgresql批量載入這個元件發現快了很多,但這個元件只有插入和清空,並沒有更新。
gpload元件的流程大概是把資料先放到本地檔案,通過greenplum的gpload命令用外部表的形式批量載入資料到資料庫去吧;以下是gpload元件的設定:
以上配置都使用了很多引數,這些都是為了在開發環境和生產環境使用的,除了幾點說明以外其他無關重要:
1)圖一的ip指向的是這個kettle轉換要在哪個機器上執行,並且埠是該機器上對應的greenplum客戶端的埠;
2)圖二中path to the gpload指向的是gpload.py這個指令碼的路徑,這個python指令碼在greenplum安裝目錄下的bin目錄裡,另外這個目錄下還有乙個gpload.bat(windows環境)或者是gpload.sh(linux環境)的說明檔案,會提示需要安裝什麼版本的python才可以。
3)如果需要在windows環境下執行,需要把圖二中的crontrol file檔案的字尾由cfg改為yml,因為greenplum中自帶有乙個yaml的文字直譯器;
上面說了這個元件是需要呼叫gpload命令把檔案資料插入到資料庫的,所以不可避免涉及到兩個問題:空值和特殊字元。
1)空值的問題由於kettle這個版本的問題,上面元件裡的null as並沒有生效,所以不用填上面這個,並且需要修改gpload.py這個指令碼,修改以下這個地方之後,就可以把字段裡的空值當作null插入到庫里了:
2)特殊字元問題,我是用以下兩個元件實現的,js指令碼是把換行符這些處理了,另乙個replace in string 元件是處理|,,/這些字元的。
ps:1)需要使用gpload還要啟動gpfdist服務
2) merge模式下的greenplum建表不能有主鍵或唯一索引,只能建普通索引,需要指定是隨機分布。(這個還沒有想明白原理是什麼)
參考文章:
kettle元件 連線
新資料field1,field2 1,1 2,9 5,5 設定 標誌欄位是flag,關鍵字段是 field1,比較欄位是field2 合併後的資料 field1 field2 flag 1 1 identical 2 9 changed 3 3 deleted 4 4 deleted 5 5 new...
kettle元件 轉換
1 列轉行 2 列轉行 3 去除重覆記錄 步驟名稱 保持唯一性 增加計數器到輸出?當勾選了此項,並在計數器欄位後給予了名稱,則將會在該字段下顯示去掉的重複行數。欄位名稱 用來去重的字段,可選多個字段,表示多個欄位都相同時表示重複。該功能類似與sql中的distinct關鍵字。4 增加序列 乙個序列是...
Kettle的執行sql指令碼的元件
kettle的執行sql指令碼的元件要是下面的上邊sql會報錯誤,無法儲存成功,下面的下邊sql就能儲存成功,這個元件對於sql是有限制的 update dsjydd.t cskqzlfx dqst ylts b set b.ylts select c.ylts from select count ...