Значения 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 игнорируются и не учитываются при вычислении:
- count()
- count_distinct()
- countif()
- dcount()
- dcountif()
- make_bag()
- make_bag_if()
- make_list()
- make_list_if()
- make_set()
- make_set_if()
- stdev()
- stdevif()
- sum()
- sumif()
- variance()
- varianceif()
Значения 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.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по