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 值和二元运算符
二元操作符是一种标量操作符,它接受两个标量值并产生第三个值。 例如,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
约束没有等效项。