日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

hive中文字符乱码 解决方法【转】

發(fā)布時(shí)間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hive中文字符乱码 解决方法【转】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.個(gè)人初始開發(fā)環(huán)境的基本情況以及Hive元數(shù)據(jù)庫(kù)說明

①hive的元數(shù)據(jù)庫(kù)改成了mysql(安裝完mysql之后也沒有進(jìn)行其它別的設(shè)置)

②hive-site.xml中設(shè)置元數(shù)據(jù)庫(kù)對(duì)應(yīng)的配置為 ?jdbc:mysql://crxy99:3306/hive_cz3q?createDatabaseIfNotExist=true

普通情況下咱們的mysql默認(rèn)編碼是latin1,但是我們?cè)谌粘i_發(fā)中大多數(shù)情況下需要用到utf-8編碼,如果是默認(rèn)latin1的話,咱們的中文存儲(chǔ)進(jìn)去容易亂碼,所以說大家在遇到一些數(shù)據(jù)亂碼的情況話,最好把mysql的編碼改成utf-8.

但是在這里要非常嚴(yán)重強(qiáng)調(diào)的一點(diǎn):hive的元數(shù)據(jù)metastore在mysql的數(shù)據(jù)庫(kù),不管是數(shù)據(jù)庫(kù)本身,還是里面的表編碼都必須是latin1(CHARACTER SET latin1 COLLATE latin1_bin)!!!!!

驗(yàn)證方式:(可以通過客戶端軟件在數(shù)據(jù)庫(kù)上右鍵屬性查看,也可以通過命令查看)

mysql> show create database hive_cz3q;

+-----------+-----------------------------------------------------------------------------------------+ | Database | Create Database | +-----------+-----------------------------------------------------------------------------------------+ | hive_cz3q | CREATE DATABASE `hive_cz3q` /*!40100 DEFAULT CHARACTER SET latin1 COLLATE latin1_bin */ | +-----------+-----------------------------------------------------------------------------------------+

不然會(huì)有類似如下的錯(cuò)誤:

?

那么怎么修改mysql的編碼為utf8呢?這里提供了在線安裝修改和離線方式安裝下的修改方式供大家選擇!

二.亂碼的情況:

?向hive的表中 創(chuàng)建表,表語句部分如下:

create table ods.ods_order (ORDER_ID int comment '訂單ID',ORDER_NO varchar(30) comment '訂單編號(hào)(唯一字段),前綴字符表示訂單來源:a,Andriod;b,微博;c,WEB;e,餓了么;i,Iphone;m,Mobile;x,微信; z,中糧我買網(wǎng);l,其它。 接著3位數(shù)字代表訂單城市編號(hào);接著字符z與后面的真正訂單編號(hào)分隔。這套機(jī)制從2014年12月開始實(shí)施。',DEALER_ID int comment '門店ID',CUST_ID int comment '客戶ID',
**********

在創(chuàng)建表的時(shí)候,字段可以有 comment,但是 comment 建議不要用中文說明,因?yàn)槲覀冋f過,hive metastore 支持的字符集是 latin1,所以中文寫入的時(shí)候會(huì)有編碼問題,如下圖!?

然后通過desc ods_order 查看 對(duì)應(yīng)的comment中是中文的地方,通過Xshell顯示全部都是 "?" 問號(hào). ?同時(shí)確認(rèn)了Xshell支持顯示中文(排除Xshell的問題).

以上就是說Hive在字段定義時(shí)的Comment中文亂碼問題.

有了上述的問題,那么我們?cè)撊绾稳ソ鉀Q注釋中文亂碼問題呢??

三.解決方式:

1.首先進(jìn)行Mysql的編碼設(shè)置

(1)離線安裝mysql的修改方式:

①修改編碼,設(shè)置為utf8

拷貝 mysql 的配置文件/usr/share/mysql/my-small.cnf /etc/my.cnf?

mysql 配置文件/etc/my.cnf 中增加以下內(nèi)容

[client]下面增加 default-character-set=utf8 在[mysqld]下面增加 default-character-set=utf8 init_connect='SET NAMES utf8'

?②重啟mysql 服務(wù)(這樣確保缺省編碼是utf8)

service mysqld restart

③驗(yàn)證編碼是否改成了utf8:

輸入命令 "\s"

輸入命令:show variables like 'char%'

輸入命令:show variables like "colla%";

?

OK修改成功!

④這樣在啟動(dòng)hive,向hive中插入的表中comment等有漢字的情況,就可以正常的顯示(如下為本人測(cè)試的部分顯示結(jié)果):

0: jdbc:hive2://localhost:10000/ods> desc ods_order; +--------------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------+--+ | col_name | data_type | comment | +--------------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------+--+ | order_id | int | 訂單ID | | order_no | varchar(30) | 訂單編號(hào)(唯一字段),前綴字符表示訂單來源:a,Andriod;b,微博;c,WEB;e,餓了么;i,Iphone;m,Mobile;x,微信; z,中糧我買網(wǎng);l,其它。 接著3位數(shù)字代表訂單城市編號(hào);接著字符z與后面的真正訂單編號(hào)分隔。這套機(jī)制從2014年12月開始實(shí)施。

?

(2)在線安裝mysql的修改方式

?①修改編碼,設(shè)置為utf-8

?mysql 配置文件/etc/my.cnf(不需要拷貝)中[mysqld]的下面增加以下內(nèi)容

init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake

??

②重啟mysqld服務(wù)

service mysqld restart

?

③ 和離線方式一樣驗(yàn)證編碼是否確實(shí)修改;

show variables like 'char%';

??

?2.針對(duì)元數(shù)據(jù)庫(kù)metastore中的表,分區(qū),視圖的編碼設(shè)置

因?yàn)槲覀冎?metastore?支持?jǐn)?shù)據(jù)庫(kù)級(jí)別,表級(jí)別的字符集是?latin1,那么我們只需要把相應(yīng)注釋的地方的字符集由?latin1?改成?utf-8,就可以了。用到注釋的就三個(gè)地方,表、分區(qū)、視圖。如下修改分為兩個(gè)步驟:

?(1)、進(jìn)入數(shù)據(jù)庫(kù)?Metastore?中執(zhí)行以下?5?條?SQL?語句?

?①修改表字段注解和表注解
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
②?修改分區(qū)字段注解:
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;

?(2)、修改?metastore?的連接?URL

<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>

?

測(cè)試結(jié)果:

?

以上就能完美的解決這個(gè)問題.

?

作者:SummerChill
出處:http://www.cnblogs.com/DreamDrive/
本博客為自己總結(jié)亦或在網(wǎng)上發(fā)現(xiàn)的技術(shù)博文的轉(zhuǎn)載。 如果文中有什么錯(cuò)誤,歡迎指出。以免更多的人被誤導(dǎo)。
?

轉(zhuǎn)載于:https://www.cnblogs.com/byfboke/p/10025833.html

總結(jié)

以上是生活随笔為你收集整理的hive中文字符乱码 解决方法【转】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。