前言
由於需要設計一個每天多批次的定時作業,由於單端邏輯不能抽取出目標數據,其中涉及了跨庫問題,因此需要從mysql、Oracle數據庫中將數據同步至一個統一的環境中(hive),那麼由於數據量大(百億級),關聯數據要從各個業務部門自有的數據庫導入,kettle無疑成了最好的選擇。
設計
由於要推張業務支持表出去,因爲在這裏我根據四張業務表的前置表依賴關係做了個聚類,把四項業務的數據導入流程分在了四個方向上,方便日後有針對性的修改,效果如下:
設計完成後提交生產集羣上跑,一切都很順利:
查看了一下中間文件,問題來了:
‘\u0001’分隔符失效!
問題分析
按照公司的規範,hive外部表的文件分隔符統一使用‘\u0001’,但是筆者在job中設置的變量失效了,很明顯kettle不支持特殊字符的這種寫法:
問題的關鍵在於,找到一種kettle支持的特殊字符的寫法。
解決辦法
查閱網上的一些現有資料後,筆者找到了解決辦法,根據ASCII碼錶,我們在kettle中採用$[十六進制值]方式來表示:
比如‘\u0001’的十六進制是01,就用$[01]來表示:
隨後再執行,去hdfs上查看文件就看到可以正常分隔了:
後記
根據自己的需要,需要什麼樣的分隔符,就在ASCII碼錶上找到對應的分隔符十六進制數,寫入$[]即可。