在进行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) <> ''

Hive的in与not in 值中有null的时候注意事项,join where条件等问题_数据仓库

另外一个
案例:Spark/Hive中‘String=数值类型’丢失精度问题