平凡小站

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

HIVE将长整数转字符串的错误

有一个超长字符串,比如:441066000000001005712973,原来存放在HIVE里表A 是用DECIMAL(24)类型。现在要与另外一个用string类型保存这个字段的表B关联,老是失败。单独检查,发现它与表B的空值关联上。

单独使用语句检查:

1
select cast(441066000000001005712973 as string)

发现返回值为null,应该是这个数字太长了。

改用这样测试成功:

1
select cast(441066000000001005712973 as varchar(24)) 

似乎HIVE转为string的时候,默认会认为前面的数字最多也就是bigint,没想到用了这么长的数字过来。

用varchar的方法不一样,直接就把值拿出来,套上单引号就完了,因为字的存储都不是按二进制存储,直接用10进制的字符串保存在文本中。

按这个转换再查询就没问题了。

1
2
3
4
5
6
7
8
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   何辉煌  阅读(231)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示