Hive 表注释乱码解决

文章目录

      • 出现原因
      • MySQL 字符集修改
      • 调整元数据库字符集
      • 测试

出现原因

一般 Hive 的元数据信息都存储在 MySQL 中,但 MySQL 数据库中的 character_set_servercharacter_set_database 参数,默认都为 latin1 字符集,这两个参数决定了服务器和数据库如何处理和存储数据的字符编码,而我们通常使用的字符集都是 utf8,所以会造成 Hive 中注释出现 ???? 乱码的情况。

可以通过下面的命令在 MySQL 进行检查:

-- 获取 MySQL 与字符集和校对规则相关的配置变量列表
show variables like "colla%";

-- 获取 MySQL 字符集变量列表
show variables like 'chara%';

Hive 表注释乱码解决_第1张图片

MySQL 字符集修改

修改 MySQL 配置文件:

vim /etc/my.cnf

添加下列内容:

# 在 [mysqld] 标签下加入
character-set-server=utf8
collation-server=utf8_general_ci

## 在末尾加入
[client]
default-character-set=utf8

添加完成后重新启动 MySQL 服务:

systemctl restart mysqld

Hive 表注释乱码解决_第2张图片

调整元数据库字符集

进入 MySQL 中调整下列参数,切换到存储 Hive 元数据信息的库,然后执行。

-- 进入存储 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;

-- 修改分区字段注释
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;

-- 修改索引注释
alter table  INDEX_PARAMS  modify column PARAM_VALUE  varchar(4000) character set utf8;

注意,仅对修改后创建的新表生效!

测试

在 Hive 中创建一个新表,并添加注释信息。

DROP TABLE IF EXISTS sku_info;
CREATE TABLE sku_info(
    `sku_id`      string COMMENT '商品id',
    `name`        string COMMENT '商品名称',
    `category_id` string COMMENT '所属分类id',
    `from_date`   string COMMENT '上架日期',
    `price`       double COMMENT '商品单价'
) COMMENT '商品属性表'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

Hive 表注释乱码解决_第3张图片

问题解决。

你可能感兴趣的:(hive,hadoop,数据仓库)