HiveQL 逻辑过滤语句如何处理 NULL 值
Posted
技术标签:
【中文标题】HiveQL 逻辑过滤语句如何处理 NULL 值【英文标题】:HiveQL how logic filter statement treats NULL values 【发布时间】:2020-05-22 15:53:39 【问题描述】:我有一个示例数据集,如下所示:
Id Name ReferredBy
1 John Doe NULL
2 Jane Smith NULL
3 Anne Jenkins 2
4 Eric Branford NULL
5 Pat Richards 1
6 Alice Barnes 2
如果我想选择 Jane Smith 未提及的所有记录,我将使用以下命令:
SELECT Name FROM Customers WHERE ReferredBy <> 2;
在 SQL Server 上,这将排除 NULL 值,因此我需要按以下方式编写它:
SELECT Name FROM Customers WHERE ReferredBy IS NULL OR ReferredBy <> 2
HiveQL 是否有同样的问题?
*很难在我拥有的原始数据集上对其进行测试,因为它非常大,几乎没有缺失。
谢谢!
【问题讨论】:
这不是问题。这就是NULL
值在 SQL 中的定义方式以及所有数据库的行为方式。
那么第一条语句会给出想要的输出?
。 .大概,第二个是你想要的。这基本上是任何数据库都需要的,尽管一些数据库支持NULL
-safe 运算符,如我的回答中所述。
【参考方案1】:
NULL
的行为由 SQL 定义,所有数据库都尊重它。也就是说,该标准还指定了NULL
安全比较运算符、IS NOT DISTINCT FROM
和IS DISTINCT FROM
。 Hive 支持一种平等,但不支持那种平等。
根据您的逻辑,您可以将此 Hive 扩展用于<=>
:
where not (ReferredBy <=> 2)
<=>
是 NULL
-safe 比较,因此它为 NULL <=> NULL
返回“true”,为 NULL <=> 2
返回“false”,而不是在这两种情况下 NULL
。这大概是从 mysql 借来的。
【讨论】:
以上是关于HiveQL 逻辑过滤语句如何处理 NULL 值的主要内容,如果未能解决你的问题,请参考以下文章