【kettle抽取Orecle/Mysql數據至HDFS】諸如‘\u0001’等特殊分隔符表示法

【kettle抽取Orecle/Mysql數據至HDFS】諸如‘\u0001’等特殊分隔符表示法

前言

由於需要設計一個每天多批次的定時作業,由於單端邏輯不能抽取出目標數據,其中涉及了跨庫問題,因此需要從mysql、Oracle數據庫中將數據同步至一個統一的環境中(hive),那麼由於數據量大(百億級),關聯數據要從各個業務部門自有的數據庫導入,kettle無疑成了最好的選擇。

設計

由於要推張業務支持表出去,因爲在這裏我根據四張業務表的前置表依賴關係做了個聚類,把四項業務的數據導入流程分在了四個方向上,方便日後有針對性的修改,效果如下:
在這裏插入圖片描述
設計完成後提交生產集羣上跑,一切都很順利:
在這裏插入圖片描述
查看了一下中間文件,問題來了:
在這裏插入圖片描述
‘\u0001’分隔符失效!

問題分析

按照公司的規範,hive外部表的文件分隔符統一使用‘\u0001’,但是筆者在job中設置的變量失效了,很明顯kettle不支持特殊字符的這種寫法:
在這裏插入圖片描述
問題的關鍵在於,找到一種kettle支持的特殊字符的寫法。

解決辦法

查閱網上的一些現有資料後,筆者找到了解決辦法,根據ASCII碼錶,我們在kettle中採用$[十六進制值]方式來表示:
在這裏插入圖片描述

比如‘\u0001’的十六進制是01,就用$[01]來表示:
在這裏插入圖片描述
隨後再執行,去hdfs上查看文件就看到可以正常分隔了:
在這裏插入圖片描述

後記

根據自己的需要,需要什麼樣的分隔符,就在ASCII碼錶上找到對應的分隔符十六進制數,寫入$[]即可。

發佈了48 篇原創文章 · 獲贊 71 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章