前置き
- SPLを書いていてハマったポイントを中心に備忘録として残す
- 2021.1.9追加
ケース1:レコード内の特定の列に”0”があった場合に、他の列の値も”0”に置き換えたい
###ポイント###
- 値(文字、数字)の置き換えはevalと**if(又はcase)**を利用する
- 上記データの赤矢印の値を"0"に置き換えたい
- そのために条件式として、
IF "ステップ(歩数)" が "0" なら、 "消費カロリー(cal)" を "0"に書き換える
とSPLで作成
###SPL例###
SPL(evalとif)
|eval summary.caloriesOut=if('summary.steps' == "0","0",'summary.caloriesOut')
###結果###
###ハマったポイント###
- フィールド名が「summary steps」や「summary.steps」のように間にスペースが入っていたり、ドットが含まれている場合、' (シングルコーテーション)で囲わないと認識しないので要注意。サーチ時にエラーが出ないのでハマりました。evalのお作法に関して”Field names”欄に説明あり
ケース2:異なるデータ同士をつなげてるために共通フィールドをサーチ時に作成する
###ポイント###
- 例として、"WAFアラートのuri_query"と"streamデータのuri_path"の値が同じものをまとめて表示したい
- 新たにc_uriというフィールドをevalで作成
- isnull条件を使うとお互いに存在しないフィールドに引っ張られるずにキレイにフィールド生成できる
###SPL例###
SPL(evalとif)
|eval c_uri = if(isnull(uri_path),uri_query,uri_path)
###結果###