Valori Null

Tutti i tipi di dati scalari in Kusto hanno un valore speciale che rappresenta un valore mancante. Questo valore viene chiamato valore Null o Null.

Nota

Il string tipo di dati non supporta valori Null.

Valori letterali Null

Il valore Null di un tipo scalare T è rappresentato nel linguaggio di query dal valore letterale T(null)Null .

La query seguente restituisce una singola riga piena di valori Null:

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

Predicati su valori Null

La funzione isnull() scalare può essere usata per determinare se un valore scalare è il valore Null. La funzione isnotnull() corrispondente può essere usata per determinare se un valore scalare non è il valore Null.

Nota

Poiché il string tipo non supporta valori Null, è consigliabile usare le isempty() funzioni e isnotempty() .

Uguaglianza e disuguaglianza di valori Null

  • Uguaglianza (==): l'applicazione dell'operatore di uguaglianza a due valori Null restituisce bool(null). L'applicazione dell'operatore di uguaglianza a un valore Null e un valore non Null restituisce bool(false).
  • Disuguaglianza (!=): l'applicazione dell'operatore di disuguaglianza a due valori Null restituisce bool(null). L'applicazione dell'operatore di disuguaglianza a un valore Null e un valore non Null restituisce bool(true).

Ad esempio:

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 true true false true
Null Null true Null Null

Valori Null e funzioni di aggregazione

Quando si applicano gli operatori seguenti alle entità che includono valori Null, i valori Null vengono ignorati e non vengono fattorizzati nel calcolo:

Valori Null e where operatore

L'operatore where usa espressioni booleane per determinare se generare ogni record di input nell'output. Questo operatore considera i valori Null come se fossero bool(false). I record per i quali il predicato restituisce il valore Null vengono eliminati e non vengono visualizzati nell'output.

Ad esempio:

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

Output

ival sval
Null b

Valori Null e operatori binari

Gli operatori binari sono operatori scalari che accettano due valori scalari e producono un terzo valore. Ad esempio, maggiore di (>) e AND booleano (&&) sono operatori binari.

Per tutti gli operatori binari, ad eccezione di quanto indicato in Eccezioni a questa regola, la regola è la seguente:

Se uno o entrambi i valori di input per l'operatore binario sono valori Null, l'output dell'operatore binario è anche il valore Null. In altre parole, il valore Null è "sticky".

Eccezioni a questa regola

  • Per gli operatori di uguaglianza (==) e disuguaglianza (!=), se uno dei valori è Null e l'altro valore non è Null, il risultato è bool(false) rispettivamente o bool(true).
  • Per l'operatore AND logico (&&), se uno dei valori è bool(false), il risultato è anche bool(false).
  • Per l'operatore LOGICO OR (||), se uno dei valori è bool(true), il risultato è anche bool(true).

Ad esempio:

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

Output

Val Add Moltiplicazione
5 15 50
Null Null Null

Valori Null e operatore LOGICO NOT (!)

L'operatore NOT logico not() restituisce il valore bool(null) se l'argomento è il valore Null.

Valori Null e in operatore

  • L'operatore in si comporta come un OR logico di confronti di uguaglianza.
  • L'operatore !in si comporta come un confronto logico AND di disuguaglianza.

Valori Null e inserimento dati

Per la maggior parte dei tipi di dati, un valore mancante nell'origine dati produce un valore Null nella cella di tabella corrispondente. Tuttavia, le colonne di tipo string e i formati di dati CSV (o simili a CSV) sono un'eccezione a questa regola e un valore mancante produce una stringa vuota.

Ad esempio:

.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

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

Nota

  • Se si esegue la query precedente in Kusto.Explorer, tutti i valori verranno visualizzati come e tutti i true valori verranno visualizzati come 10.false
  • Kusto non offre un modo per limitare la colonna di una tabella dalla presenza di valori Null. In altre parole, non esiste alcun vincolo equivalente a SQL NOT NULL .

Nota

Kusto non offre un modo per limitare la colonna di una tabella dalla presenza di valori Null. In altre parole, non esiste alcun vincolo equivalente a SQL NOT NULL .