如何在Splunk中查找并展示两个JSON对象间的唯一与缺失键
在Splunk中对比两组JSON的唯一键与缺失键并生成表格
需求说明
现有两组含唯一键的JSON对象:
第一组JSON
{ "Sugar": { "prod_rate" : "50", "prod_qual" : "Good" }, "Rice": { "prod_rate" : "80", "prod_qual" : "OK" }, "Potato": { "prod_rate" : "87", "prod_qual" : "OK" } }
第二组JSON
{ "Sugar": { "prod_rate" : "50", "prod_qual" : "Good" }, "Wheat": { "prod_rate" : "60", "prod_qual" : "Good" } }
需要找出仅在某一组中存在的键,生成包含唯一键(仅第一组有)和缺失键(仅第二组有)两列的Splunk表格。
Splunk查询实现
以下是完整的查询语句,可直接在Splunk搜索栏执行:
| makeresults | eval json1="{ \"Sugar\": { \"prod_rate\" : \"50\", \"prod_qual\" : \"Good\" }, \"Rice\": { \"prod_rate\" : \"80\", \"prod_qual\" : \"OK\" }, \"Potato\": { \"prod_rate\" : \"87\", \"prod_qual\" : \"OK\" } }" | spath input=json1 output=keys1 path={@keys} | mvexpand keys1 | rename keys1 as key | eval source="第一组JSON" | append [ | makeresults | eval json2="{ \"Sugar\": { \"prod_rate\" : \"50\", \"prod_qual\" : \"Good\" }, \"Wheat\": { \"prod_rate\" : \"60\", \"prod_qual\" : \"Good\" } }" | spath input=json2 output=keys2 path={@keys} | mvexpand keys2 | rename keys2 as key | eval source="第二组JSON" ] | stats values(source) as sources by key | where mvcount(sources)=1 | eval 唯一键=if(sources="第一组JSON", key, null()), 缺失键=if(sources="第二组JSON", key, null()) | stats list(唯一键) as 唯一键 list(缺失键) as 缺失键
查询说明
- 构造测试数据:用
makeresults和eval生成两组JSON字符串 - 解析JSON键:通过
spath提取JSON的所有顶级键,mvexpand将多值键拆分为单行数据 - 合并数据:用
append把两组数据合并到同一结果集 - 筛选独有键:用
stats统计每个键的来源,where mvcount(sources)=1筛选出仅在一组出现的键 - 生成目标表格:通过
eval和stats整理出“唯一键”和“缺失键”列
预期结果
执行后会生成一行表格:
| 唯一键 | 缺失键 |
|---|---|
| Rice, Potato | Wheat |
内容的提问来源于stack exchange,提问作者A.G.Progm.Enthusiast
相关产品推荐
相关产品推荐

