Valores nulos

Todos os tipos de dados escalares no Kusto têm um valor especial que representa um valor em falta. Este valor é denominado valor nulo ou nulo.

Nota

O string tipo de dados não suporta valores nulos.

Literais nulos

O valor nulo de um tipo escalar T é representado na linguagem de consulta pelo literal T(null)nulo .

A consulta seguinte devolve uma única linha cheia de valores nulos:

print bool(null), datetime(null), dynamic(null), guid(null), int(null), long(null), real(null), double(null), timespan(null)

Predicados em valores nulos

A função isnull() escalar pode ser utilizada para determinar se um valor escalar é o valor nulo. A função isnotnull() correspondente pode ser utilizada para determinar se um valor escalar não é o valor nulo.

Nota

Uma vez que o string tipo não suporta valores nulos, recomendamos que utilize as isempty() funções e isnotempty() .

Igualdade e desigualdade de valores nulos

  • Igualdade (==): Aplicar o operador de igualdade a dois valores nulos gera bool(null). Aplicar o operador de igualdade a um valor nulo e um valor não nulo gera bool(false).
  • Desigualdade (!=): Aplicar o operador de desigualdade a dois valores nulos gera bool(null). Aplicar o operador de desigualdade a um valor nulo e um valor não nulo produz .bool(true)

Por exemplo:

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)

Saída

val IsBiggerThan3 IsBiggerThan3OrNull IsEqualToNull IsNotEqualToNull
5 true true false true
nulo nulo true nulo nulo

Valores nulos e funções de agregação

Ao aplicar os seguintes operadores a entidades que incluem valores nulos, os valores nulos são ignorados e não têm em conta o cálculo:

Valores nulos e o where operador

O operador where utiliza expressões booleanas para determinar se deve emitir cada registo de entrada para o resultado. Este operador trata os valores nulos como se fossem bool(false). Os registos para os quais o predicado devolve o valor nulo são removidos e não aparecem no resultado.

Por exemplo:

datatable(ival:int, sval:string)[5, "a", int(null), "b"]
| where ival != 5

Saída

ival sval
nulo b

Valores nulos e operadores binários

Os operadores binários são operadores escalares que aceitam dois valores escalares e produzem um terceiro valor. Por exemplo, maior do que (>) e Booleano E (&&) são operadores binários.

Para todos os operadores binários, exceto conforme indicado em Exceções a esta regra, a regra é a seguinte:

Se um ou ambos os valores introduzidos no operador binário forem valores nulos, a saída do operador binário também é o valor nulo. Por outras palavras, o valor nulo é "sticky".

Exceções a esta regra

  • Para os operadores de igualdade (==) e desigualdade (!=), se um dos valores for nulo e o outro valor não for nulo, o resultado será ou bool(false)bool(true), respetivamente.
  • Para o operador lógico E (&&), se um dos valores for bool(false), o resultado também bool(false)é .
  • Para o operador lógico OR (||), se um dos valores for bool(true), o resultado também bool(true)é .

Por exemplo:

datatable(val:int)[5, int(null)]
| extend Add = val + 10
| extend Multiply = val * 10

Saída

val Adicionar Multiplicar
5 15 50
nulo nulo nulo

Valores nulos e o operador lógico NOT (!)

O operador NÃO lógico não() gera o valor bool(null) se o argumento for o valor nulo.

Valores nulos e o in operador

  • O operador in comporta-se como um OU lógico de comparações de igualdade.
  • O !in operador comporta-se como uma lógica AND de comparações de desigualdade.

Valores nulos e ingestão de dados

Para a maioria dos tipos de dados, um valor em falta na origem de dados produz um valor nulo na célula de tabela correspondente. No entanto, as colunas de tipo string e formatos de dados CSV (ou semelhantes a CSV) são uma exceção a esta regra e um valor em falta produz uma cadeia vazia.

Por exemplo:

.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)

Saída

um b isnull_a isempty_a strlen_a isnull_b
    false true 0 true
    false false 1 true
um 1 false false 1 false

Nota

  • Se executar a consulta acima no Kusto.Explorer, todos os true valores serão apresentados como 1e todos os false valores serão apresentados como 0.
  • O Kusto não oferece uma forma de impedir que a coluna de uma tabela tenha valores nulos. Por outras palavras, não há equivalente à restrição do NOT NULL SQL.

Nota

O Kusto não oferece uma forma de impedir que a coluna de uma tabela tenha valores nulos. Por outras palavras, não há equivalente à restrição do NOT NULL SQL.