hive中數值型別可以和和字串型別string運算,其中字串為純數字型別,都轉為了浮點型別double.若字串不為純數字型別,計算結果則為null.
1、數值和數值 --> int
2、數值和數值型字元
3、數值和非純數字
union all中的子查詢要求相同的列數,對應字段型別相同或可以隱式轉化為同一種型別
hive中int , float , double這些數值型別在儲存大額度數字時,在前端展現上總是使用科學計數法來表示,其實無論是普通的表示方式還是科學計數法表示,只是乙個習慣問題,結果都是一樣的。
可是不能理解的是當把數值型別轉化成字串型別以後hive竟然把數值轉換成了科學計數法表示的字串而非數值本身的字串
參考1-hive中科學計數法
【坑】若是(1)-(3)正好同時出現,一步小心就會有有問題
有一張表create table test_table(bignumstr string)
(1)單獨執行下面sql語句
select 123456789101112; 123456789101112
select 123456789101112.0; 1.23456789101112e14 --或 123456789101112.0
select 123456789101111 union all select 123456789101112.0; 1.23456789101111e14 1.23456789101112e14 – 或 123456789101111.0 123456789101112.0
(2)單獨insert
insert into table test_table select 123456789101111; select * table test_table; 123456789101112
insert into table test_table select 123456789101112.0; select * table test_table; 1.23456789101112e14
(3)union all
insert overwrite table test_hjy select 123456789101111 union all select 123456789101112.0; select * table test_table; 1.23456789101111e14 1.23456789101112e14
(4)即使第乙個為string
select cast(123456789101111 as string) union all select 123456789101112.0; 1.23456789101111e14 1.23456789101112e14 – 或 123456789101111.0 123456789101112.0
insert overwrite table test_hjy select cast(123456789101111 as string) union all select 123456789101112.0; select * table test_table; 1.23456789101111e14 1.23456789101112e14
insert overwrite table test_hjy select cast(123456789101111 as string) union all select 1 * 『123456789101112』; select * table test_table; 1.23456789101111e14 1.23456789101112e14
原因在於hive在聯結union all時,可以進行隱式轉換,先都轉換為同一種型別,string可以轉換為double,見參考2.
hive轉換科學計數法
hive中的科學計數法如何轉換回數字,搜了半天終於找到了一篇好文章,這裡記錄轉換 為自己日後參考。自 case 處理非科學計數法表示的字串 when length regexp extract 字串 0 9 0 9 e 0 9 2 0 then 字串 處理整數 when length regexp ...
科學計數法
在做專案時發現乙個比較頭痛的問題,輸入法輸入金額android inputtype numberdecimal 控制項是可以輸入000.123的,為了獲取正確的輸入值可以使用下面方法,當輸入的資料很長時也不會被用科學計數法顯示 string str 000.123 bigdecimal bigdec...
hive 如何處理科學計數法
說明 hive中int float double這些數值型別在儲存大額度數字時,在前端展現上總是使用科學計數法來表示,這樣搞的挺煩。舉例說明 樣例資料 select lte drop rate from t table limit 10 輸出結果 5.0e 4 7.1e 4 5.41e 4 處理方案...