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 gerabool(null)
. Aplicar o operador de igualdade a um valor nulo e um valor não nulo gerabool(false)
. - Desigualdade (
!=
): Aplicar o operador de desigualdade a dois valores nulos gerabool(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:
- 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()
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á oubool(false)
bool(true)
, respetivamente. - Para o operador lógico E (&&), se um dos valores for
bool(false)
, o resultado tambémbool(false)
é . - Para o operador lógico OR (
||
), se um dos valores forbool(true)
, o resultado tambémbool(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ógicaAND
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 como1
e todos osfalse
valores serão apresentados como0
. - 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.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários