Null 值
適用於:✅Microsoft網狀架構✅Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel
Kusto 中的所有純量數據類型都有代表遺漏值的特殊值。 這個值稱為 Null 值或 Null。
注意
數據類型 string
不支援 Null 值。
Null 常值
純量型 別 T 的 Null 值會以 null 常值 T(null)
表示在查詢語言中。
下列查詢會傳回包含 Null 值的單一資料列:
print bool(null), datetime(null), dynamic(null), guid(null), int(null), long(null), real(null), double(null), timespan(null)
Null 值的述詞
純量函 isnull()
式可用來判斷純量值是否為 Null 值。 對應的函 isnotnull()
式可用來判斷純量值是否不是 Null 值。
注意
string
因為類型不支援 Null 值,因此我們建議使用 isempty()
和函isnotempty()
式。
Null 值的相等和不相等
- 相等 (
==
): 將相等運算子套用至兩個 Null 值會產生bool(null)
。 將相等運算子套用至 Null 值,且非 Null 值會產生bool(false)
。 - 不等比較 (
!=
):將不等比較運算子套用至兩個 Null 值會產生bool(null)
。 將不等比較運算子套用至 Null 值,且非 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 | IsNotEqualToNull |
---|---|---|---|---|
5 | true | true | false | true |
null | null | true | null | null |
Null 值和聚合函數
將下列運算子套用至包含 Null 值的實體時,會忽略 Null 值,且不會納入計算:
- count()
- count_distinct()
- countif()
- dcount()
- dcountif()
- make_bag()
- make_bag_if()
- make_list()
- make_list_if()
- make_set()
- make_set_if()
- stdev()
- stdevif()
- sum()
- sumif()
- 變異數()
- varianceif()
Null 值和 where
運算符
where 運算子會使用布爾表達式來判斷是否要將每個輸入記錄發出至輸出。 此運算子會將 Null 值視為 bool(false)
。 述詞傳回 Null 值的記錄會卸除,而且不會出現在輸出中。
例如:
datatable(ival:int, sval:string)[5, "a", int(null), "b"]
| where ival != 5
輸出
ival | sval |
---|---|
null | b |
Null 值和二進位運算符
二元運算符是接受兩個純量值的純量運算符,併產生第三個值。 例如,大於 (>) 和布爾 AND (&&) 是二元運算符。
對於所有二進位運算符,除了此規則的例外狀況中所述以外,規則如下:
如果二元運算子的一或兩個值輸入都是 Null 值,則二進位運算子的輸出也是 Null 值。 換句話說,Null 值為 「sticky」。。
此規則的例外狀況
- 對於相等 (
==
) 和不等!=
比較運算符,如果其中一個值為 null,而另一個值不是 Null,則結果bool(false)
分別為 或bool(true)
。 - 若為邏輯 AND (&&) 運算子,如果其中一個值為
bool(false)
,則結果也是bool(false)
。 - 如果是邏輯 OR (
||
) 運算子,如果其中一個值為bool(true)
,則結果也是bool(true)
。
例如:
datatable(val:int)[5, int(null)]
| extend Add = val + 10
| extend Multiply = val * 10
輸出
數量 | 加 | 乘積 |
---|---|---|
5 | 15 | 50 |
null | null | null |
Null 值和邏輯 NOT (!
) 運算子
如果自變數是 Null 值bool(null)
,則邏輯 NOT 運算符 not() 會產生值。
Null 值和 in
運算符
- in 運算子 的行為就像是相等比較的邏輯 OR。
- 運算子
!in
的行為就像不相等比較的邏輯AND
。
Null 值和數據擷取
對於大部分的數據類型,數據源中的遺漏值會在對應的數據表數據格中產生 Null 值。 不過,類型 string
為和 CSV 的數據行(或類似 CSV 的數據格式)是此規則的例外狀況,而遺漏的值會產生空字串。
例如:
.create table T(a:string, b:int)
.ingest inline into table T
[,]
[ , ]
[a,1]
T
| project a, b, isnull_a=isnull(a), isempty_a=isempty(a), stlen_a=strlen(a), isnull_b=isnull(b)
輸出
a | b | isnull_a | isempty_a | strlen_a | isnull_b |
---|---|---|---|---|---|
false | true | 0 | true | ||
false | false | 1 | true | ||
a | 1 | false | false | 1 | false |
注意
- 如果您在 Kusto.Explorer 中執行上述查詢,所有
true
值都會顯示為1
,而且所有false
值都會顯示為0
。 - Kusto 不提供限制數據表數據行具有 Null 值的方法。 換句話說,沒有相當於 SQL
NOT NULL
的條件約束。
注意
Kusto 不提供限制數據表數據行具有 Null 值的方法。 換句話說,沒有相當於 SQL NOT NULL
的條件約束。