全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

字段值提取函数

最近更新时间:2023-04-26 15:40:39

kv_delimit函数

函数介绍

通过分隔符提取目标字段中的键值对

语法描述

kv_delimit(key1,key2..., pair_sep="\s", kv_sep="=", prefix="", suffix="", mode="fill-auto")

参数说明

参数名称 参数类型 是否必填 参数描述
key string 指定的字段名称
pair_sep string 用于分隔键值对的正则字符集,注意是字符集非正则表达式,如:abc会分别匹配a
kv_sep string 用于分隔键和值的字符串。默认=
prefix string 给提取的字段名称添加前缀。
suffix string 给提取的字段名称添加后缀。
mode string 字段覆盖模式,默认fill-auto,详见文末字段覆盖模式类型

示例1

从content字段提取键值对

原始日志

{"content":"k1=v1 k2=v2"}

加工规则

kv_delimit("content")

加工结果

{"content":"k1=v1 k2=v2","k1":"v1","k2":"v2"}

示例2

从content字段提取键值对,并为提取字段添加前后缀。

原始日志

{"content":"k1=v1 k2=v2"}

加工规则

kv_delimit("content",prefix="p_",suffix="_s")

加工结果

{"content":"k1=v1 k2=v2","p_k1_s":"v1","p_k2_s":"v2"}

示例3

根据自定义分隔符,从content字段提取键值对。

原始日志

{"content":"k1:v1+k2:v2?k3:v3*k4:v4/k5:v5\\k6:v6.k7:v7  k8:v8"}

加工规则

kv_delimit("content",pair_sep="?+\-*/\s.",kv_sep=":")

加工结果

{"content":"k1:v1+k2:v2?k3:v3*k4:v4/k5:v5\k6:v6.k7:v7  k8:v8","k1":"v1","k2":"v2","k3":"v3","k4":"v4","k5":"v5","k6":"v6","k7":"v7","k8":"v8"}

json函数

函数介绍

对指定字段的json对象进行展开、jmes提取或jmes提取后再展开。指定字段值必须为json对象。

语法描述

json(key, expand=true, depth=100, prefix="", suffix="", fmt="simple", sep=".", 
     expand_array=True, fmt_array="{parent_rlist[0]}_{index}", include_node="", 
     exclude_node="", include_path="", exclude_path="",jmes="", 
     output="", jmes_ignore_none=true, mode='fill-auto'
)

参数说明

参数名称 参数类型 是否必填 参数描述
key string 指定的字段名称
expand bool 是否将字段展开。jmes为空时,默认为true,表示展开,否则为false。
depth number 字段展开深度。取值范围1-500。默认100
prefix string 展开字段名前缀
suffix string 展开字段名后缀
fmt string 展开字段格式,默认simple。simple:{prefix}{current}{suffix} full:{parent_list_str}{sep}{prefix}{current}{suffix} parent:{parent}{sep}{prefix}{current}{suffix} root:{parent_list[0]}{sep}{prefix}{current}{suffix}
sep string 分级节点间的分隔符。默认“.”
expand_array bool 是否展开数组,true表示展开。默认true
fmt_array string 数组展开格式。可以自定义格式化占位符,最多五个,默认{parent_rlist[0]}_{index}。parrent_list;parent_rlist;index;sep;prefix;suffix
include_node string 包含的节点的正则表达式
exclude_node string 排除的节点的正则表达式
include_path string 包含路径的正则表达式
exclude_path string 排除路径的正则表达式
jmes string 从原日志中提取数据的jmes
output string jmes提取内容输出的字段名
jmes_ignore_none bool jmes未提取到值时是否忽略,true表示忽略,否则输出一个空字符串。默认true
mode string 字段的覆盖模式。默认fill-auto,详见文末字段覆盖模式类型

补充说明:
include_path和exclude_path过滤。
将字段展开后,再对其“full”格式化字段名称从开头进行正则匹配(系统会在用户输入的正则表达式前面加上“^”),分隔符为“.”(不影响最终输出格式和分隔符)。
如果展开后“full”格式的字段名称为:user.address.city
include_path=“user” //可以匹配
include_path=“user.add” //可以匹配
include_path=“address.city” //无法匹配

示例1

为展开字段增加前后缀

原始日志

{"content":{"k1":"v1","k2":"v2"}}

加工规则

json("content",prefix="p_",suffix="_s")

加工结果

{"content":{"k1":"v1","k2":"v2"},"p_k1_s":"v1","p_k2_s":"v2"}

示例2

默认格式展开

原始日志

{"content":{"k1":"v1","k2":["10","20"]}}

加工规则

json("content")

加工结果

{"content":{"k1":"v1","k2":["10","20"]},"k1":"v1","k2_0":"10","k2_1":"20"}

示例3

将fmt设置为full展开

原始日志

{"content":{"k1":"v1","k2":["10","20"]}}

加工规则

json("content",fmt="full")

加工结果

{"content":{"k1":"v1","k2":["10","20"]},"content.k1":"v1","content.k2.k2_0":"10","content.k2.k2_1":"20"}

示例4

将fmt设置为parent展开

原始日志

{"content":{"k1":"v1","k2":["10","20"]}}

加工规则

json("content",fmt="parent")

加工结果

{"content":{"k1":"v1","k2":["10","20"]},"content.k1":"v1","k2.k2_0":"10","k2.k2_1":"20"}

示例5

将fmt设置为root展开

原始日志

{"content":{"k1":"v1","k2":["10","20"]}}

加工规则

json("content",fmt="root")

加工结果

{"content":{"k1":"v1","k2":["10","20"]},"content.k1":"v1","content.k2_0":"10","content.k2_1":"20"}

示例6

自定义fmt_array

原始日志

{"content":[{"name":"ks","age":23},{"name":"gt","age":38}]}

加工规则

json("content",fmt="parent",fmt_array="{parent_list[0]}--{index}")

加工结果

{"content--0.age":23,"content--0.name":"ks","content--1.age":38,"content--1.name":"gt","content":[{"age":23,"name":"ks"},{"age":38,"name":"gt"}]}

示例7

使用jmes

原始日志

{"content":{"k1":"v1","k2":{"k3":"v3","k4":{"k5":"v5","k6":["one","tow"]}}}}

加工规则

json("content",jmes="k2.k3",output="jmes_content")

加工结果

{"jmes_content":"v3","content":{"k1":"v1","k2":{"k3":"v3","k4":{"k5":"v5","k6":["one","tow"]}}}}

示例8

使用include_path过滤

原始日志

{"content":{"k1":{"k1-1":"k1-1.v"},"k2":{"k2-1":"k2-1.v"}}}

加工规则

json("content",fmt="full",include_path="content.k1")

加工结果

{"content":{"k1":{"k1-1":"k1-1.v"},"k2":{"k2-1":"k2-1.v"}},"content.k1.k1-1":"k1-1.v"}

kv函数

函数介绍

通过quote提取字段中的键值对信息。

语法描述

kv(key1,key2,..., sep="=", quote='"', escape=false, prefix="", suffix="", mode="fill-auto")

参数说明

参数名称 参数类型 是否必填 参数描述
key string 字段名称
sep string 键与值的分隔符,仅单字符。默认“=”
quote string 用于包裹值的字符。如果提取对象中不包含引用符,则只提取中文、字母、数字以及符号:_-.%~。默认为"
escape bool 是否提取反转字符的值。false表示不提取。例:key=“abc"def”,默认提取值为abc\,当设置escape=true时,提取abc"def。默认为false
prefix string 提取字段名前缀。
suffix string 提取字段名后缀。
mode string 字段覆盖模式,默认fill-auto,详见文末字段覆盖模式类型

示例1

默认参数提取url键值对信息

原始日志

{"content":"https://passport.ksyun.com/?k1=v1&k2=v2&k3="}

加工规则

kv("content")

加工结果

{"content":"https://passport.ksyun.com/?k1=v1&k2=v2&k3=","k1":"v1","k2":"v2"}

示例2

设置escape为true,提取包裹符中嵌套的包裹符。

原始日志

{"content":"k1:\"v1\\\"abc\", k2:\"v2\", k3: \"v3\""}
#转义前:{"content":"k1:"v1\"abc", k2:"v2", k3:"v3""}

加工规则

kv("content",sep=":",escape=true)

加工结果

{"content":"k1:"v1\"abc",k2:"v2",k3:"v3"","k1":"v1"abc","k2":"v2","k3":"v3"}

regex函数

函数介绍

通过正则表达式提取值并赋值给指定字段。

语法描述

regex(key,expr,fields_info,mode="fill-auto",pack_json="")

参数说明

参数名称 参数类型 是否必填 参数描述
key string 被提取字段名称
expr string 提取指定字段值的正则表达式。
fields_info string/list/map 当正则表达式中没有设置命名捕获的名称时,必须配置该参数 匹配后的目标字段名称。
mode string 字段覆盖模式。默认fill-auto,详见文末字段覆盖模式类型
pack_json string 将正则表达式提取的所有结果放入该参数指定的字段中,默认不打包。

示例1

获取第一个匹配的结果

原始日志

{"content":"123abc456"}

加工规则

regex("content","\d+","count")

加工结果

{"content":"123abc456","count":"123"}

示例2

获取多个匹配结果

原始日志

{"content":"123abc456"}

加工规则

regex("content","\d+",["count","size"])

加工结果

{"content":"123abc456","count":"123","size":"456"}

示例3

使用正则表达式捕获组,并使用map动态命名键和值

原始日志

{"content":"abc:123,edf:456"}

加工规则

regex("content","([a-z]+):(\d+)",{"key_\1":"value_\2"})

加工结果

{"content":"abc:123,edf:456","key_abc":"value_123","key_edf":"value_456"}

示例4

使用正则表达式命名捕获组获取字段值。

原始日志

{"content":"abc:456"}

加工规则

regex("content","(?P<key>[a-z]+):(?P<value>\d+)")

加工结果

{"content":"abc:456","key":"abc","value":"456"}

示例5

将提取字段打包放入pack_json设置的字段中。

原始日志

{"content":"abc:456"}

加工规则

regex("content","\d+","count",pack_json="packed")

加工结果

{"content":"abc:456","packed":{"count":"456"}}

字段覆盖模式类型

参数值 说明
fill 当目标字段不存在或者值为空时,设置目标字段。
fill-auto 当新值非空,且目标字段不存在或者值为空时,设置目标字段。
add 当目标字段不存在时,设置目标字段。
add-auto 当新值非空,且目标字段不存在时,设置目标字段。
overwrite 强制覆盖写入目标字段。
overwrite-auto 若新值非空,覆盖写入目标字段。
文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈