Null 值
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)
輸出
val | 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()
- variance()
- 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 值有「黏性」。
此規則的例外狀況
- 針對等式 (
==
) 和不等式 (!=
) 運算子,如果其中一個值為 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
輸出
val | 加 | 乘以 |
---|---|---|
5 | 15 | 50 |
null | null | null |
Null 值和邏輯 NOT () !
運算符
如果引數為 null 值,則邏輯 NOT 運算子 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)
輸出
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
相等的條件約束。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應