您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Hive和Imapla查詢decimal類型結果不同的異常該怎么解決,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
1.當前集群HDFS上/tmp/newfile目錄下存在文件hive.txt
[root@cdp4 ~]# mkdir /data/ZK
[root@cdp4 ~]#
2.從Hue中創建一個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中進行查詢,可以看到結果如下圖。
select * from test
4.在Impala中進行查詢,可以看到s2列全部為空
同樣的表,在Hive和Impala中分別進行查詢,結果不同,異常得以重現。
根據異常重現部分的步驟,S2字段的數據類型是decimal(13,2)。精度只有2位,但是我們原始數據小數點后都是有3位小數。Hive在這里進行查詢的時候會損失精度,打印結果。但是Impala在查詢的時候,校驗decimal類型會更嚴格,當前的原始數據精度超過了S2字段設定的數據類型的精度,所以直接返回為空。
根據上面的分析,是由于數據的精度超過了S2字段的設定,這里可以通過改變字段類型來進行解決。
1.在Hue中執行下面的SQL進行字段類型的變更
ALTER TABLE test CHANGE s2 s2 string
2.再次進行查詢,可以看到Impala中可以查到數據了,并且可以看到S2字段的數據類型已經變成了string
3.由于數據類型變了,我們再從hive中查詢,可以看到,查詢結果也變化了,跟Impala中的查詢結果一致。
在Hive和Impala同時間遇到精度不匹配的情況的時候,Hive會通過損失精度來輸出結果,同樣的情況,Impala則會直接返回NULL。
在建表的時候,如果涉及到decimal數據類型,我們需要根據原始數據的精度,來設計好相關的參數,避免出現精度丟失的情況。
如果由于歷史原因,當前的表中已經出現精度丟失,我們可以通過轉換數據類型,來進行處理。可以先轉換成string類型,進行查詢。后面也可以根據表的數據范圍,再修改成其他精度匹配的數據類型,進行處理。
上述就是小編為大家分享的Hive和Imapla查詢decimal類型結果不同的異常該怎么解決了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。