Udostępnij za pośrednictwem


Wartości null

Wszystkie typy danych skalarnych w usłudze Kusto mają specjalną wartość, która reprezentuje brakującą wartość. Ta wartość jest nazywana wartością null lub wartością null.

Uwaga

Typ string danych nie obsługuje wartości null.

Literały null

Wartość null typu skalarnego T jest reprezentowana w języku zapytań przez literał T(null)null .

Następujące zapytanie zwraca pojedynczy wiersz pełen wartości null:

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

Predykaty dla wartości null

Funkcja isnull() skalarna może służyć do określenia, czy wartość skalarna jest wartością null. Odpowiednią funkcję isnotnull() można użyć do określenia, czy wartość skalarna nie jest wartością null.

Uwaga

string Ponieważ typ nie obsługuje wartości null, zalecamy używanie isempty() funkcji i isnotempty() .

Równość i nierówności wartości null

  • Równość (==): zastosowanie operatora równości do dwóch wartości null daje wartość bool(null). Zastosowanie operatora równości do wartości null i wartości innej niż null daje wartość bool(false).
  • Nierówności (!=): zastosowanie operatora nierówności do dwóch wartości null daje wartość bool(null). Zastosowanie operatora nierówności do wartości null i wartość innej niż null daje wartość bool(true).

Na przykład:

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)

Dane wyjściowe

Val IsBiggerThan3 IsBiggerThan3OrNull IsEqualToNull IsNotEqualToNull
5 true true fałsz true
null null true null null

Wartości null i funkcje agregacji

Podczas stosowania następujących operatorów do jednostek, które zawierają wartości null, wartości null są ignorowane i nie są uwzględniane w obliczeniu:

Wartości null i where operator

Operator where używa wyrażeń logicznych, aby określić, czy emitować każdy rekord wejściowy do danych wyjściowych. Ten operator traktuje wartości null tak, jakby były bool(false). Rekordy, dla których predykat zwraca wartość null, są porzucane i nie są wyświetlane w danych wyjściowych.

Na przykład:

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

Dane wyjściowe

ival sval
null b

Wartości null i operatory binarne

Operatory binarne to operatory skalarne, które akceptują dwie wartości skalarne i generują trzecią wartość. Na przykład operatory większe niż (>) i logiczne AND (&&) są operatorami binarnymi.

W przypadku wszystkich operatorów binarnych, z wyjątkiem wyjątków dla tej reguły, reguła jest następująca:

Jeśli jedna lub obie wartości wejściowe operatora binarnego są wartościami null, dane wyjściowe operatora binarnego są również wartością null. Innymi słowy, wartość null to "sticky".

Wyjątki od tej reguły

  • W przypadku operatorów równości (==) i nierówności (!=), jeśli jedna z wartości ma wartość null, a druga wartość nie ma wartości null, wynikiem jest bool(false) wartość lub bool(true), odpowiednio.
  • Dla operatora logicznego AND (&&), jeśli jedną z wartości jest bool(false), wynikiem jest również bool(false).
  • Dla operatora logicznego OR (||), jeśli jedną z wartości jest bool(true), wynikiem jest również bool(true).

Na przykład:

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

Dane wyjściowe

Val Dodaj Mnożenie
5 15 50
null null null

Wartości null i operator logiczny NOT (!)

Operator logiczny NOT () zwraca wartość bool(null) , jeśli argument jest wartością null.

Wartości null i in operator

  • Operator in zachowuje się jak logiczne porównanie równości OR.
  • Operator !in zachowuje się jak logiczne AND porównania nierówności.

Wartości null i pozyskiwanie danych

W przypadku większości typów danych brakująca wartość w źródle danych generuje wartość null w odpowiedniej komórce tabeli. Jednak kolumny typu string i formaty danych CSV (lub csv-like) są wyjątkiem od tej reguły, a brakująca wartość generuje pusty ciąg.

Na przykład:

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

Dane wyjściowe

a b isnull_a isempty_a strlen_a isnull_b
    fałsz true 0 true
    fałsz fałsz 1 true
a 1 fałsz fałsz 1 fałsz

Uwaga

  • Jeśli uruchomisz powyższe zapytanie w programie Kusto.Explorer, wszystkie true wartości będą wyświetlane jako 1, a wszystkie false wartości będą wyświetlane jako 0.
  • Usługa Kusto nie oferuje możliwości ograniczenia kolumny tabeli z powodu wartości null. Innymi słowy, nie ma odpowiednika NOT NULL ograniczenia sql.

Uwaga

Usługa Kusto nie oferuje możliwości ograniczenia kolumny tabeli z powodu wartości null. Innymi słowy, nie ma odpowiednika NOT NULL ograniczenia sql.