请教hive 里的where 判断——string格式字段用where a>b筛选结果与 where a-b>0筛选结果不一致
最近遇到hive并表后筛选问题,出现了一个很神奇的错误——string字段用where a>b筛选结果与 where a-b>0筛选结果不一致
1)对于同样为string格式的两个数值字段进行大小比较,因为考虑到hive会隐性转换数据格式,故而直接筛选val1>val2记录,而实际筛选出来的记录中,仍有大量val1<val2的记录,其中有看起来精度一致的,也有看起来精度不一致的,例如val1为2.0、val2为4,或者val1为4.2、val2为3.1。
2)发现问题后,改用val1-val2>0筛选记录,记录无误,符合筛选要求。
3)尝试先对原始字段进行转化,即cast(xx as float),结果正确,与val1-val2>0筛选结果一致。
关键是,两个源头表的所有字段类型都是string。请教各位高人指点,这是什么原因,是我忽略了什么么?
第一轮有问题的原始代码样例
select a.id,
a.val1,
b.val2
a.val1-b.val2
from (select id,val1 from table1) a
left join (select id,val2 from table2 ) b
on a.id=b.id
where a.val1>b.val2;
结果样例:
2.0 3.00004
4.2 5.1
第二轮val1-val2>0筛选代码
select a.id,
a.val1,
b.val2
a.val1-b.val2
from (select id,val1 from table1) a
left join (select id,val2 from table2 ) b
on a.id=b.id
where a.val1-b.val2>0;
结果无误
cast结果同第二轮结果