從CSV檔案匯入Hive出現中文亂碼問題解決

2021-07-08 20:06:23 字數 824 閱讀 6128

關於hive中文亂碼問題的解決辦法,網上有很多帖子,然而很多都是基於linux終端顯示字元的修改,其實上對於一些條件下的hive中文亂碼問題是無法解決的,如從csv檔案匯入到hive中出現的中文亂碼問題。

大家都知道,hive原生的字元編碼是採用utf-8方式的,這是支援中文的。然而在從oracle匯出csv檔案,注入到hive表中的時候,就發現輸入時出現中文亂碼。按照hive中文亂碼的解決思路(基於系統字元編碼的修改方式)總是沒有成功。

後來考慮到hive將資料是存放在hdfs上的,並以序列化的方式存在,因此應該考慮hdfs中文亂碼的問題,這一查,資料還不少。也看到了核心的問題所在:

hadoop涉及輸出文字的預設輸出編碼統一用沒有bom的utf-8的形式,但是對於中文的輸出window系統預設的是gbk,有些格式檔案例如csv格式的檔案用excel開啟輸出編碼為沒有bom的utf-8檔案時,輸出的結果為亂碼,只能由ue或者記事本開啟才能正常顯示。因此將hadoop預設輸出編碼更改為gbk成為非常常見的需求。 

考慮到這個問題,於是想著在hive中序列化的時候需要指定一下字元編碼,終於找到相關的解決思路,這是hive issue解決辦法中找到的。

依照這個文件的說明,對指定的表進行設定,即設定序列化編碼為gbk,以window拷貝匯入的資料編碼相匹配。

alter table ** set serdeproperties ('serialization.encoding'='gbk');
通過這樣設定,果然實現一直困擾多時的hive中文亂碼問題。

CSV檔案匯入Hive出現中文亂碼問題

在將csv檔案資料匯入hive資料倉儲時出現中文亂碼問題,現將解決方案記錄下 1,先將csv檔案編碼設定為utf 8格式 2,建立hive表 create table ifnot exists tmp.sample table id string,name string row format ser...

將csv檔案匯入MySQL中

建立資料表 匯入csv格式檔案,首先保證表存在 create table nizong 1e data user id varchar 255 character set utf8mb4 collate utf8mb4 general ci null default null,age varchar...

mac 用datax從csv檔案匯入mysql

skipheader true writer password 123456 username root presql session set session sql mode ansi writemode insert setting 3 執行命令 位置是 home datax datax 出現的...