0

Splunk の結果をバケットに分割するクエリを実行しています。ディスク上のサイズに基づいてファイルを分割してカウントしたい。これは、rangemapまたはを使用して実現できますeval case

ここで読んだように、usingevalは よりも高速ですrangemap。しかし、両方を使用すると異なる結果が得られます。

これは私が実行しているクエリです-

<source> 
| eval size_group = case(SizeInMB < 150, "0-150 MB", SizeInMB < 200 AND SizeInMB >= 150, "150-200 MB", SizeInMB < 300 AND SizeInMB >= 200, "200-300 MB", SizeInMB < 500 AND SizeInMB >= 300, "300-500 MB", SizeInMB < 1000 AND SizeInMB >= 500, "500-1000 MB", SizeInMB > 1000, ">1000 MB") 
| stats count by size_group

そして、これは私が得ている結果です -

ここに画像の説明を入力

これを使用rangemapするのはクエリですが-

<source> 
| rangemap field=SizeInMB "0-150MB"=0-150 "151-200MB"=150-200 "201-300MB"=200-300 "301-500MB"=300-500 "501-999MB"=500-1000 default="1000MB+" 
| stats count by range

私もこの範囲を試しました-rangemap field=SizeInMB "0-150MB"=0-150 "150-200MB"=150-200 "200-300MB"=200-300 "300-500MB"=300-500 "500-1000MB"=500-1000 default="1000MB+"そして、同じ結果が得られました-

ここに画像の説明を入力

両方の画像の結果に大きな違いはなく、おそらくそれを受け入れることができます-しかし、150-200MBの範囲では. 445958 vs 445961、200-300 MB3676 vs 3677では3346 vs 3348. その違いの理由と、どちらをより信頼すべきかを理解したいと思います。Speedwiseevalの方が良さそうに見えますが、datawise はそれほど正しくないのでしょうか?

4

1 に答える 1

2

あなたが見ている問題は、rangemap値が重複していることです。

一方、evalフォーマットでは、範囲を「適切に」トリミングしていますcase

caseサイドバー - 次のように簡単にすることができます:

| eval size_group = case(SizeInMB < 150, "0-150 MB", SizeInMB < 200, "150-200 MB", SizeInMB < 300, "200-300 MB", SizeInMB < 500, "300-500 MB", SizeInMB < 1000, "500-1000 MB", 0=0, ">1000 MB") 

case式は一致するとすぐに評価を停止するため、そのまま使用する必要はありませんAND。そして0=0、最後の可能性を使用すると、常にtrue と評価されます ( C または C++ のステートメントを考えてください) defaultcase

于 2021-04-20T13:20:14.513 に答える