splunk

Splunkコマンド 「append」でevent(データの行)を追加

更新日:

「append」はevent(データの行)を追加したい時に使います。
表形式のDashboardを作成シた際に、データが存在しない場合に固定行を表示させるために使ったりしてます。

サンプルコード

表形式の出力結果に固定行を追加していきます。

追加前の表

sourcetype="adressJapanCSV"
| where '市区町村' like "%村%"
| stats count(住所CD) as count by 都道府県CD,都道府県
| sort by 都道府県CD

市区町村に「村」を含むデータを集計していますが、「都道府県CD=9」の栃木は「村」を含むデータが存在しないため、行が出力されません。

データがない都道府県も固定で行表示させる

sourcetype="adressJapanCSV"
| where '市区町村' like "%村%"
| stats count(住所CD) as count by 都道府県CD,都道府県
| append [|makeresults | eval 都道府県CD = 9,都道府県="栃木県",count=0 | fields - _time]
| sort by 都道府県CD

appendコマンドで行を追加します。追加する行はsub searchで取得します。
今回は、searchせずに、makeresultsコマンドで固定データを追加しています。

どのデータを追加すれば良いかわからない場合

上記サンプルは、どの都道府県を追加すれば良いか事前に確認してわかっていましたので栃木県のデータのみappendしましたがが、通常はどの都道府県をappendすればよいかわかりません。
その場合は冗長的ですが、47都道府県分appendする必要があります。(今回は都道府県CD= 1-10を追加)

sourcetype="adressJapanCSV"
| where '市区町村' like "%村%"
| stats count(住所CD) as count by 都道府県CD,都道府県
| append [|makeresults | eval 都道府県CD = 1,都道府県="北海道",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 2,都道府県="青森県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 3,都道府県="岩手県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 4,都道府県="宮城県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 5,都道府県="秋田県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 6,都道府県="山形県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 7,都道府県="福島県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 8,都道府県="茨城県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 9,都道府県="栃木県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 10,都道府県="群馬県",count=0 | fields - _time]
| sort by 都道府県CD

単純にappendを追加するだけですと、データが存在する場合にappendした行と重複して出力されてしまいます。

重複を削除する

重複削除の方法は色々ありますが、今回はstatsコマンで削除します。

sourcetype="adressJapanCSV"
| where '市区町村' like "%村%"
| stats count(住所CD) as count by 都道府県CD,都道府県
| append [|makeresults | eval 都道府県CD = 1,都道府県="北海道",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 2,都道府県="青森県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 3,都道府県="岩手県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 4,都道府県="宮城県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 5,都道府県="秋田県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 6,都道府県="山形県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 7,都道府県="福島県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 8,都道府県="茨城県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 9,都道府県="栃木県",count=0 | fields - _time]
| append [|makeresults | eval 都道府県CD = 10,都道府県="群馬県",count=0 | fields - _time]
| stats max(count) as count by 都道府県CD,都道府県
| sort by 都道府県CD

無事、重複データが削除されました。

まとめ

この方法を思いつくまで、ダミーデータ用のデータセットを作成して、固定行を表示させていたので、この方法を思いついたときはかなり嬉しかったです。
もっと効率的なやり方は、あるのかもしれません。。。







-splunk
-

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