【发布时间】:2012-10-16 17:47:51
【问题描述】:
考虑以下两个 Splunk 搜索:
index=a | join type=inner MyKey [search index=b]
和:
index=a | join type=inner MyKey [search index=b | where MyVal > 0]
值得注意的是,后者的搜索 - 其子搜索具有约束的搜索 - 的结果行数是前者的 三倍。
join 命令的 Splunk documentation page 建议的语义足够接近 SQL 的 join 的参数:
如果指定的字段对每个搜索和子搜索的结果是共同的,则使用连接来组合搜索和子搜索的结果。您还可以使用 selfjoin 命令将表连接到自身。
这个 sn-p 与 type=inner 参数相关:
如果指定的字段对每个搜索和子搜索的结果是共同的,则使用连接来组合搜索和子搜索的结果。您还可以使用 selfjoin 命令将表连接到自身。
基于这些信息,我假设上面的两个 Splunk 搜索应该分别等效于以下 SQL:
SELECT *
FROM a
INNER JOIN b ON a.MyKey = b.MyKey
和:
SELECT *
FROM a
INNER JOIN b ON a.MyKey = b.MyKey
WHERE b.MyVal > 0
添加约束如何增加结果行数?
有趣的是,以下 Splunk 搜索会产生 第三个 结果 - 与我将相同数据放入 SQL 数据库时得到的结果相匹配:
index=a | join type=outer MyKey [search index=b | eval hasmatch=1]
| where hasmatch=1
还有一些注意事项:
-
MyVal字段在任一表/索引中都没有重复项 - 我已验证 Splunk 索引中的原始事件与
MyVal的事件计数和值中的原始源数据相匹配 - 为
props.conf中的相关源类型配置的唯一搜索时间操作是report,用于根据transforms.conf中的节提取字段(源数据采用 CSV 方言)
谁能在这里给我一些线索?就我而言,这种行为是荒谬的。
【问题讨论】: