這是所有RDBMS系統如何對待null
值發生。
null
有着特殊的意義 - 像not defined
當您檢查:
COL1 NOT IN ('reversed')
以下比較將進行:
(null) != reversed
active != reversed
...
,只有那些返回true
會返回:
scala> spark.sql("SELECT 'active' != 'reversed'").show
+-------------------------+
|(NOT (active = reversed))|
+-------------------------+
| true|
+-------------------------+
scala> spark.sql("SELECT null != 'reversed'").show
+---------------------------------------+
|(NOT (CAST(NULL AS STRING) = reversed))|
+---------------------------------------+
| null|
+---------------------------------------+
,你可以看到:(null) != 'reversed'
不返回true
- 這就是爲什麼你沒有看到它在結果集中
此外:
scala> spark.sql("SELECT (null) = 'reversed'").show
+---------------------------------+
|(CAST(NULL AS STRING) = reversed)|
+---------------------------------+
| null|
+---------------------------------+
正因爲如此,我們有IS NULL
,IS NOT NULL
, COALESCE
等方法和功能,允許我們使用NULL
值
謝謝澄清!它有幫助。 – Neena