hive 中文支持

Last updated on September 15, 2024 pm

🧙 Questions

hive支持中文,包括备注,分区字段等

☄️ Ideas

创建中文表

CREATE TABLE IF NOT EXISTS ispong_db.users(
    username   STRING  COMMENT '姓名',
    age        INT     COMMENT '年龄'
)
COMMENT '用户表'
PARTITIONED BY ( sex STRING COMMENT '性别')
ROW FORMAT 
DELIMITED FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
desc formatted ispong_db.users;

备注乱码

20221019154257

解决方案

因为这些备注字段全部存在hive的业务数据库中,mysql数据库中,则需要修改mysql的字段字符集

docker exec -it isxcode-mysql /bin/bash
mysql -h localhost -u root -pispong123 -P 30306
-- 查询字段的字符集
SHOW FULL COLUMNS FROM hive_db.COLUMNS_V2;

-- 表字段-修改COMMENT字段的字符集为 utf-8
alter table hive_db.COLUMNS_V2 modify COMMENT varchar(4000) collate utf8_bin null;

-- 分区字段-修改COMMENT字段的字符集为 utf-8
alter table hive_db.PARTITION_KEYS modify PKEY_COMMENT varchar(4000) collate utf8_bin null;
 
-- 表备注-修改COMMENT字段的字符集为 utf-8
alter table hive_db.TABLE_PARAMS modify PARAM_VALUE mediumtext collate utf8_bin null;

20221019155839

分区支持中文

-- 分区内容支持utf-8
alter table hive_db.PARTITION_KEY_VALS modify PART_KEY_VAL varchar(256) collate utf8_bin null;
alter table hive_db.PART_COL_STATS modify PARTITION_NAME varchar(256) collate utf8_bin not null
alter table hive_db.PARTITIONS modify PART_NAME varchar(256) collate utf8_bin null;
-- 创建分区
alter table ispong_db.users add partition(sex='男');
alter table ispong_db.users add partition(sex='女');

-- 插入数据
insert into table ispong_db.users partition(sex='男') values ('张三',18);
insert into table ispong_db.users partition(sex='女') values ('小红',13);

-- 查询数据
select * from ispong_db.users;

数据异常

20221019164058

-- 如果不配置的话,插入的数据会全部写入到 /user/hive/warehouse/db/table/sex=? 目录下,导致查到的数据全部是重复的
alter table hive_db.SDS modify LOCATION varchar(4000) collate utf8_bin null;

20221019170256


hive 中文支持
https://ispong.isxcode.com/hadoop/hive/hive 中文支持/
Author
ispong
Posted on
October 19, 2022
Licensed under