splunk

Splunkコマンド「search」と「where」の違い

更新日:

Splunkコマンドの「search」と「where」はどちらを使えばよいのか迷うことが多いので、違いについて整理します。

サンプルデータ

| makeresults
| eval "A field" = "abcdefg" ,"B field" = "abcdefg","C field" = 1000
| append [makeresults | eval "A field" = "hijklmn","B field" = "abcdefg","C field" = "opqrst"]
| fields - _time

このデータを使って確認していきます。

「search」と「where」の違い

フィールドの比較ができる(where)

whereの場合、フィールドの比較が可能です。

コード

| makeresults
| eval "A field" = "abcdefg" ,"B field" = "abcdefg","C field" = 1000
| append [makeresults | eval "A field" = "hijklmn","B field" = "abcdefg","C field" = "opqrst"]
| fields - _time
| where 'A field' = 'B field'

結果

「A field」と「B field」が一致する行だけ抽出されました。

“(ダブルクォーテーション)でフィールド名を囲うと文字列と認識してしまうので、値を比較するために’(シングルクォーテーション)で囲います。

サンプルデータはフィールド名に空白が含まれているため、’(シングルクォーテーション)で囲いましたが、「A_field」のように空白を含まない場合は、’(シングルクォーテーション)で囲う必要はありません。

searchの場合は、フィールド同士の比較はできません。

*(ワイルドカード)が使える(search)

searchの場合、*(アスタリスク)をワイルドカードとして使用できます。

コード

| makeresults
| eval "A field" = "abcdefg" ,"B field" = "abcdefg","C field" = 1000
| append [makeresults | eval "A field" = "hijklmn","B field" = "abcdefg","C field" = "opqrst"]
| fields - _time
| search "A field" = "*jk*"

結果

「A field」に「jk」を含む行が抽出されました。

whereでもlike関数を使用すれば同じことができますが、searchのほうがお手軽に感じます。

関数が使える(where)

whereはisnum(),isnull(),like()などの関数が使えます。

コード

| makeresults
| eval "A field" = "abcdefg" ,"B field" = "abcdefg","C field" = 1000
| append [makeresults | eval "A field" = "hijklmn","B field" = "abcdefg","C field" = "opqrst"]
| fields - _time
| where isnum('C field')

結果

「C field」が数値の行のみ抽出されました。

コード

| makeresults
| eval "A field" = "abcdefg" ,"B field" = "abcdefg","C field" = 1000
| append [makeresults | eval "A field" = "hijklmn","B field" = "abcdefg","C field" = "opqrst"]
| fields - _time
| where like('A field',"%jk%")

結果

「A field」に「jk」を含む行が抽出されました。

使える関数はこちらに記載されています。
結構色々使えますね。

whereで使える関数

まとめ

whereの方が、フィールド同士を比較できたり、関数を使えるので細かい抽出が可能です。

searchは、最初のコマンド(search)で抽出することができるので、お手軽に使えます。

コマンド自体のパフォーマンスの違いはわかりませんが、データの抽出はできるだけ初期に実施したほうが全体のパフォーマンスは向上するので、私はsearchで抽出できる場合はできるだけsearchで抽出し、searchで出来ない場合のみwhereで実施するようにしています。







-splunk
-

Copyright© Tech Log , 2020 All Rights Reserved Powered by STINGER.