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

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