Значения NULL

Все скалярные типы данных в Kusto имеют специальное значение, представляющее отсутствующее значение. Это значение называется значением NULL или null.

Примечание

Тип string данных не поддерживает значения NULL.

Литералы NULL

Значение NULL скалярного типа T представлено в языке запросов литералом T(null)NULL .

Следующий запрос возвращает одну строку со значениями NULL:

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

Предикаты для значений NULL

Скалярную функцию isnull() можно использовать для определения того, является ли скалярное значение значением NULL. Соответствующую функцию isnotnull() можно использовать для определения того, не является ли скалярное значение значением NULL.

Примечание

string Так как тип не поддерживает значения NULL, рекомендуется использовать isempty() функции и isnotempty() .

Равенство и неравенство значений NULL

  • Равенство (==): применение оператора равенства к двум значениям NULL приводит к получению bool(null). Применение оператора равенства к значению NULL и значению, отличному от NULL, возвращает bool(false).
  • Неравенство (!=): применение оператора неравенства к двум значениям NULL приводит к получению bool(null). Применение оператора неравенства к значению NULL и значению, отличному от NULL, приводит к получению bool(true).

Пример:

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)

Выходные данные

Валь IsBiggerThan3 IsBiggerThan3OrNull IsEqualToNull IsNotEqualToNull
5 Да true false true
null null true null null

Значения NULL и агрегатные функции

При применении следующих операторов к сущностям, которые содержат значения NULL, значения NULL игнорируются и не учитываются при вычислении:

Значения NULL и where оператор

Оператор where использует логические выражения, чтобы определить, следует ли передавать каждую входную запись в выходные данные. Этот оператор обрабатывает значения NULL так, как если бы они были bool(false). Записи, для которых предикат возвращает значение NULL, удаляются и не отображаются в выходных данных.

Пример:

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

Выходные данные

ival sval
null b

Значения NULL и бинарные операторы

Бинарные операторы — это скалярные операторы, которые принимают два скалярных значения и создают третье значение. Например, больше (>) и логическое значение AND (&&) являются бинарными операторами.

Для всех бинарных операторов, за исключением случаев, указанных в разделе Исключения из этого правила, правило выглядит следующим образом:

Если одно или оба значения, входные в бинарный оператор, являются значениями NULL, то выходные данные двоичного оператора также являются значением NULL. Иными словами, значение NULL равно "sticky".

Исключения из этого правила

  • Для операторов равенства (==) и неравенства (!=) если одно из значений равно NULL, а другое значение не равно NULL, результатом будет bool(false) или bool(true)соответственно.
  • Для логического оператора AND (&&), если одно из значений равно bool(false), результатом также bool(false)является .
  • Для оператора логического ИЛИ (||), если одно из значений равно bool(true), результатом также bool(true)является .

Пример:

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

Выходные данные

Валь Добавить Multiply
5 15 50
null null null

Значения NULL и оператор логического NOT (!)

Логический оператор NOT not() возвращает значение bool(null) , если аргумент является значением NULL.

Значения NULL и in оператор

  • Оператор in ведет себя как логическое ИЛИ сравнения на равенство.
  • Оператор !in ведет себя как логическое AND сравнение неравенства.

Значения NULL и прием данных

Для большинства типов данных отсутствующее значение в источнике данных создает значение NULL в соответствующей ячейке таблицы. Однако столбцы типа string и форматы данных CSV (или csv-like) являются исключением из этого правила, а отсутствующее значение приводит к пустой строке.

Пример:

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

Выходные данные

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

Примечание

  • Если вы выполните приведенный выше запрос в Kusto. Обозреватель, все true значения будут отображаться как 1, а все false значения будут отображаться как 0.
  • Kusto не предлагает способ ограничить наличие значений NULL в столбце таблицы. Другими словами, нет эквивалента NOT NULL ограничению SQL.

Примечание

Kusto не предлагает способ ограничить наличие значений NULL в столбце таблицы. Другими словами, нет эквивалента NOT NULL ограничению SQL.