在进行hive SQL查询数据的时候,where条件中使用了in或者not in,但是该值内有null空。
这时,无论是in还是not in,空值都不会进入该条件内,但是使用not in的时候只是希望把自己不想要的数据给排除掉,这时会同步把为null的数据也进行排除掉了。所以,在写not in或者in的时候,如果希望保留为null的数据。最好加一条
where (col not in (1,2,3,4) or col is null)
同样,进行先join 后where操作的时候,同样要注意值为null的情况
例如,在 select a,b from t1 join t2 on t1.id = t2.id where a <= 10 此时,为null的也会被全部排除,如果希望留下为null的数据。则也需要加上一个条件。 a<= 10 or a is null。
或者用val() 处理一个默认值
为空的时候
我们平时使用
where name is not null and name <> ''
这个是我经常这么写的,原来都是遇到的string类型,如论是id还是什么 我一般都设置成string类型,因此也不会遇到问题
最近在做项目的时候遇到 int bigint类型的 习惯这么写
where id is not null and id <> ''
presto 引擎查询是没问题,但是用spark引擎查询就不行查询不到数据
这个问题被搞了一天
spark引擎会把。id这种 int 类型的 转化成double,但是为啥会这样 不是很清楚
and cast(t1.product_panorama_id as string) <> ''
另外一个
案例:Spark/Hive中‘String=数值类型’丢失精度问题