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: ルックアップで複数行ヒット時に1行だけ抽出する

Posted at
実施環境: Splunk Free 8.2.2

0. 概要

Splunk のルックアップ処理で複数行がヒットした場合、デフォルトの設定ではヒットしたすべての行が抽出されます。
ただ、実務上は1行だけ抽出したい場合も多いです。
そのような場合、ルックアップ定義の設定を変更すると実現可能です。

1. デフォルト設定

以下のような CSV 「 test_hit.csv 」をルックアップテーブルとして登録し、それを「 test_hit 」としてルックアップ定義にします。

ID NAME
A01 BBB
A01 AAA
A01 CCC

WS000226.JPG

この場合、以下のようにマルチバリューという形式ですべてのヒット行が抽出されます。

Splunk
| makeresults count=1
| eval ID = "A01"
| lookup test_hit ID OUTPUT NAME

WS000227.JPG

マルチバリュー自体は mvexpand コマンドを使用することで別々の行に分割可能です。

Splunk
| makeresults count=1
| eval ID = "A01"
| lookup test_hit ID OUTPUT NAME
| mvexpand NAME

WS000228.JPG

2. join を使用する方法

ただ、この複数ヒットの場合に、全行でなく1行だけ抽出したい場合もあります。
一応、以下のように join コマンドを使用して1行だけ抽出を実現することも可能ですが、性能的にはあまりよい方法ではありません。

Splunk
| makeresults count=1
| eval ID = "A01"
| join ID
    [
      | inputlookup test_hit.csv
    ]

WS000229.JPG

では、どうすればよいでしょうか。

3. ルックアップ定義の設定を変更する方法

実は、ルックアップ定義の設定を変更するだけで1行だけ抽出を実現することが可能です。
まず、ルックアップ定義の設定画面で「詳細オプション」にチェックを入れます。

WS000230.JPG

すると複数の追加設定が表示されますが、ここで「最大一致数」という項目に「1」を指定します。

WS000232.JPG

これだけです。
これだけで、最初の SPL の結果が以下の通り1行だけ抽出になります。

WS000234.JPG

なお、抽出される1行はルックアップテーブルの中で最も上の行になります。
そのため、抽出される1行に規則性を持たせたい場合はルックアップテーブル作成の時点でデータを並び替えておく必要があることに注意しましょう。

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?