空值
Kusto 中的所有純量資料類型都具有代表遺漏值的特殊值。 此值稱為 空值或 空值。
string資料類型不支援空值。
空值文字
純量類型 T 的空值以查詢語言以空值文字 T(null)表示。 下列查詢會傳回空值的單一列:
print bool(null), datetime(null), dynamic(null), guid(null), int(null), long(null), real(null), double(null), time(null)
空值的述詞
純量函數 isnull() 可用來判斷純量值是否為空值。 對應的函數 isnotnull() 可用來判斷純量值是否不是空值。
因為 string 類型不支援空值,建議使用 isempty() 及 isnotempty() 函數。
空值的等式和不等式
- 相等 (
==): 將相等運算子套用至兩個空值會產生bool(null)。 將等式運算子套用至空值和非空值會產生bool(false)。 - 不等式 (
!=): 將不等式運算子套用至兩個空值會產生bool(null)。 將不等式運算子套用至空值和非空值會產生bool(true)。
範例:
datatable(val:int)[5, int(null)]
| extend IsBiggerThan3 = val > 3
| extend IsBiggerThan3OrNull = val > 3 or isnull(val)
| extend IsEqualToNull = val == int(null)
| extend IsNotEqualToNull = val != int(null)
結果
| 值 | IsBiggerThan3 | IsBiggerThan3OrNull | IsEqualToNull | IsNotEqualTo空值 |
|---|---|---|---|---|
| 5 | 是 | 是 | False | 是 |
| 空值 | 空值 | 是 | 空值 | 空值 |
空值及 where 查詢運算子
where 運算子 使用布林表示式來決定是否將每一個輸入記錄發出至輸出。 此運算子會將空值視為 bool(false)。 述詞傳回空值的記錄會被捨棄,且不會出現在輸出中。
範例:
datatable(ival:int, sval:string)[5, "a", int(null), "b"]
| where ival != 5
結果
| 伊瓦爾 | 斯瓦爾 |
|---|---|
| 空值 | b |
二進位運算子和空值
二進位運算子是接受兩個純量值並產生第三個值的純量運算子。 For example, greater-than (>) and Boolean AND (&&) are binary operators.
對於所有二進位運算子 ( 以下除外) ,規則如下:
如果輸入至二進位運算子的其中一個或兩個值都是空值,則二進位運算子的輸出也是空值。 換句話說,空值是 "sticky"。
此規則的例外
- 對於等式 (
==) 和不等式 (!=) 運算子,如果其中一個值是空值,而另一個值不是空值,則結果分別為bool(false)或bool(true)。 - For the logical AND (&&) operator, if one of the values is
bool(false), the result is alsobool(false). - 對於邏輯 OR (
||) 運算子,如果其中一個值是bool(true),則結果也是bool(true)。
範例
datatable(val:int)[5, int(null)]
| extend Add = val + 10
| extend Multiply = val * 10
結果
| 值 | 新增 | 乘 |
|---|---|---|
| 5 | 15 日 | 50 |
| 空值 | 空值 | 空值 |
空值及 in 運算子
- in 運算子 的行為類似於相等比較的邏輯 OR。
- ! in 運算子的行為類似於不等式比較的邏輯 AND。