HIVE将长整数转字符串的错误
有一个超长字符串,比如:441066000000001005712973,原来存放在HIVE里表A 是用DECIMAL(24)类型。现在要与另外一个用string类型保存这个字段的表B关联,老是失败。单独检查,发现它与表B的空值关联上。
单独使用语句检查:
select cast(441066000000001005712973 as string)
发现返回值为null,应该是这个数字太长了。
改用这样测试成功:
select cast(441066000000001005712973 as varchar(24))
似乎HIVE转为string的时候,默认会认为前面的数字最多也就是bigint,没想到用了这么长的数字过来。
用varchar的方法不一样,直接就把值拿出来,套上单引号就完了,因为字的存储都不是按二进制存储,直接用10进制的字符串保存在文本中。
按这个转换再查询就没问题了。
select a.id, b.id from a left join b on b.id = cast(a.id as varchar(24)) where a.id = 441066000000001005712973;