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; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通