我下面有一个简化的查询,它被sort 0 start_time
语句阻塞了(我想(,因为我有数亿个事件要处理。
...
| sort 0 start_time
| streamstats current=t first(start_time) by id
...
从理论上讲,我不需要按start_time对所有事件进行排序。
我只需要在具有相同id
的每组事件中按start_time
对事件进行排序。
因此,如果我可以让Splunk首先在id
上构建一个哈希表,然后它可以使用该哈希表对id
进行分组,然后在每个组中按start_time
进行排序。我想这会快得多。
注意:每组(按id
(包含1-10个事件,这就是为什么在每组内排序而不是对所有事件排序要快得多。
有没有办法让我这么做?还是一种完全替代的方法?
编辑
谢谢你的评论@charlie。也许这可以用stats
来完成
以下是我的活动的简化结构:
id: str
n: int
start: timestamp
end: timestamp
在每个id
组中,我需要:
- 最小
start
- 最大
end
n
之和- 与具有最小CCD_ 14的事件相关联的CCD_。以上(
我有一个起点:
| stats min(start), max(end), sum(n) by id
但如上所述,我失踪了。我怎么能得到那个?
tl;dr:earliest
/earliest_time
统计函数可能会有所帮助:(
如果您的数据被摄入,使得start被解析到_time字段中,那么:
| stats min(start) max(end) sum(n) earliest(n) by id
我脑海中浮现出一个挥之不去的想法记忆,即事件需要按时间顺序排列,earliest
和earliest_time
函数才能工作。。。但文档中没有提到
在我的测试堆栈上使用makeresults和random似乎做得不错,所以我想知道你的事件是否不使用startas_time,那么假设你的开始字段是Unix epoch时间格式。。。
| eval _time = start
| stats min(start) max(end) sum(n) earliest(n) by id
由于evalmin(start)
应该与earliest_time(n)
相同,如果所有具有id和start(_time(字段的事件都有一个n
字段,否则您可能也需要在统计数据之前有一个| fillnull n
。