平凡小站

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;

  

posted on 2023-09-08 10:22  何辉煌  阅读(234)  评论(0编辑  收藏  举报