NULL-Werte

Alle Skalardatentypen in Kusto verfügen über einen speziellen Wert, der einen fehlenden Wert darstellt. Dieser Wert wird als NULL-Wert oder NULL bezeichnet.

Hinweis

Der string Datentyp unterstützt keine NULL-Werte.

NULL-Literale

Der NULL-Wert eines Skalartyps T wird in der Abfragesprache durch das NULL-Literal T(null)dargestellt.

Die folgende Abfrage gibt eine einzelne Zeile mit NULL-Werten zurück:

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

Prädikate für NULL-Werte

Die Skalarfunktion isnull() kann verwendet werden, um zu bestimmen, ob ein Skalarwert der NULL-Wert ist. Die entsprechende Funktion isnotnull() kann verwendet werden, um zu bestimmen, ob ein Skalarwert nicht der NULL-Wert ist.

Hinweis

Da der string Typ keine NULL-Werte unterstützt, wird empfohlen, die isempty() Funktionen und zu isnotempty() verwenden.

Gleichheit und Ungleichheit von NULL-Werten

  • Gleichheit (==): Wenn der Gleichheitsoperator auf zwei NULL-Werte angewendet wird, wird zurückgegeben bool(null). Das Anwenden des Gleichheitsoperators auf einen NULL-Wert und einen Ungleich-NULL-Wert ergibt bool(false).
  • Ungleichheit (!=): Das Anwenden des Ungleichheitsoperators bool(null)auf zwei NULL-Werte ergibt . Das Anwenden des Ungleichheitsoperators auf einen NULL-Wert und einen Ungleich-NULL-Wert ergibt bool(true).

Beispiel:

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)

Ausgabe

Val IsBiggerThan3 IsBiggerThan3OrNull IsEqualToNull IsNotEqualToNull
5 true true false true
NULL NULL true NULL NULL

NULL-Werte und Aggregationsfunktionen

Beim Anwenden der folgenden Operatoren auf Entitäten, die NULL-Werte enthalten, werden die NULL-Werte ignoriert und nicht in die Berechnung einbezogen:

NULL-Werte und der where Operator

Der where-Operator verwendet boolesche Ausdrücke, um zu bestimmen, ob die einzelnen Eingabedatensätze an die Ausgabe ausgegeben werden sollen. Dieser Operator behandelt NULL-Werte so, als ob sie sind bool(false). Datensätze, für die das Prädikat den NULL-Wert zurückgibt, werden gelöscht und werden nicht in der Ausgabe angezeigt.

Beispiel:

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

Ausgabe

ival sval
NULL b

NULL-Werte und binäre Operatoren

Binäre Operatoren sind Skalaroperatoren, die zwei Skalarwerte akzeptieren und einen dritten Wert erzeugen. Beispielsweise sind größer als (>) und boolesche AND (&&) binäre Operatoren.

Für alle binären Operatoren gilt die Regel wie folgt, außer wie unter Ausnahmen für diese Regel angegeben:

Wenn einer oder beide werte, die für den binären Operator eingegeben werden, NULL-Werte sind, ist die Ausgabe des binären Operators ebenfalls der NULL-Wert. Mit anderen Worten, der NULL-Wert ist "sticky".

Ausnahmen von dieser Regel

  • Wenn für die Gleichheitsoperatoren (==) und Ungleichheitsoperatoren (!=) einer der Werte NULL und der andere Wert nicht NULL ist, lautet das Ergebnis entweder bool(false) oder bool(true)bzw. .
  • Wenn einer der Werte für den logischen AND-Operator (&&) ist bool(false), ist das Ergebnis ebenfalls bool(false).
  • Wenn einer der Werte für den logischen OR-Operator (||) ist, ist bool(true)das Ergebnis ebenfalls bool(true).

Beispiel:

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

Ausgabe

Val Hinzufügen Multiplizieren
5 15 50
NULL NULL NULL

NULL-Werte und der logische NOT-Operator (!)

Der logische NOT-Operator not() gibt den Wert bool(null) ab, wenn das Argument der NULL-Wert ist.

NULL-Werte und der in Operator

  • Der in-Operator verhält sich wie ein logisches OR von Gleichheitsvergleichen.
  • Der !in Operator verhält sich wie ein logischer AND Ungleichheitsvergleich.

NULL-Werte und Datenerfassung

Bei den meisten Datentypen erzeugt ein fehlender Wert in der Datenquelle einen NULL-Wert in der entsprechenden Tabellenzelle. Spalten vom Typ string und CSV -Datenformaten (oder CSV-ähnlich) sind jedoch eine Ausnahme von dieser Regel, und ein fehlender Wert erzeugt eine leere Zeichenfolge.

Zum Beispiel:

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

Ausgabe

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

Hinweis

  • Wenn Sie die obige Abfrage in Kusto ausführen. Explorer werden alle true Werte als 1angezeigt, und alle false Werte werden als 0angezeigt.
  • Kusto bietet keine Möglichkeit, die Spalte einer Tabelle auf NULL-Werte zu beschränken. Anders ausgedrückt: Es gibt keine Entsprechung mit der SQL-Einschränkung NOT NULL .

Hinweis

Kusto bietet keine Möglichkeit, die Spalte einer Tabelle auf NULL-Werte zu beschränken. Anders ausgedrückt: Es gibt keine Entsprechung mit der SQL-Einschränkung NOT NULL .