Impala整数运算类型提升咨询:为何32768+0返回bigint?
在Impala 3.4.0中避免int与tinyint运算自动提升为bigint的方法
Impala的整数运算类型提升是静态规则驱动的,只看操作数的类型,不会根据实际运算结果的数值大小调整类型。哪怕你确定int和tinyint的和完全能放进int,默认规则下int + tinyint还是会被提升为bigint——这就是你遇到32768 + 0返回bigint的核心原因:0是tinyint类型,触发了int + tinyint = bigint的规则。
关于避免自动提升的方法:
- 方法一:显式转换其中一个操作数为int,让运算变成
int + int,结果自然就是int。比如:
把tinyint类型的0转成int后,两个操作数都是int,运算结果类型直接为int,符合预期。SELECT 32768 + CAST(0 AS INT); - 方法二:直接转换运算结果为int,比如:
这种方式先按默认规则得到bigint结果,再转成int,适合不想修改操作数类型的场景。SELECT CAST(32768 + 0 AS INT);
目前Impala没有提供配置项或语法修改默认的整数类型提升规则,所以确实只能通过显式的CAST()来实现需求。需要注意:如果运算结果实际超出int类型的最大值(2147483647),强制转换会导致数值溢出,务必确保业务场景下结果在int范围内。
内容的提问来源于stack exchange,提问作者B. Tyner
相关产品推荐
相关产品推荐

