HiveQL 逻辑过滤语句如何处理 NULL 值
HiveQL how logic filter statement treats NULL values
我有一个示例数据集,如下所示:
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
如果我想 select 所有未被 Jane Smith 推荐的记录,我将使用以下命令:
SELECT Name FROM Customers WHERE ReferredBy <> 2;
在 SQL 服务器上,这将排除 NULL 值,因此我需要按以下方式编写:
SELECT Name FROM Customers WHERE ReferredBy IS NULL OR ReferredBy <> 2
HiveQL 有同样的问题吗?
*很难在我拥有的原始数据集上对其进行测试,因为它非常大,几乎没有缺失。
谢谢!
NULL
的行为由 SQL 定义,所有数据库都遵守它。也就是说,该标准还指定了 NULL
安全比较运算符 IS NOT DISTINCT FROM
和 IS DISTINCT FROM
。 Hive 支持一个平等,但不支持那个。
根据您的逻辑,您可以将此 Hive 扩展用于 <=>
:
where not (ReferredBy <=> 2)
<=>
是 NULL
安全比较,所以它 returns "true" 代表 NULL <=> NULL
和 "false" 代表 NULL <=> 2
,而不是 NULL
在这两种情况下。这大概是从 MySQL.
借来的
我有一个示例数据集,如下所示:
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
如果我想 select 所有未被 Jane Smith 推荐的记录,我将使用以下命令:
SELECT Name FROM Customers WHERE ReferredBy <> 2;
在 SQL 服务器上,这将排除 NULL 值,因此我需要按以下方式编写:
SELECT Name FROM Customers WHERE ReferredBy IS NULL OR ReferredBy <> 2
HiveQL 有同样的问题吗?
*很难在我拥有的原始数据集上对其进行测试,因为它非常大,几乎没有缺失。
谢谢!
NULL
的行为由 SQL 定义,所有数据库都遵守它。也就是说,该标准还指定了 NULL
安全比较运算符 IS NOT DISTINCT FROM
和 IS DISTINCT FROM
。 Hive 支持一个平等,但不支持那个。
根据您的逻辑,您可以将此 Hive 扩展用于 <=>
:
where not (ReferredBy <=> 2)
<=>
是 NULL
安全比较,所以它 returns "true" 代表 NULL <=> NULL
和 "false" 代表 NULL <=> 2
,而不是 NULL
在这两种情况下。这大概是从 MySQL.