解决各个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能够解决问题。

相关文章
相关标签/搜索