1. 程式人生 > >Hive學習之路 (七)Hive中文亂碼

Hive學習之路 (七)Hive中文亂碼

min sta keys Coding ava eight img 字符集 步驟

Hive註釋中文亂碼

創建表的時候,comment說明字段包含中文,表成功創建成功之後,中文說明顯示亂碼

create external table movie(
userID int comment 用戶ID,
movieID int comment 電影ID,
rating int comment 電影評分,
timestamped bigint comment 評分時間戳,
movieName string comment 電影名字, 
movieType string comment 電影類型, 
sex string comment 性別
, age int comment 年齡, occupation string comment 職業, zipcode string comment 郵政編碼 ) comment 影評三表合一 row format delimited fields terminated by "," location /hive/movie;

技術分享圖片

這是因為在MySQL中的元數據出現亂碼

針對元數據庫metastore中的表,分區,視圖的編碼設置

因為我們知道 metastore 支持數據庫級別,表級別的字符集是 latin1

技術分享圖片

那麽我們只需要把相應註釋的地方的字符集由 latin1 改成 utf-8,就可以了。用到註釋的就三個地方,表、分區、視圖。如下修改分為兩個步驟:

1、進入數據庫 Metastore 中執行以下 5 SQL 語句

(1)修改表字段註解和表註解

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、修改 metastore 的連接 URL

修改hive-site.xml配置文件

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://IP:3306/db_name?createDatabaseIfNotExist=true&amp;useUnicode=true&characterEncoding=UTF-8</value>
    <description>JDBC connect string for a JDBC metastore</description>
</property>

驗證

做完可以解決亂碼問題

技術分享圖片

Hive學習之路 (七)Hive中文亂碼