0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Splunk: 判定処理における NULL の扱いについて

Posted at
実施環境: Splunk Free 8.2.2

0. 概要

Splunk では対象のフィールドに値が入っていない場合、 NULL として扱われます。
この NULL は、空文字列や 0 とは明確に別のものです。
今回は判定処理においてこの NULL を処理した場合の挙動について紹介していきます。

1. 使用するデータ

今回は、以下のデータをもとに確認していきます。

Splunk
| makeresults count=3
| streamstats count AS CNT
| eval NULL  = if( CNT == 1, null(), CNT),
       EMPTY = if( CNT == 2, "", CNT),
       ZERO  = if( CNT == 3, 0, CNT)
| fields - CNT, _time

WS000157.JPG

EMPTY NULL ZERO
1 (NULL) 1
(空文字列) 2 2
3 3 0

2. 通常の比較

比較演算子を用いた通常の比較において、両辺のどちらか一方でも NULL 値の場合は、常にその条件式は「偽」となります。
下記の条件式も、同一の値について等しいかどうかの確認なので NULL 値も当然「真」となるように思いますが、 NULL 値の場合のみ「偽」となっています。

Splunk
| makeresults count=3
| streamstats count AS CNT
| eval NULL  = if( CNT == 1, null(), CNT),
       EMPTY = if( CNT == 2, "", CNT),
       ZERO  = if( CNT == 3, 0, CNT)
| fields - CNT, _time
| eval NULL_IF  = if( NULL  == NULL,  "OK", "NG"),
       EMPTY_IF = if( EMPTY == EMPTY, "OK", "NG"),
       ZERO_IF  = if( ZERO  == ZERO,  "OK", "NG")

WS000223.JPG

3. NOT を使用する比較

NOT 演算子は条件の真偽を反転させる演算子ですが、その処理において NULL 値が関与しているかどうかは判定しません。
そのため下記のように同一の値について異なるかどうかを判定してその結果を反転させる場合、結果は NULL 値も含めて「真」となります。

Splunk
| makeresults count=3
| streamstats count AS CNT
| eval NULL  = if( CNT == 1, null(), CNT),
       EMPTY = if( CNT == 2, "", CNT),
       ZERO  = if( CNT == 3, 0, CNT)
| fields - CNT, _time
| eval NULL_IF  = if( NOT NULL  != NULL,  "OK", "NG"),
       EMPTY_IF = if( NOT EMPTY != EMPTY, "OK", "NG"),
       ZERO_IF  = if( NOT ZERO  != ZERO,  "OK", "NG")

WS000224.JPG

A A == A A != A NOT A != A
NULL
その他

4. 評価関数 を使用する比較

where コマンドや eval コマンドといった評価関数を使用する比較の場合、 NULL 値について判定を行える関数があります。
それが NULL 値の場合に真となる isnull 関数と、 NULL 値の場合に偽となる isnotnull 関数です。

Splunk
| makeresults count=3
| streamstats count AS CNT
| eval NULL  = if( CNT == 1, null(), CNT),
       EMPTY = if( CNT == 2, "", CNT),
       ZERO  = if( CNT == 3, 0, CNT)
| fields - CNT, _time
| eval NULL_IF  = if( isnull(NULL),  "OK", "NG"),
       EMPTY_IF = if( isnull(EMPTY), "OK", "NG"),
       ZERO_IF  = if( isnull(ZERO),  "OK", "NG")

WS000225.JPG

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?