乱码样式
在我想查看一张表某个字段的具体含义时发现出现了乱码现象,这是由于在hive改成MySQL管理元数据后,该数据库使用的是Latin1编码而非utf8或者gbk,所有会导致乱码,由于hive和其他很多hadoop生态也有一定的关联,所以不能直接修改管理元数据库的默认字符集,但是我们可以修改里面表的某些字段的字符集。
方法
第一步:在MySQL中指定管理hive元数据信息对应的数据库输入如下dml语句
ALTER TABLE COLUMNS_V2 MODIFY COLUMN COMMENT VARCHAR(256) CHARACTER SET utf8;
除了有修改表注释字符集的sql外,还带有分区,索引,视图等的sql。
#修改表注释字符集
ALTER TABLE TABLE_PARAMS MODIFY COLUMN PARAM_VALUE VARCHAR(20000) CHARACTER SET utf8;
#修改分区参数,支持分区键用中文表示
ALTER TABLE PARTITION_PARAMS MODIFY COLUMN PARAM_VALUE VARCHAR(20000) CHARACTER SET utf8;
ALTER TABLE PARTITION_KEYS MODIFY COLUMN PKEY_COMMENT VARCHAR(20000) CHARACTER SET utf8;
#修改索引名注释,支持中文表示
ALTER TABLE INDEX_PARAMS MODIFY COLUMN PARAM_VALUE VARCHAR(4000) CHARACTER SET utf8;
#修改视图,支持视图中文
ALTER TABLE TBLS MODIFY COLUMN VIEW_EXPANDED_TEXT MEDIUMTEXT CHARACTER SET utf8;
ALTER TABLE TBLS MODIFY COLUMN VIEW_ORIGINAL_TEXT MEDIUMTEXT CHARACTER SET utf8;
第二步:修改hive中conf目录下的配置文件hive-site.xml
在原来的驱动中加上 &useUnicode=true&characterEncoding=UTF-8参数,然后重新进入hive客户端即可。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop002:3306/metastore?useSSL=false&useUnicode=true&characterEncoding=UTF-8</value>
</property>
测试结果
可以看到已经可以显示中文了,对后面的数据管理很有帮助。
注:该内容源于b站尚硅谷atlas课程内容