Hive表comment中文乱码解决方案

hive注释中文乱码问题:

针对元数据库metastore中的表,分区,视图的编码设置。
	1、进入数据库metastore中修改mysql编码设置。
	2、修改metastore的连接URL。
1、修改表字段注解和表注解
进入mysql 选择hive库执行:

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 ;
2、修改分区字段注解:
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;
3、修改索引注解:
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
4、修改metastore的连接url:
修改hive-site.xml

<property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://你的IP:3306/hive?createDatabaseIfNotExsit=true&amp;characterEncoding=UTF-8</value>
</property>
5、查看修改结果
desc [table];
show create table [table]];
6、假若desc正常, show create table 依旧乱码
问题出在hive内部代码处理字符集上面
7、下载hive源码
下载链接: http://archive.apache.org/dist/hive/
8、修改代码
修改exe下的c.DDLTask类:

outStream.writeBytes(createTab_stmt.toString()); ------ (1700多行)
outStream.writeBytes(createTab_stmt.render()); ------ (1900多行)
分别改成
outStream.write(createTab_stmt.toString().getBytes("UTF-8"));
outStream.write(createTab_stmt.render().getBytes("UTF-8"));
9、编译
根目录执行:
mvn install -DskipTests -Dcheckstyle.skip=true
mvn clean package -Phadoop-2 -Pdist -DskipTests -Dtar
10、替换文件

下载地址

编译成功后去target路径下找到hive-exec-*.jar
替换掉hive安装目录下的hive-exec-*.jar
11、如果下载的和安装的hive版本完全吻合, 按照道理重启hive, 进行表结构查询, 问题应该是解决了
12、依旧失败, 并且hive连接报错
将hive-exec-*.jar文件解压, 拿到解压后的DDLTask.class文件
去hive安装目录替换
13、重启hive, 查询
发现中文不乱码了, 但是当查看分区表时: show partitions [table] 报错
14、修改Hive源码方法
将测试环境的hive-exec-1.2.1000.2.5.0.0-1245.jar拿到本地, 然后将其反编译, 获得DDLTask.java文件, 
再与源码中的该文件比较, 发现两者引用的接口方法名有差异. 测试环境jar包中用的方法名: showTablePartition, 
而源码用到的方法名: showTablePartiton.

将源码中用到showTablePartiton方法的代码文件内容都修改成showTablePartition, (总共四处), 重新编译源码.

最后同样去替换DDLTask.class
15、此时再重启hive, 查询表结构, 查询表分区
结果正常, 问题解决.
(注): 如同样发现执行某sql函数报错, 解决思路和上述一致
参考:
https://www.iteblog.com/archives/1687.html
https://blog.csdn.net/hjw199089/article/details/79048411
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值