如何解决连接具有多个条件的2个表
假设如果我输入git fetch origin
并在搜索栏中按下Enter键,我将获得如下所示的结果:
index=endpoints
在同一索引下有两种类型的数据-套接字和进程。我想找到一种方法来组合这两种类型的(相关的)数据,以便获得包含所有信息的更丰富的数据。
{
"user": Jack,"os_name": "Windows","hostname": "Windows-JACK-01","pid": "30219","app": "/usr/bin/curl","cmdline": "curl google.com","epoch": "1503452096","type": "processes"
}
. . .
{
"hostname": "Windows-JACK-01","ip": "123.123.123.123","port": "1234","type": "sockets"
}
. . .
问题是,如果我只是做类似的事情:
+-------------------------+-----------------+---------+
| hostname | pid | app | osname | ip | port | etc.... |
+-------------------------+-----------------+---------+
| ... | ... | ... | ... | x | y | ... |
+-------------------------+-----------------+---------+
大多数时候,我会在index=endpoints type="processes"
| join left=L right=L WHERE L.pid=R.pid [ search index=endpoints type="sockets" ]
和app
之间得到错误的映射,因为任何应用程序都可以在可用时分配给相同的pid
。
我在想,如果我添加更多条件,它将减少不准确率。例如,也许我可以做pid
L.pid=R.pid
我幼稚的方法是在WHERE部分添加更多条件
L.pid=R.pid AND L.hostname=R.hostname AND ...
但是,这似乎不是它的工作原理。有什么建议吗?
解决方法
从示例查询中,我想您是Splunk的新手,并且还没有阅读有关join
命令的手册,是一位经验丰富的SQL用户。 join
不接受where
子句,也没有left
或right
选项。最佳做法是,由于效率极低,应尽量避免使用join
。
请尝试使用stats
。我们将stats
用于其分组功能,而不是计算统计信息。
index=endpoints (type="processes" OR type="sockets")
| stats values(*) as * by hostname,pid
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。