Hive表字段中文注释乱码解决

问题

今日在hive内部建表发现所加字段comment显示全为?号。其实之前也碰到过只是觉得不是很重要,便没去管,但今天又遇到了,还是决定予以解决。

解决

大家都知道关系型数据库之所以为关系型,就是内部所有属性值都能在自身库里找到其位置。Hive为数据仓库的框架,虽数据都是以文件形式存于hdfs,但其定义属性值(元数据)也需要存于关系型数据库中。通常是sqllite、mysql等轻量级RDBMS。本人使用的是mysql。

出现乱码的原因无非就是Hive使用的字符集与mysql中设置的元数据字符集不一致。故从这个角度寻找。Hive里字段的comment存在于Hive元数据库的COLUMNS_V2表,可以通过

show full columns from COLUMNS_V2 

来查看该表各字段详细信息,即可得到该列字符集。通常工作中使用的字符集为utf8,现将其改成utf8:

 alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
 flush privileges ;

修改完毕,desc table ,comment仍旧为?号,重启mysql,结果一样。于是去查看hive的元数据配置。
本人是使用的ambari,查看Database URL为:

jdbc:mysql://test.boc.com/hive?createDatabaseIfNotExists=true

于是乎在改为

jdbc:mysql://test.boc.com/hive?createDatabaseIfNotExists=true&characterEncoding=UTF-8

,指定UTF-8,重启hive各组件后,解决。(Hive单独安装的可以查看hive-site.xml配置文件的javax.jdo.option.ConnectionURL属性值,看是否指定的UTF-8)。不过只对后续的建表生效,要想之前的comment也改掉就只能重新建表了。

扩展

看有的网友表示只能解决desc的comment展示问题,而show create table查看需要修改源码。但在本人的使用上并无次问题,show create table也能正常展示,可能是版本的问题,本人使用的为1.2版本。另外,需要用到中文的也不止字段注释,还可能有其他地方,表参数,索引参数等,故另附几条语句供修改:

alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_PARAMS  modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_KEYS  modify column PKEY_COMMENT varchar(4000) character set utf8;
alter table  INDEX_PARAMS  modify column PARAM_VALUE  varchar(4000) character set utf8;

你可能感兴趣的:(Hive)