ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Hive创建表时添加中文注释后乱码问题

2019-09-01 19:08:23  阅读:358  来源: 互联网

标签:varchar latin1 utf8 表时 hive 乱码 修改 Hive


Hive建表中文乱码

复制别人的。。。

创建数据表时我们经验会添加一些中文注释到表里面方便识别,最近在测试hive的时候,发现添在Hive创建表时添加COMMENT时的中文注释就会出现乱码,如下:

img

解压思路:

1、查看存放Hive元数据信息的数据库表字符集;是否因为字符集问题

img

可以看出,由于表使用的是默认的latin1字符集,所以中文显示不出来,应该使用utf8;

但是很奇怪,我整个Mysql都是使用utf8的字符集;所以这个与Mysql的配置无直接关系;但是可以通过修改Mysql上面的表默认字符集来解决,这个是不需要修改Hive配置的方法,快捷方便,不影响现有数据。

img

登陆Mysql数据库切换到Hive库:
use 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;

再回到Hive查看表结构时就正常显示中文了;
如果你的表创建了分区的话就要再加一条语句:
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;


使用Mysql作为Hive的元数据存储方式时都要使用命令,初始化才可以使用:
./schematool -dbType mysql -initSchema
所以通过上面这个命令,就知道既然要初始化,就等于先执行一下默认的SQL语句去建表。【不然hive中的表哪来?】
所以第二种方法就是修改hive默认的SQL语句来实现;

1、通过关键字查找文件
find /home/otouser/software/hive |xargs grep -ri “latin1” -l
通过上面命令可以看到很多文件:不过明确目录就在:
hive/scripts/metastore/upgrade/mysql 下

2、根据你使用的hive版本来修改:【修改一个文件即可】
进入目录:
cd hive/scripts/metastore/upgrade/mysql
因为我使用的hive是2.0.0版本,所以就修改这个文件:hive-schema-2.0.0.mysql.sql
只需修改以下几步:其实就是跟上面的一样;
修改字段注释字符集:

 54行   
 `COMMENT` varchar(256) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL, 
修改成: 

 `COMMENT` varchar(256) CHARACTER SET utf8 DEFAULT NULL, 

修改表注释字符集: 

565行 
`PARAM_VALUE` varchar(4000) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL, 
修改成: 
`PARAM_VALUE` varchar(4000) CHARACTER SET utf8 DEFAULT NULL, 

修改分区注释字符集: 

249行: 
`PKEY_COMMENT` varchar(4000) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL, 

修改成: 
`PKEY_COMMENT` varchar(4000) CHARACTER SET utf8 DEFAULT NULL, 

最后修改完后就执行上面的初始化元数据,再创建表时就可以看到正常显示中文了。

标签:varchar,latin1,utf8,表时,hive,乱码,修改,Hive
来源: https://blog.csdn.net/wyht1222/article/details/100186020

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有