1. 程式人生 > >(八)Hive中文亂碼

(八)Hive中文亂碼

 (八)Hive中文亂碼

目錄

 

正文

回到頂部

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>

回到頂部

驗證

做完可以解決亂碼問題