一个子查询常用于作为另外一个spl命令的参数,子查询被包含在双方括号中,将在外部命令执行之前被执行,执行的结果将作为外部spl的参数,大体上存在如下两种用途:
1) 参数化一个搜索(可以理解为query),使用子查询的结果作为query的搜索条件
2) 执行一个独立的搜索,将子查询的结果append(或者join等)到主查询的结果中
举例 查找apache日志中访问次数最多的ip地址的所有事件,可以采用如下写法
logtype:apache AND [[ logtype:apache | stats count(apache.clientip) as count_ by apache.clientip | sort by count_ | limit 1 | fields apache.clientip ]]
子查询返回结果为二维表格形式,行之间采用OR关系,行中的列之间采用AND关系。 假设子查询
[[ logtype:apache | stats count(xx) by apache.clientip, apache.method | fields apache.clientip apache.method ]]
返回的结果为
apache.clientipapache.method
192.168.1.92 GET
192.168.1.33 POST
则表示的查询条件为
(apache.client:192.168.1.92 AND apache.method:GET) OR (apache.client:192.168.1.33 AND apache.method:POST)
注意:
子查询的结果数对查询的性能影响非常大,目前默认的行限制为100条,列未做限制(后续会加上)
1) 子查询结果中的字段仅支持: 字符串类型和数值类型
2) 子查询中不允许出现以下命令:transaction,join