Поделиться через


Значения NULL

Область применения: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

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

Примечание.

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

Литералы NULL

Значение NULL скалярного типа T представлено языком запросов с помощью null-литерала T(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

  • Равенство (==): применение оператора равенства к двум значениям bool(null)NULL дает. Применение оператора равенства к значению NULL и получению bool(false)ненулевого значения.
  • Неравенство (!=): применение оператора неравенства к двум значениям NULL даетbool(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)

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

val IsBiggerThan3 IsBiggerThan3OrNull IsEqualToNull IsNotEqualToNull
5 true 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 б

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

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

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

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

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

  • Для операторов равенства (==) и неравенства (!=) если одно из значений равно 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

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

val Добавить Умножение
5 15 50
null null null

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

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

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

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

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

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

Например:

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

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

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

Примечание.

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

Примечание.

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