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 FROMIS DISTINCT FROM。 Hive 支持一种平等,但不支持那种平等。

根据您的逻辑,您可以将此 Hive 扩展用于&lt;=&gt;

where not (ReferredBy <=> 2)

&lt;=&gt;NULL-safe 比较,因此它为 NULL &lt;=&gt; NULL 返回“true”,为 NULL &lt;=&gt; 2 返回“false”,而不是在这两种情况下 NULL。这大概是从 mysql 借来的。

【讨论】:

以上是关于HiveQL 逻辑过滤语句如何处理 NULL 值的主要内容,如果未能解决你的问题,请参考以下文章

服务器返回<null>值 iOS 端如何处理

在 SQL 中该如何处理NULL值,你真的清楚么?

您如何处理排序、分页和过滤的参数?

前台如何处理后台返回的json数据

如何处理来自 ContentResolver.applyBatch 的“SQLiteException:null”?

通量/反应:如何处理商店中过滤的 api 数据