共用方式為


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 值,且不會納入計算:

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 的條件約束。