Null 值
Kusto 中的所有标量数据类型都具有表示缺失值的特殊值。 此值称为 null 值或 null。
string数据类型不支持空值。
空字面值
标量类型 T 的空值在查询语言中由空字面值 T(null)表示。 以下查询返回包含空值的单行:
print bool(null), datetime(null), dynamic(null), guid(null), int(null), long(null), real(null), double(null), time(null)
空值的谓词
标量函数 isnull() 可用于确定标量值是否为空值。 相应的函数 isnotnull() 可用于确定标量值是否不是空值。
由于 string 类型不支持空值,因此建议使用 isempty() 和 isnotempty() 函数。
空值的等式和不等式
- 等同性 (
==): 将等同性运算符应用于两个空值会产生bool(null)。 将等式运算符应用于空值和非空值会生成bool(false)。 - 不等式 (
!=): 将不等式运算符应用于两个空值会产生bool(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 | IsNotEqualTo空 |
|---|---|---|---|---|
| 5 | 是 | 是 | 否 | 是 |
| 空值 | 空值 | 是 | 空值 | 空值 |
空值和 where 查询运算符
where 运算符 使用布尔表达式来确定是否将每个输入记录发送到输出。 此运算符将空值视为 bool(false)。 将删除谓词返回空值的记录,并且这些记录不会显示在输出中。
示例:
datatable(ival:int, sval:string)[5, "a", int(null), "b"]
| where ival != 5
结果
| 伊瓦尔 | 斯瓦尔 |
|---|---|
| 空值 | b |
二进制运算符和空值
二进制运算符是接受两个标量值并生成第三个值的标量运算符。 For example, greater-than (>) and Boolean AND (&&) are binary operators.
对于所有二进制运算符,除 下面说明外,该规则如下所示:
如果输入到二进制运算符的一个或两个值都是空值,那么二进制运算符的输出也是空值。 换言之,空值为 "粘性"。
此规则的例外
- 对于等式 (
==) 和等式 (!=) 运算符,如果其中一个值为空,而另一个值不为空,那么结果分别为bool(false)或bool(true)。 - For the logical AND (&&) operator, if one of the values is
bool(false), the result is alsobool(false). - 对于逻辑 OR (
||) 运算符,如果其中一个值为bool(true),那么结果也是bool(true)。
示例
datatable(val:int)[5, int(null)]
| extend Add = val + 10
| extend Multiply = val * 10
结果
| val | 添加 | 乘 |
|---|---|---|
| 5 | 15 日 | 50 |
| 空值 | 空值 | 空值 |
空值和 in 运算符
- 在运算符中 的行为类似于等同性比较的逻辑 OR。
- 运算符中的! 行为类似于不等式比较的逻辑 AND。