您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Hive和Imapla查詢decimal類型結(jié)果不同的異常該怎么解決,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
1.當(dāng)前集群HDFS上/tmp/newfile目錄下存在文件hive.txt
[root@cdp4 ~]# mkdir /data/ZK
[root@cdp4 ~]#
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'
3.在Hive中進(jìn)行查詢,可以看到結(jié)果如下圖。
select * from test
4.在Impala中進(jìn)行查詢,可以看到s2列全部為空
同樣的表,在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
2.再次進(jìn)行查詢,可以看到Impala中可以查到數(shù)據(jù)了,并且可以看到S2字段的數(shù)據(jù)類型已經(jīng)變成了string
3.由于數(shù)據(jù)類型變了,我們?cè)購膆ive中查詢,可以看到,查詢結(jié)果也變化了,跟Impala中的查詢結(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è)資訊頻道。
免責(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)容。