快速解决方法
目前的hive客户端在执行desc tablexxx和show create table xxx命令的时候,字段的中文注释会出现乱码情况,如(????)。在使用 ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 建表的时候,注释则会出现from deserializer。以下几个步骤可以帮你快速解决这些问题:
问题表现:
解决办法:
1.首先在hive客户端的conf目录下找到hive-site.xml配置文件,查询本机hive所连接的metastore地址,也就是mysql服务器的位置。
以下是原配置:
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop4:3306/hive_111?createDatabaseIfNotExist=true</value> </property>
修改为新配置:
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop4:3306/hive_111?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8</value> </property>
2.找到mysq中管理元数据的database,在本例子中,为 hive_111
在hadoop4中,执行以下操作:
su root
mysql -uroot -p123456
use hive_111;
#修改表字段注解和表注解
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table TABLE_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 PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
#修改索引注解
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
3.重启hive客户端,重建表,效果如下: