云日志服务 LTS-字段值提取函数:e_kv

时间:2024-11-02 18:44:20

e_kv

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

  • 函数格式
    e_kv(源字段或源字段列表, sep="=", quote='"', escape=false, prefix="", suffix="", mode="fill-auto")
  • 参数说明

    参数名称

    参数类型

    是否必填

    说明

    源字段或源字段列表

    字符串或字符串列表

    字段名或多个字段名的列表。

    sep

    String

    关键字与值的正则表达式的分隔符串,默认为=,不限于单个字符。

    说明 可以使用非捕获分组,但不能使用捕获分组。

    quote

    String

    引用符,用于包裹值的字符。默认为"。

    说明 提取的动态键值对的值一般需要quote来包括,例如:a="abc",b="xyz"如果提取对象中不包含,则只提取如下字符集的值:中文字母数字_-.%~。例如a=中文ab12_-.%~|abc b=123可以提取a: 中文ab12_-.%~,b: 123。

    escape

    Boolean

    是否自动提取反转字符的值。默认为false表示否。例如key="abc\"xyz"默认提取字段key的值为abc\,设置escape=true时,提取的值为abc"xyz。

    prefix

    String

    给提取的字段名添加前缀。

    suffix

    String

    给提取的字段名添加后缀。

    mode

    String

    字段的覆盖模式。默认为fill-auto。

  • 返回结果

    返回附带新字段值的日志。

  • 函数示例
    1. 示例1:使用默认分隔符=提取键值对信息。
      • 测试数据
        {
         "http_refer": "https://video.developer.aadoc.com/s?q=asd&a=1&b=2"
        }

        如果测试数据为request_uri: a1=1&a2=&a3=3,a2值为空,则使用e_kv()函数无法提取出a2。您可以使用e_regex()函数进行提取,例如e_regex("request_uri",r'(\w+)=([^=&]*)',{r"\1":r"\2"},mode="overwrite")。

      • 加工规则
        e_kv("http_refer")
      • 加工结果
        http_refer: https://video.developer.aadoc.com/s?q=asd&a=1&b=2
        q: asd 
        a: 1
        b: 2
    2. 示例2:给字段名增加前缀和后缀。
      • 测试数据
        {
         "http_refer": "https://video.developer.aadoc.com/s?q=asd&a=1&b=2"
        }
      • 加工规则
        e_kv(
            "http_refer",
            sep="=",
            quote='"',
            escape=false,
            prefix="data_",
            suffix="_end",
            mode="fill-auto",
        )
      • 加工结果
        http_refer: https://video.developer.aadoc.com/s?q=asd&a=1&b=2
        data_q_end: asd 
        data_a_end: 1
        data_b_end: 2
    3. 示例3:提取字段content2中的键值对信息,使用escape参数提取反转字符的值。
      • 测试数据
        {
         "content2": "k1:\"v1\\"abc\", k2:\"v2\", k3: \"v3\""
        }
      • 加工规则
        e_kv("content2", sep=":", escape=true)
      • 加工结果
        content2:  k1:"v1\"abc", k2:"v2", k3: "v3"
        k1: v1"abc 
        k2: v2 
        k3: v3
  • 更多参考

    支持和其他函数组合使用。

support.huaweicloud.com/usermanual-lts/lts_07_0162.html