SPL中relative_time(max(_time),"@h")含义及where条件用法咨询
SPL时间表达式与过滤条件解析
前置前提说明
你已执行的bucket _time span = 1h为Splunk SPL的时间分桶命令,作用是将所有事件的_time字段值替换为其所属小时区间的整点起始值,你给出的示例时间戳分桶后对应结果如下:
| 原始时间戳 | 分桶后_time值 |
|---|---|
| 12.50pm | 12:00pm |
| 1pm、1.30pm、1.50pm | 1:00pm |
| 2pm、2.20pm | 2:00pm |
| 3pm、3.30pm | 3:00pm |
relative_time(max(_time),"@h")含义
这是SPL的时间计算表达式,拆分解释:
max(_time):取当前数据集所有事件中_time字段的最大值,你的示例中分桶后最大的_time为3:00pmrelative_time(时间参数, 时间偏移符):对输入的时间参数做偏移计算,@h是对齐到小时起始的偏移符,作用是把输入时间舍入到所在小时的整点
所以整个表达式的最终输出,就是你的数据集覆盖的时间范围内最晚的小时整点点值,你的示例中该表达式结果为3:00pm对应的时间戳。
三个where条件的逻辑与差异
以下均基于你的示例数据集说明:
| where _time < relative_time(max(_time),"@h")
逻辑:筛选所有_time小于最晚整点值的事件
对应结果:保留12:00pm、1:00pm、2:00pm三个分桶的所有数据,也就是排除3点整及之后的所有事件,匹配原始时间戳为12.50pm、1pm、1.30pm、1.50pm、2pm、2.20pm的记录| where _time = relative_time(max(_time),"@h")
逻辑:筛选所有_time正好等于最晚整点值的事件
对应结果:仅保留3:00pm分桶的所有数据,匹配原始时间戳为3pm、3.30pm的记录| where _time > relative_time(max(_time),"@h")
逻辑:筛选所有_time大于最晚整点值的事件
对应结果:无任何匹配数据,因为分桶后所有_time都是整点值,最大仅能等于表达式计算出的最晚整点,不可能出现更大的取值
内容的提问来源于stack exchange,提问作者LindaMage
相关产品推荐
相关产品推荐

