我有简单的查询来获取所有不是' RS'在蜂巢中。我的数据如下所示
Account class
3000337430920208808 NULL
3000337394422514891 NULL
3000337317010916590 NULL
3000337153318453626 NULL
3000337129720896321 NULL
我已将查询编写为
select account_number,service_class from cdx_eligibility where account_number='3000337430920208808' and service_class not in ('RS');
我没有获得此帐户的输出。理想地为NULL<> RS(所以它的真实和应该返回记录)。但我没有得到任何记录。我们需要以不同的方式处理NULLS吗?我也尝试了几个选项(!=,<>,而不是)。请建议。
答案 0 :(得分:0)
看起来hive无法正确处理“in”子句中的空值,此解决方法应该可以正常工作
select account_number,service_class from cdx_eligibility where account_number='3000337430920208808' and (isnull(service_class ) or service_class not in ('RS'));
答案 1 :(得分:0)
这不是Hive问题,这就是SQL的工作原理。当您将'RS'与null
进行比较时,它不会返回任何内容,不会返回true或false。你也不能'foo' = null
。这是为什么在字符字段中允许空值是一个痛苦的原因之一。如果您必须有空值,请使用
where coalesce(service_class,'') not in ('RS')
。
这样你就可以将空字符串与'RS'进行比较,它可以按照您的预期运行。