LoginSignup
1
0

More than 3 years have passed since last update.

フィールド名について

Last updated at Posted at 2019-11-30

Splunkのフィールド名でちょっとわかりづらいところがあるのでまとめてみた。

空白のあるフィールド名

当たり前といえば当たり前だけど
"field 1"とダブルコーテーションでくくる必要がある。
でもいつもダブルコーテーションかというとそうでもない。

サンプル

SPL
| makeresults
| eval "field 1"=now()
| eval result1=strftime("field 1","%c")
| eval result2=strftime('field 1',"%c")
| eval result3=strftime($field 1$,"%c")
| table "field "1 result*

結果

field 1 result2 result3
1575106884 Sat Nov 30 18:41:24 2019 Sat Nov 30 18:41:24 2019

ということでfield 1の結果がでない。
根拠は見つけきれていないけど、eval等の引数で使用するときのフィールド名は''で囲う必要がある。
あと、$$で囲うのはmap以外でも使える。

rename

SPL
| makeresults
| eval "field 1"=now()
| eval result1=strftime("field 1","%c")
| eval result2=strftime('field 1',"%c")
| eval result3=strftime($field 1$,"%c")
| table "field "1 result*
| rename "field "* as field_*

foreachrenameで使用できる*
そもそも、"field "*の時点で少しおかしい感じがするが問題なく使用できる。

SPL
| makeresults
| eval "field 1"=now()
| eval result1=strftime("field 1","%c")
| eval result2=strftime('field 1',"%c")
| eval result3=strftime($field 1$,"%c")
| table "field 1" result*
| foreach result*
    [rename <<FIELD>> as result_<<MATCHSTR>>_<<MATCHSTR>>]

foreach内でもrenameは使えるので凝ったフィールド名一括変換はこちらで実施できる。

フィールド名についてはKnowledge Manager Manual

Proper field name syntax
Field names must conform to the field name syntax rules.

Valid characters for field names are a-z, A-Z, 0-9, . , :, and _.
Field names cannot begin with 0-9 or _ . Leading underscores are reserved for Splunk Enterprise internal variables.

数字から始まるフィールドは使えないよ。とか書いてある。

_から始まるフィールド名

Use default fieldsに書いてある通り。

SPL
| makeresults
| eval test=""
| fields -*

このクエリーの結果は_timeが残る。
しっかり除きたい場合はfields -_*を使用するか、tableで残したいフィールドを明示する。
csvで出力する時、意識しないといろいろ付いてくるのはここら辺。

ただこの_をつけると*から外れるのはうまく使うとforeachのフィールド指定を除外に使える。

SPL
| makeresults
| eval get=_time
| rename get as _get
| eval test = _get

終わったら戻してやればいい。なんか表示が消えてしまうからびっくりした。

{}を含むフィールド

JSONなんかでよく見かける。

SPL
|makeresults
|eval "test{}.test"="test"
_time test.test
2019/12/25 10:37:40 test

作ろうとすると消えてしまう。
JSONデータをspathするとそんなことはないのだけど。
仕方がないので、戻してあげる

SPL
|makeresults
|eval "test{}.test"="test"
|foreach * 
    [rename <<FIELD>> as "test{}.test"]

foreachを使っているのは、変化したフィールド名を手打ちしたくなかったから。
変化するといえば、multikvをCSVで使う時フィールド名に空白が入っていると _(アンダーバー) に変更してしまう。

まとめ

Splunkの出力で日本語のフィールド名やスペースが入ったフィールド名を使いたい時はある。
でも計算するときとかこのようにいろいろ気にしなきゃいけないので、最後の最後でrenameする方がいいです。

1
0
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
1
0