问题环境

软件 版本

CDH 6.3.0

hive 2.1.1-cdh6.3.0

问题原因

其实hive的元数据都是存储在数据库里面,目前支持mysql,oracle,Postgres和MS SQL Server。如果我们建表发现乱码,很显然就可以归类到数据库表乱码问题。本例关联的数据库是mysql。

表名如下:


hue创建hive表的时候显示注释乱码_hive


hue创建hive表的时候显示注释乱码_乱码_02

需要修改mysql的hive的的字符改成utf-8

解决方案:

​mysql​对应的​hive​库执行以下​SQL​,即可更新回来:

-- 修改表字段注解和表注解
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_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 库
mysql > use hive;

# 然后修改部分配置
mysql > alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
Query OK, 91 rows affected (0.05 sec)
Records: 91 Duplicates: 0 Warnings: 0

mysql> alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
Query OK, 35 rows affected (0.05 sec)
Records: 35 Duplicates: 0 Warnings: 0

mysql> alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql > commit;


结果

重新建表之后,然后使用命令​​show create table tttttt​​可以查看到注释已经正常了。

hue创建hive表的时候显示注释乱码_hive_03

总结

查找问题是怎么产生的,并解决掉。这个过程可能会比较枯燥和繁琐,不过收获还是蛮大的!