hive字段乱码问题(解决)

问题

今日在hive内部建表发现所加字段comment显示全为?号。其实之前也碰到过只是觉得不是很重要,便没去管,但今天又遇到了,还是决定予以解决。

CREATE TABLE IF NOT EXISTS links (
movieId INT COMMENT '电影ID',
imdbId INT COMMENT 'imdb电影ID',
tmdbId INT COMMENT 'themoviedb电影ID')
COMMENT '电影链接表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

hive字段乱码问题(解决)_第1张图片

解决

大家都知道关系型数据库之所以为关系型,就是内部所有属性值都能在自身库里找到其位置。Hive为数据仓库的框架,虽数据都是以文件形式存于hdfs,但其定义属性值(元数据)也需要存于关系型数据库中。通常是sqllite、mysql等轻量级RDBMS。本人使用的是mysql。

出现乱码的原因无非就是Hive使用的字符集与mysql中设置的元数据字符集不一致。故从这个角度寻找。Hive里字段的comment存在于Hive元数据库的COLUMNS_V2表,可以通过

解决方法
修改其中有关COMMENT的设置,但是只对新建的表有效,原来的表只能通过alter修改注释才可以。

# 建库时hive的库名改的metastore
use metastore;
 
# 修改字段注释字符集
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_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
 
# 索引
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

重新建表

create table stu(id int comment '学号', name string comment '姓名');

修改Hive表注释 

# 修改hive表注释
alter table table_name set TBLPROPERTIES('comment' = '表注释');
 
# 修改字段注释
alter table table_name change column 原列名 新列名 列类型 comment '列注释';

之前的表是不行的,可以重新导入

你可能感兴趣的:(hive,mysql,hadoop)