在Hive世界,中文注释不再是乱码而困扰! 通过简单配置,告别乱码烦恼。
我们话不多说,直接用一个实际的案例来演示一下。
案例演示
1.我们先创建数据库, 切库。
create database test;
use test;
2. 创建内部表, 这里我们用王者荣耀的射手英雄来创一个表。
create table t_archer_inner(
id int comment 'ID',
name string comment '英雄',
hp_max int comment '最大生命',
mp_max int comment '最大法力',
attack_max int comment '最高物攻',
defense_max int comment '最大物防',
attack_range string comment '攻击范围',
role_main string comment '主要定位',
role_assist string comment '次要定位'
) comment '射手表'
row format delimited fields terminated by '\t';
然后我们在浏览器打开http://你的IP:9870/ 注意必须启动Hadoop集群才能打开此网址
然后点击utilities,在出现的选项中选择第一项如图所示
然后点击user
按照他的路径点击我们就会在文件中找到我们新建的t_archer_inner表格
如果Hadoop集群是Hadoop3.X,就可以点击上传直接把源文件上传上去。非Hadoop3就使用上传load方式加载数据到上述的表中.
上传之后我们就可以直接查看表。
select * from t_archer_inner;
但是当我们查看表结构时会出现一个问题,
我们的的中文注释全部变成了乱码,这篇文章就是为了解决这个问题,通过简单配置,告别乱码烦恼。
处理方法
具体步骤如下:
1. 去MySQL的hive3数据库中, 修改Hive的码表信息。为什么要去MySQL数据库呢?
因为Hive的元数据(表名, 列名, 数据类型, 描述信息等)都是在MySQL中存储的。
然后我们执行如下的代码:
-- (1)修改表字段注解和表注解 use hive3; 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;
2. 去Linux中(即: node1机器), 修改hive软件的配置信息, 配置文件是:
/export/server/hive/conf/hive-site.xml 文件。
把如下的内容, 添加到 <configuration> </configuration>标签中即可。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hive3?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</value>
</property>
3. 在node1机器中, 关闭metastore服务, hiveserver2服务, 然后重启这两个服务。
kill -9 pid值 pid值
nohup hive --service metastore &
nohup hive --service hiveserver2 &
4. 删除刚才创建的hive表, 然后重新创建即可, 此时: 注释乱码问题已经解决了。