HIVE將長(zhǎng)整數(shù)轉(zhuǎn)字符串的錯(cuò)誤
有一個(gè)超長(zhǎng)字符串,比如:441066000000001005712973,原來存放在HIVE里表A 是用DECIMAL(24)類型。現(xiàn)在要與另外一個(gè)用string類型保存這個(gè)字段的表B關(guān)聯(lián),老是失敗。單獨(dú)檢查,發(fā)現(xiàn)它與表B的空值關(guān)聯(lián)上。
單獨(dú)使用語句檢查:
select cast(441066000000001005712973 as string)
發(fā)現(xiàn)返回值為null,應(yīng)該是這個(gè)數(shù)字太長(zhǎng)了。
改用這樣測(cè)試成功:
select cast(441066000000001005712973 as varchar(24))
似乎HIVE轉(zhuǎn)為string的時(shí)候,默認(rèn)會(huì)認(rèn)為前面的數(shù)字最多也就是bigint,沒想到用了這么長(zhǎng)的數(shù)字過來。
用varchar的方法不一樣,直接就把值拿出來,套上單引號(hào)就完了,因?yàn)樽值拇鎯?chǔ)都不是按二進(jìn)制存儲(chǔ),直接用10進(jìn)制的字符串保存在文本中。
按這個(gè)轉(zhuǎn)換再查詢就沒問題了。
select a.id, b.id from a left join b on b.id = cast(a.id as varchar(24)) where a.id = 441066000000001005712973;
posted on 2023-09-08 10:22 何輝煌 閱讀(272) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)