impala版本是1.2.4. 目前版本是1.3.1 改bug还是未修复状态。
测试sql:
create table t1(age float);
insert into t1 value(3.3);
3.3被词法解析为FloatLiteral。 我们希望这个是float,但是却提示为double,无法匹配。出现问题代码如下:
private void init(Double value) {
this.value_ = value.doubleValue();
// Figure out if this will fit in a FLOAT without loosing precision.
float fvalue;
fvalue = value.floatValue();
if (fvalue == value.doubleValue()) {
type_ = ColumnType.FLOAT;
} else {
type_ = ColumnType.DOUBLE;
}
}
fvalue=value.doubleValue()这个语句是有问题的。
float f=3.3 double d=3.3 但是f==d是false. float和double不能直接比较。
解决方法:
1: Float a=new Float(f) ; Float b=new Float(value.doubleValue()) a.equal(b);
2: Math.abs(f-d)<0.0000001;
看完了帮点个赞吧,谢谢