首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接2个具有多个条件的表

问连接2个具有多个条件的表
EN

Stack Overflow用户
提问于 2020-10-28 13:09:56
回答 1查看 306关注 0票数 0

假设如果我键入index=endpoints并在搜索栏中输入enter,我将得到类似如下的结果:

代码语言:javascript
复制
{
  "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",
  "pid": "30219",
  "app": "/usr/bin/curl",
  "epoch": "1503452096",
  "ip": "123.123.123.123",
  "port": "1234",
  "type": "sockets"
}

. . .

在同一索引下有两种类型的数据-套接字和进程。我想找到一种方法将这两种类型的数据(相关的)结合起来,这样我就可以获得包含所有信息的更丰富的数据。

代码语言:javascript
复制
+-------------------------+-----------------+---------+
| hostname | pid | app | osname | ip | port | etc.... |
+-------------------------+-----------------+---------+
| ...      | ... | ... | ...    | x  | y    | ...     |
+-------------------------+-----------------+---------+

问题是,如果我简单地做一些事情,比如:

代码语言:javascript
复制
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 AND L.hostname=R.hostname AND ...,而不是只使用L.pid=R.pid

我的天真方法是在WHERE部分添加更多条件

代码语言:javascript
复制
index=endpoints type="processes"
| join left=L right=L WHERE (L.pid=R.pid AND L.x=R.x AND...)
  [ search index=endpoints type="sockets" ]

然而,这似乎不是它的工作方式。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-28 21:04:58

从您的示例查询中,我猜您是一个经验丰富的SQL用户,是Splunk的新手,没有读过关于join命令的手册。join不接受where子句,也没有left或right选项。作为最佳实践,应该尽可能避免使用join,因为它的效率非常低。

请尝试使用stats。我们将stats用于分组功能,而不是计算统计数据。

代码语言:javascript
复制
index=endpoints (type="processes" OR type="sockets")
| stats values(*) as * by hostname, pid
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64566784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档