Null 值

适用于:✅Azure 数据资源管理器Azure MonitorMicrosoft 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)

输出

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 值和二元运算符

二元操作符是一种标量操作符,它接受两个标量值并产生第三个值。 例如,greater-than (>) 和布尔“与”(&&) 是二元运算符。

对于除此规则的例外情况中所述的二元运算符之外的所有二元运算符,该规则如下:

如果输入到二进制运算符的值中有一个或两个是 NULL 值,则二元运算符的输出也是 NULL 值。 换句话说,NULL 值是“粘滞的”。

此规则的例外情况

  • 对于相等 (==) 和不相等 (!=) 运算符,如果其中一个值是 NULL,而另一个值不为 NULL,则结果分别是 bool(false)bool(true)
  • 对于逻辑“与”(&&) 运算符,如果其中一个值为 bool(false),则结果也为 bool(false)
  • 对于逻辑“或”(||) 运算符,如果其中一个值为 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 值和逻辑“非”(!) 运算符

如果参数为 NULL 值,逻辑“非”运算符 not() 会产生值 bool(null)

null 值和 in 运算符

  • in 运算符的行为类似于相等比较的逻辑“或”。
  • !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
a 1 false false 1 false

注意

  • 如果在 Kusto.Explorer 中运行上述查询,则所有 true 值将显示为 1,所有 false 值将显示为 0
  • Kusto 未提供用于限制表列,使其不具有 NULL 值的方法。 换句话说,SQL 的 NOT NULL 约束没有等效项。

注意

Kusto 未提供用于限制表列,使其不具有 NULL 值的方法。 换句话说,SQL 的 NOT NULL 约束没有等效项。