溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Hive和Imapla查詢decimal類型結(jié)果不同的異常該怎么解決

發(fā)布時(shí)間:2021-12-09 15:53:24 來源:億速云 閱讀:345 作者:柒染 欄目:大數(shù)據(jù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Hive和Imapla查詢decimal類型結(jié)果不同的異常該怎么解決,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

異常重現(xiàn)      

1.當(dāng)前集群HDFS上/tmp/newfile目錄下存在文件hive.txt

[root@cdp4 ~]# mkdir /data/ZK
[root@cdp4 ~]# 

Hive和Imapla查詢decimal類型結(jié)果不同的異常該怎么解決

2.從Hue中創(chuàng)建一個(gè)hive表test如下

create external table test (s1 string,s2 decimal(13,2)) row format delimited fields terminated by '#' stored as textfile location '/tmp/newfile'    

Hive和Imapla查詢decimal類型結(jié)果不同的異常該怎么解決

3.在Hive中進(jìn)行查詢,可以看到結(jié)果如下圖。

select * from test

Hive和Imapla查詢decimal類型結(jié)果不同的異常該怎么解決

4.在Impala中進(jìn)行查詢,可以看到s2列全部為空

Hive和Imapla查詢decimal類型結(jié)果不同的異常該怎么解決

同樣的表,在Hive和Impala中分別進(jìn)行查詢,結(jié)果不同,異常得以重現(xiàn)。

異常分析    

   

   

   

根據(jù)異常重現(xiàn)部分的步驟,S2字段的數(shù)據(jù)類型是decimal(13,2)。精度只有2位,但是我們?cè)紨?shù)據(jù)小數(shù)點(diǎn)后都是有3位小數(shù)。Hive在這里進(jìn)行查詢的時(shí)候會(huì)損失精度,打印結(jié)果。但是Impala在查詢的時(shí)候,校驗(yàn)decimal類型會(huì)更嚴(yán)格,當(dāng)前的原始數(shù)據(jù)精度超過了S2字段設(shè)定的數(shù)據(jù)類型的精度,所以直接返回為空。

異常解決    

   

   

   

根據(jù)上面的分析,是由于數(shù)據(jù)的精度超過了S2字段的設(shè)定,這里可以通過改變字段類型來進(jìn)行解決。

1.在Hue中執(zhí)行下面的SQL進(jìn)行字段類型的變更

ALTER TABLE test CHANGE s2 s2 string

Hive和Imapla查詢decimal類型結(jié)果不同的異常該怎么解決

2.再次進(jìn)行查詢,可以看到Impala中可以查到數(shù)據(jù)了,并且可以看到S2字段的數(shù)據(jù)類型已經(jīng)變成了string

Hive和Imapla查詢decimal類型結(jié)果不同的異常該怎么解決

3.由于數(shù)據(jù)類型變了,我們?cè)購膆ive中查詢,可以看到,查詢結(jié)果也變化了,跟Impala中的查詢結(jié)果一致。

Hive和Imapla查詢decimal類型結(jié)果不同的異常該怎么解決

在Hive和Impala同時(shí)間遇到精度不匹配的情況的時(shí)候,Hive會(huì)通過損失精度來輸出結(jié)果,同樣的情況,Impala則會(huì)直接返回NULL。

在建表的時(shí)候,如果涉及到decimal數(shù)據(jù)類型,我們需要根據(jù)原始數(shù)據(jù)的精度,來設(shè)計(jì)好相關(guān)的參數(shù),避免出現(xiàn)精度丟失的情況。

如果由于歷史原因,當(dāng)前的表中已經(jīng)出現(xiàn)精度丟失,我們可以通過轉(zhuǎn)換數(shù)據(jù)類型,來進(jìn)行處理??梢韵绒D(zhuǎn)換成string類型,進(jìn)行查詢。后面也可以根據(jù)表的數(shù)據(jù)范圍,再修改成其他精度匹配的數(shù)據(jù)類型,進(jìn)行處理。

上述就是小編為大家分享的Hive和Imapla查詢decimal類型結(jié)果不同的異常該怎么解決了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI