如何合并新旧日志中同一对象不同存储类型的用户数据以获取唯一用户列表
问题:合并新旧格式用户数据并去重失败
我在日志中追踪用户数据,之前把用户名以字符串形式存在info.userData字段;后来对userData进行改造,将其改为对象类型,用户名改存在info.userData.id字段。尝试同时搜索两种格式的数据并去重,获取唯一用户列表,但始终无法成功。
我的尝试代码如下:
index=<index> | eval old = [search index=<index> | rename info.userData as username_old | dedup username_old | return $username_old] | eval new = [search index=<index> | rename info.userData.id as username_new | dedup username_new | return $username_new] | mvcombine delim="," old new AS username | dedup username | table username
解决方案
你之前的写法问题在于子查询用return $xxx默认只返回第一个结果,而且mvcombine无法正确合并所有用户数据。更简洁高效的做法是直接统一提取两种格式的用户名,再去重:
index=<index> | eval username = coalesce(info.userData.id, info.userData) | where isnotnull(username) | dedup username | table username
代码说明
coalesce函数会依次检查传入的字段,返回第一个非空的值,这样不管是旧格式的info.userData还是新格式的info.userData.id,都会被统一存入username字段where isnotnull(username)过滤掉没有有效用户名的日志条目dedup username直接对统一后的用户名去重,得到唯一用户列表
内容的提问来源于stack exchange,提问作者Alon Ganot
相关产品推荐
相关产品推荐

