Partilhar via


Valores nulos

Aplica-se a: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

Todos os tipos de dados escalares no Kusto têm um valor especial que representa um valor ausente. Esse valor é chamado de valor nuloou valor nulo.

Observação

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

Literais nulos

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

A consulta a seguir retorna 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 escalar isnull() pode ser usada para determinar se um valor escalar é o valor nulo. A função correspondente isnotnull() pode ser usada para determinar se um valor escalar não é o valor nulo.

Observação

Como o tipo string não oferece suporte a valores nulos, recomendamos o uso das funções isempty() e isnotempty().

Igualdade e desigualdade de valores nulos

  • Igualdade (==): Aplicar o operador de igualdade a dois valores nulos produz bool(null). A aplicação do operador de igualdade a um valor nulo e a um valor não nulo produz bool(false).
  • Desigualdade (!=): Aplicar o operador de desigualdade a dois valores nulos produz bool(null). A aplicação do operador de desigualdade a um valor nulo e a 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)

Output

Val IsBiggerThan3 IsBiggerThan3OrNull IsEqualToNull IsNotEqualToNull
5 verdadeiro verdadeiro falso verdadeiro
nulo nulo verdadeiro nulo nulo

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

Ao aplicar os operadores a seguir a entidades que incluem valores nulos, os valores nulos são ignorados e não são considerados no cálculo:

Valores nulos e o operador where

O onde o operador usar expressões booleanas para determinar se deve emitir cada registro de entrada para a saída. Este operador trata valores nulos como se estivessem bool(false). Os registros para os quais o predicado retorna o valor nulo são descartados e não aparecem na saída.

Por exemplo:

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

Output

Ival Sval
nulo b

Valores nulos e operadores binários

Operadores binários são operadores escalares que aceitam dois valores escalares e produzem um terceiro valor. Por exemplo, maior 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 de entrada para o operador binário são valores nulos, então a saída do operador binário também é o valor nulo. Em outras palavras, o valor nulo é "pegajoso".

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á bool(false) ou bool(true), respectivamente.
  • Para o operador lógico AND (&&), se um dos valores for bool(false), o resultado também será bool(false).
  • Para o operador lógico OR (||), se um dos valores for bool(true), o resultado também será bool(true).

Por exemplo:

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

Output

Val Adicionar Multiplicar
5 15 50
nulo nulo nulo

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

O operador lógico NOT not() produz o valor bool(null) se o argumento for o valor nulo.

Valores nulos e o operador in

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

Valores nulos e ingestão de dados

Para a maioria dos tipos de dados, um valor ausente na fonte de dados produz um valor nulo na célula da tabela correspondente. No entanto, colunas de tipo string e formatos de dados CSV (ou semelhantes a CSV) são uma exceção a essa regra, e um valor ausente produz uma cadeia de caracteres 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)

Output

um b isnull_a isempty_a strlen_a isnull_b
    falso verdadeiro 0 verdadeiro
    falso falso 1 verdadeiro
um 1 falso falso 1 falso

Observação

  • Se você executar a consulta acima em Kusto.Explorer, todos os valores true serão exibidos como 1e todos os valores false serão exibidos como 0.
  • Kusto não oferece uma maneira de restringir a coluna de uma tabela de ter valores nulos. Em outras palavras, não há equivalente à restrição de NOT NULL do SQL.

Observação

Kusto não oferece uma maneira de restringir a coluna de uma tabela de ter valores nulos. Em outras palavras, não há equivalente à restrição de NOT NULL do SQL.