Impala查询BigInt类型列无结果问题求助
问题原因及解决办法
- 核心问题:整数溢出导致常量值被篡改
Impala中,直接输入的整数常量默认会被解析为32位INT类型,而你使用的1081145387194379590远超过了32位INT的最大值(2147483647),这个值会被自动截断成错误的整数,自然匹配不到表中的BIGINT类型id。哪怕后续用CAST转BIGINT,也只是把已经截断后的错误值转成BIGINT,结果还是不对。
而Hive对整数常量的默认解析逻辑不同,它会自动识别超出INT范围的数为BIGINT类型,所以能正确匹配。
- 解决办法
有两种方式可以让Impala正确识别这个大整数为BIGINT:
- 在常量后加
L后缀,明确指定为BIGINT类型:
select * from dmi.ti_fact_cem_detail_ufdr_other_d where id = 1081145387194379590L;
- 先把数值作为字符串传入,再CAST为BIGINT:
select * from dmi.ti_fact_cem_detail_ufdr_other_d where id = CAST('1081145387194379590' AS BIGINT);
这样就能和Hive一样,正确匹配到对应的id数据了。
内容的提问来源于stack exchange,提问作者Dulanga Heshan
相关产品推荐
相关产品推荐

