kettle之gpload元件使用

2021-10-18 02:20:46 字數 1592 閱讀 6019

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 ...