解決各個hive版本中文註釋不能正確顯示的問題

開始的時候使用hive-0.7.1在建表的時候使用以下語句java

hive>createtable t1(c1 string comment '列1');mysql

而後查看該表sql

hive>describet1;數據庫

其中的註釋變成了亂碼。apache

後來得知是hive版本的問題,而後使用hive-0.8.0(該版本的代碼通過了修改,從而支持中文顯示)。ide

(1)將原來hive-0.7.1建立的數據庫drop掉。ui

(2)使用hive-0.8.0,並將原來hive-0.7.1的配置文件copy到0.8.0中使用編碼

(3)執行 hive>create table t1(c1string comment '1');spa

會拋出相似於com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was toolong;的異常(省略了不少的java錯誤信息)。 這時到mysql中的hive數據庫裏執行 alter database hive character set latin1;改變hive元數據庫的字符集,問題就能夠解決!xml

(4)而後在mysql中經過語句:alter tableCOLUMNS_V2 modify column COMMENT varchar(256) character set utf8; 修改COLUMNS_V2 表中用於存儲註釋內容的列的編碼格式。(在0.8.0以前存儲註釋信息的表的名字爲COLUMNS,從0.8.0開始改爲了COLUMNS_V2)。

(5)從新執行createtable t2(c1 string comment '列1');能夠將表建立成功

問題解決,收工~~

在這裏補充下爲了使hive-0.8.0可以顯示全部的元數據中文的所有配置:

讓hive的註釋能夠添加中文

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://IP:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8</value>

<description>JDBC connect string for a JDBC metastore</description>

</property>


表或者字段有中文的時候須要修改hive的元數據庫的設置。

以mysql爲例子,當mysql的字符集設置成utf8的時候使用hive會有問題

(com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Specified key was too long; max key length is 767 bytes )


因此當hive使用mysql做爲元數據庫的時候mysql的字符集要設置成latin1 default

alterdatabase hive character set latin1;

爲了保存那些utf8的中文,要將mysql中存儲註釋的那幾個字段的字符集單獨修改成utf8。

修改字段註釋字符集

alter tableCOLUMNS_V2 modify column COMMENT varchar(256) character set utf8;

修改表註釋字符集

alter tableTABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

注意:這裏使用的hive不是從官網下載的,而是修改過以後的,我已經傳到了csdn上,能夠下載使用

hive-0.8.0-sup-chinese.zip


若是使用的hive版本是0.9.0以上,則須要打上HIVE-3914patchpatch的地址爲:https://issues.apache.org/jira/browse/HIVE-3914

(1)hive-0.11.0

我在用hive-0.11.0的時候遇到了中文顯示的問題,上面地址的patch打不上去,使用的是https://issues.apache.org/jira/browse/HIVE-2905patch,裏面一共有兩個,使用的是https://issues.apache.org/jira/secure/p_w_upload/12589572/HIVE-2905.D11487.1.patch

注意該patch下面是對testpatch,在hive-0.11.0中沒有相關的test文件所以須要將https://issues.apache.org/jira/secure/p_w_upload/12589572/HIVE-2905.D11487.1.patch中對test作的patch部分的語句去掉,所以我打上相關的補丁以後,發如今建立表的時候列上的中文註釋能夠正常顯示,可是表上的中文註釋仍是亂碼。

沒有辦法,只能從新修改源碼,解決表上中文註釋不能正常顯示的問題,修改完以後作成了補丁,提交上了社區上

patch編碼爲:HIVE-5499,地址爲https://issues.apache.org/jira/browse/HIVE-5499

(2)hive-0.12.0

hive-0.12.0的發佈,雖然解決了表中的中文列註釋顯示亂碼的問題,可是表註釋的中文亂碼問題並無解決,所以,果斷修改源碼,從新編譯,$HIVE_HOME/lib/hive-exec-0.12.0.jar。能夠解決表中文註釋顯示亂碼的問題。關於修改的代碼也已經遞交到了hive的jira上,地址爲:

https://issues.apache.org/jira/browse/HIVE-5682

打上該patch能夠解決問題。