Null 値
適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
Kusto のすべてのスカラー データ型には、欠損値を表す特別な値が含まれています。 この値は、null 値または nullと呼ばれます。
Note
string
データ型は null 値をサポートしていません。
null リテラル
スカラー型 T の null 値は、null リテラル T(null)
によってクエリ言語で表されます。
次のクエリでは、null 値を持つ 1 つの行が返されます。
print bool(null), datetime(null), dynamic(null), guid(null), int(null), long(null), real(null), double(null), timespan(null)
Null 値の述語
スカラー関数 isnull()
は、スカラー値が null 値かどうかを判断するために使用できます。 対応する関数 isnotnull()
を使用すると、スカラー値が null 値でないかどうかを判断できます。
Note
string
型は null 値をサポートしていないため、isempty()
関数とisnotempty()
関数を使用することをお勧めします。
Null 値の等値および非等値
- 等値 値 (
==
): 2 つの null 値に等値演算子を適用すると、bool(null)
が生成されます。 Null 値と null 以外の値に等値演算子を適用すると、bool(false)
が生成されます。 - 非等値 (
!=
): 2 つの 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)
出力
val | IsBiggerThan3 | IsBiggerThan3OrNull | IsEqualToNull | IsEqualToNull |
---|---|---|---|---|
5 | true | 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 値と 2 項演算子
二項演算子は、2 つのスカラー値を受け取り、3 番目の値を生成するスカラー演算子です。 たとえば、より大きい (>) とブール値 AND (&) は二項演算子です。
この規則に対する Exceptions で説明されている場合を除きすべての二項演算子の規則は次のとおりです。
二項演算子に入力された値の一方または両方が null 値の場合、二項演算子の出力も null 値になります。 つまり、null 値は「固定」です。
このルールの例外を以下に示します。
- 等値 (
==
) 演算子と非等値演算子 (!=
) では、いずれかの値が null で、もう一方の値が null でない場合、結果 はそれぞれbool(false)
またはbool(true)
になります。 - 論理 AND (&) 演算子の場合、値の 1 つが
bool(false)
場合、結果もbool(false)
。 - 論理 OR (
||
) 演算子の場合、いずれかの値がbool(true)
の場合には、結果もbool(true)
になります。
次に例を示します。
datatable(val:int)[5, int(null)]
| extend Add = val + 10
| extend Multiply = val * 10
出力
val | 追加 | Multiply |
---|---|---|
5 | 15 | 50 |
null | null | null |
null 値と論理 NOT (!
) 演算子
論理 NOT 演算子 not() は、引数が null 値の場合に bool(null)
値を生成します。
null 値と in
演算子
- In 演算子は、論理 OR の等価比較のように動作します。
!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 | b | isnull_a | isempty_a | strlen_a | isnull_b |
---|---|---|---|---|---|
false | true | 0 | true | ||
false | false | 1 | true | ||
a | 1 | false | false | 1 | false |
Note
- 上記のクエリを Kusto エクスプローラーで実行すると、すべて
true
の値が1
として表示され、すべてfalse
の値が0
として表示されます。 - Kusto では、テーブルの列が null 値を持つことを制限する方法は提供されていません。 言い換えれば、SQLの
NOT NULL
制約に相当するものはありません。
Note
Kusto では、テーブルの列が null 値を持つことを制限する方法は提供されていません。 言い換えれば、SQLの NOT NULL
制約に相当するものはありません。