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 | 是 | 是 | 假的 | 是 |
| 零 | 零 | 是 | 零 | 零 |
Null 值和聚合函數
將下列運算子套用至包含 Null 值的實體時,會忽略 Null 值,且不會納入計算:
- 共變數()
- covarianceif()
- 共變數()
- covariancepif()
- dcount()
- dcountif()
- make_bag()
- make_bag_if()
- make_list()
- make_list_if()
- make_set()
- make_set_if()
- stdev()
- stdevif()
- sum()
- sumif()
- 變異數()
- varianceif()
- 變異數()
- variancepif()
Null 值和 where 運算符
where 運算子會使用布爾表達式來判斷是否要將每個輸入記錄發出至輸出。 此運算子會將 Null 值視為 bool(false)。 述詞傳回 Null 值的記錄會卸除,而且不會出現在輸出中。
例如:
datatable(ival:int, sval:string)[5, "a", int(null), "b"]
| where ival != 5
輸出
| ival | sval |
|---|---|
| 零 | 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 值和邏輯 NOT (!) 運算子
如果自變數是 Null 值,則邏輯 NOT 運算符 bool(null) 會產生值。
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)
輸出
| 一 | b | isnull_a | isempty_a | strlen_a | isnull_b |
|---|---|---|---|---|---|
| 假的 | 是 | 0 | 是 | ||
| 假的 | 假的 | 1 | 是 | ||
| 一 | 1 | 假的 | 假的 | 1 | 假的 |
注意
- 如果您在 Kusto.Explorer 中執行上述查詢,所有
true值都會顯示為1,而且所有false值都會顯示為0。 - Kusto 不提供限制數據表數據行具有 Null 值的方法。 換句話說,沒有相當於 SQL
NOT NULL的條件約束。
注意
Kusto 不提供限制數據表數據行具有 Null 值的方法。 換句話說,沒有相當於 SQL NOT NULL 的條件約束。