全部产品
Search
文档中心

日志服务:映射富化函数

更新时间:Oct 28, 2024

本文介绍映射富化函数的语法规则,包括参数解释、函数示例等。

函数列表

类型

函数

说明

字段映射

e_dict_map

与目标数据字典进行映射,根据输入的字段映射一个新字段。

支持和其他函数组合使用。相关示例,请参见使用e_dict_map函数进行数据富化

e_table_map

与目标表格进行映射,根据输入的字段名称返回字段值。

支持和其他函数组合使用。相关示例,请参见使用e_table_map函数对HTTP请求返回码进行富化

e_tablestore_map

以阿里云表格存储(Tablestore)作为维表数据对原始日志进行富化。

e_redis_map

以阿里云Redis作为维表数据对原始日志进行富化。

e_dict_map

与目标数据字典进行映射,根据输入的字段映射一个新字段。

  • 函数格式

    e_dict_map(data, field, output_field, case_insensitive=True, missing=None, mode="overwrite")
  • 参数说明

    参数名称

    数据类型

    是否必填

    说明

    data

    Dict

    目标数据字典。必须为标准的{key01:value01,key01:value02,...}格式,且必须是字符串。例如{"1": "TCP", "2": "UDP", "3": "HTTP", "*": "Unknown"}

    field

    String或者String List

    一个字段名或者多个字段名的列表。多个字段时:

    • 依次对匹配到的值进行映射。

    • 如果匹配命中多条日志,且mode的取值为overwrite时,则最后一个会覆盖前面的结果。

    • 当没有匹配到任何字段,则使用missing参数的值作为匹配值。

    output_field

    String

    输出字段的名称。

    case_insensitive

    Boolean

    匹配时大小写是否不敏感。

    • True(默认值):不敏感。

    • False:敏感

    说明

    如果字典中存在同一个关键字的不同大小写,且case_insensitiveTrue时,会优先选择大小写完全匹配的值。如果没有,则随机选择一个。

    missing

    String

    无匹配字段时,将该参数的取值赋给输出字段output_field。默认为None表示不做映射赋值操作。

    说明

    如果字典中包含匹配星号(*),由于星号(*)的优先级高于missing,此时missing参数不生效。

    mode

    String

    字段的覆盖模式。默认为overwrite。更多信息,请参见字段提取检查与覆盖模式

  • 返回结果

    返回附带新字段的日志。

  • 函数示例

    • 示例1:根据原始日志中pro字段的值和目标数据字典,输出新字段protocol

      • 原始日志

        data:  123
        pro:  1
      • 加工规则

        e_dict_map(
            {"1": "TCP", "2": "UDP", "3": "HTTP", "6": "HTTPS", "*": "Unknown"},
            "pro",
            "protocol",
        )
      • 加工结果

        data:  123
        pro:  1
        protocol:  TCP
    • 示例2:根据原始日志中status字段的值和目标数据字典,输出新字段message

      • 原始日志(三条日志)

        status:  500
        status:  400
        status:  200
      • 加工规则

        e_dict_map({"400": "错误", "200": "正常", "*": "其他"}, "status", "message")
      • 加工结果

        status:  500
        message:  其他
        status:  400
        message:  错误
        status:  200
        message:  正常
  • 更多参考

    支持和其他函数组合使用。相关示例,请参见使用e_dict_map函数进行数据富化

e_table_map

与目标表格进行映射,根据输入的字段名称返回字段值。

  • 函数格式

    e_table_map(data, field, output_fields, missing=None, mode="fill-auto")
  • 参数说明

    参数名称

    数据类型

    是否必填

    说明

    data

    Table

    目标表格。

    说明

    如果采用资源函数res_rds_mysqlres_log_logstore_pull作为数据源,请设置primary_keys参数,否则会严重影响性能并可能导致任务延迟。如何设置,请参见资源函数

    field

    String、String List或Tuple List

    日志中映射到表格的源字段。如果日志中不存在对应字段,则不进行任何操作。

    output_fields

    String、String List或Tuple List

    映射后的字段。例如["province", "pop"]

    missing

    String

    无匹配字段时,将该参数的取值赋给输出字段output_fields。默认为None表示不做映射赋值操作。如果目标字段是多列,则missing可以是一个长度与目标字段数一致的默认值列表。

    说明

    如果表格中包含匹配星号(*),由于星号(*)的优先级高于missing,此时missing参数将不起作用。

    mode

    String

    字段的覆盖模式。默认为fill-auto。更多信息,请参见字段提取检查与覆盖模式

  • 返回结果

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

  • 函数示例

    • 示例1:在映射表格中查找对应行,根据city字段返回province字段的值。

      • 原始日志

        data: 123
        city: nj
      • 加工规则

        e_table_map(
            tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"), "city", "province"
        )
      • 加工结果

        data: 123
        city: nj
        province: js
    • 示例2:在映射表格中查找对应行,根据city字段返回province字段和pop字段的值。

      • 原始日志

        data: 123
        city: nj
      • 加工规则

        e_table_map(
            tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"),
            "city",
            ["province", "pop"],
        )
      • 加工结果

        data: 123
        city: nj
        province: js
        pop: 800
    • 示例3:使用tab_parse_csv函数构建映射表格,根据city字段返回province字段和pop字段的值。

      • 原始日志

        data: 123
        city: nj
      • 加工规则

        e_table_map(
            tab_parse_csv("city#pop#province\nnj#800#js\nsh#2000#sh", sep="#"),
            "city",
            ["province", "pop"],
        )
      • 加工结果

        data: 123
        city: nj
        province: js
        pop: 800
    • 示例4:使用tab_parse_csv函数构建映射表格,根据city字段返回province字段和pop字段的值。

      • 原始日志

        data: 123
        city: nj
      • 加工规则

        e_table_map(
            tab_parse_csv(
                "city,pop,province\n|nj|,|800|,|js|\n|shang hai|,2000,|SHANG,HAI|", quote="|"
            ),
            "city",
            ["province", "pop"],
        )
      • 加工结果

        data: 123
        city: nj
        province: js
        pop: 800
    • 示例5:日志匹配字段与映射表格中字段不一样。在映射表格中查找对应行,根据ctycity字段返回province字段的值。

      • 原始日志

        data: 123
        cty: nj
      • 加工规则

        e_table_map(
            tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"),
            [("cty", "city")],
            "province",
        )
      • 加工结果

        data: 123
        cty: nj
        province: js
    • 示例6:日志匹配字段与映射表格中字段不一样,并且对输出字段进行重命名。

      • 原始日志

        data: 123
        cty: nj
      • 加工规则

        e_table_map(
            tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"),
            [("cty", "city")],
            [("province", "pro")],
        )                                  
      • 加工结果

        data: 123
        cty: nj
        pro: js
    • 示例7:多个日志匹配字段。

      • 原始日志

        data: 123
        city: nj
        pop: 800
      • 加工规则

        e_table_map(
            tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"),
            ["city", "pop"],
            "province",
        )
      • 加工结果

        data: 123
        city: nj
        pop: 800
        province: js
    • 示例8:多个日志匹配字段,且日志匹配字段与映射表格字段不一样。

      • 原始日志

        data: 123
        cty: nj
        pp: 800
      • 加工规则

        e_table_map(
            tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"),
            [("cty", "city"), ("pp", "pop")],
            "province",
        )
      • 加工结果

        data: 123
        cty: nj
        pp: 800
        province: js
  • 更多参考

    支持和其他函数组合使用。相关示例,请参见使用e_table_map函数对HTTP请求返回码进行富化

e_tablestore_map

以阿里云表格存储(Tablestore)作为维表数据对原始日志进行富化。

  • 函数格式

    e_tablestore_map(
        fields,
        endpoint,
        ak_id,
        ak_secret,
        instance_name,
        table_names,
        output_fields=None,
        output_table_name=None,
        encoding="utf8",
        mode="fill-auto",
    )
  • 参数说明

    参数名称

    数据类型

    是否必填

    说明

    fields

    String、Number、 List或Tuple List

    原始日志中与表格存储数据表进行映射的字段。日志字段与数据表中的所有主键字段一一映射。例如:

    • 数据表的主键为字段a,日志字段也是a,则可以设置为fields="a"

    • 数据表的主键为字段abc,日志字段也为abc,则可以设置为fields=["a", "b", "c"]

    • 数据表的主键为字段abc,日志字段为a1b1c1,则可以设置为fields=[("a1", "a"), ("b1", "b"), ("c1", "c")]

    endpoint

    String

    表格存储服务实例的域名地址。更多信息,请参见服务地址

    说明

    支持同地域VPC地址和全地域公网地址。

    ak_id

    String

    具备表格存储实例访问权限的AccessKey ID。如何获取,请参见创建AccessKey

    如果是RAM用户,需具备表格存储访问权限(例如AliyunOTSReadOnlyAccess权限)。具体操作,请参见为RAM用户授权

    ak_secret

    String

    具备表格存储实例访问权限的AccessKey Secret。如何获取,请参见创建AccessKey

    instance_name

    String

    表格存储实例名称。

    table_names

    String、String List或Tuple List

    数据表名称。如果数据表使用的是二级索引,则设置该参数为索引名。关于二级索引的更多信息,请参见全局二级索引

    例如已创建数据表的二级索引为index1,则设置为table_names="index1"

    output_fields

    List

    映射后的列集合,列名可以为主键列或属性列。例如["province", "pop"]。如果不设置返回的列名,则返回匹配到的数据条目的所有列。

    说明

    如果目标表格存储实例包含多个数据表,则返回的是第一个查询到的数据条目所在数据表的数据。

    output_table_name

    String

    查询到的数据条目所在的数据表名称。默认为None,表示映射出的列集合不包含数据表名。如果设置为字符串,表示映射出的列集合包含数据表名。

    例如:数据表名为test,且设置加工规则为output_fields=["province", "pop"],output_table_name="table_name",如果数据表test中匹配到数据列["province", "pop"],则输出字段为province: xxx, pop:xxx,table_name:test

    encoding

    String

    HTTPS请求参数的编码方式,默认值为utf-8。

    mode

    String

    字段的覆盖模式。默认为fill-auto。更多信息,请参见字段提取检查与覆盖模式

  • 返回结果

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

  • 函数示例

    下述示例基于如下数据表table_name_test。

    city(主键)

    pop(主键)

    cid

    province

    region

    bj

    300

    1

    bj

    huabei

    nj

    800

    2

    js

    huadong

    sh

    200

    3

    sh

    huadong

    • 示例1:根据citypop字段在数据表中查找对应行,返回该行中provincecid列的值。

      • 原始日志

        city:sh
        name:maki
        pop:200
      • 加工规则

        e_tablestore_map(
            ["city","pop"],
            "https://d00s0dxa****.cn-hangzhou.ots.aliyuncs.com",
            "LTA3****",
            "VIH9****",
            "d00s0dxa****",
            "table_name_test",
            output_fields=["province","cid"])
                                            
      • 加工结果

        city:sh
        name:maki
        pop:200
        cid:3
        province:sh
    • 示例2:将日志中的city1pop1字段与数据表中的主键(citypop)进行映射,返回目标行中所有列的值。

      • 原始日志

        city1:sh
        name:maki
        pop1:200
      • 加工规则

        e_tablestore_map(
            [("city1","city"), ("pop1", "pop")],
            "https://d00s0dxa****.cn-hangzhou.ots.aliyuncs.com",
            "LTA3****",
            "VIH9****",
            "d00s0dxa****",
            "table_name_test")
                                            
      • 加工结果

        city:sh
        name:maki
        pop:200
        cid:3
        province:sh
        region:huadong
    • 示例3:根据citypop字段在数据表中查找对应行,返回该行中所有列的值。其中设置output_table_nameoutput_table_name="table_name",返回结果中将包含数据表名称。

      • 原始日志

        city:sh
        name:maki
        pop:200
      • 加工规则

        e_tablestore_map(
            ["city","pop"],
            "https://d00s0dxa****.cn-hangzhou.ots.aliyuncs.com",
            "LTA3****",
            "VIH9****",
            "d00s0dxa****",
            "table_name_test",
            output_table_name="table_name"
        )                                  
      • 加工结果

        city:sh
        name:maki
        pop:200
        cid:3
        province:sh
        region:huadong
        table_name:table_name_test
    • 示例4:根据citypop字段在多个数据表table_name_test、table_name_test1、table_name_test2中查找对应的行,返回第一个查询到的数据表(table_name_test)中目标行对应的所有列的值。

      • 原始日志

        city:sh
        name:maki
        pop:200
      • 加工规则

        e_tablestore_map(
            ["city","pop"],
            "https://d00s0dxa****.cn-hangzhou.ots.aliyuncs.com",
            "LTA3****",
            "VIH9****",
            "d00s0dxa****",
            ["table_name_test","table_name_test1","table_name_test2"],
            output_table_name="table_name"
        )
      • 加工结果

        city:sh
        name:maki
        pop:200
        cid:3
        province:sh
        region:huadong
        table_name:table_name_test
    • 示例5:根据二级索引主键(pk1pk2)字段在数据表中查找对应行,查询索引index1中definedcol2字段(预定义列)的值并返回。

      • 数据表tablestore中的数据(索引名index1)

        pk1(主键)

        pk2(主键)

        definedcol2(预定义列)

        definedcol3(预定义列)

        pk1_1

        pk2_1

        definedcol2_1

        definedcol3_1

        pk1_2

        pk2_2

        definedcol2_2

        definedcol3_2

      • 原始日志

        pk1:pk1_1
        pk2:pk2_1
      • 加工规则

        e_tablestore_map(
            ["pk1","pk2"],
            "https://d00s0dxa****.cn-hangzhou.ots.aliyuncs.com",
            "LTA3****",
            "VIH9****",
            "d00s0dxa****",
            "index1",
            output_fields= ["definedcol2"],
            output_table_name="table_name",
        )                                
      • 加工结果

        pk1:pk1_1
        pk2:pk2_1
        definedcol2:definedcol2_1
        table_name:index1

e_redis_map

以阿里云Redis作为维表数据对原始日志进行富化。

  • 函数格式

    e_redis_map(field, output_field, host, port=6379, db=0, username=None,
                password=None, encoding="utf-8", max_retries=5, mode="fill-auto")
  • 参数说明

    参数名称

    数据类型

    是否必填

    说明

    field

    String

    原始日志中与Redis数据表进行映射的字段。如果日志中不存在对应字段,则不进行任何操作。

    output_field

    String

    与Redis数据表进行映射后,输出的字段名。

    host

    String

    Redis数据库连接地址。

    username

    String

    Redis数据库用户名。默认值为空,表示不进行权限验证。

    password

    String

    Redis数据库密码。默认值为空,表示不进行权限验证。

    port

    Integer

    Redis数据库连接端口,默认值为6379。

    db

    Integer

    Redis数据库名称。默认值为0。

    encoding

    String

    Redis数据的编码方式。默认值为utf-8。

    max_retries

    Integer

    连接Redis数据库失败时,最大重试次数。默认值为5次。

    如果重试次数超过阈值后,仍连接失败,则跳过该日志的加工(不影响后续加工逻辑)。

    每次重试的间隔从1s开始翻倍增加,最大间隔为120s。

    mode

    String

    字段的覆盖模式。默认为fill-auto。更多信息,请参见字段提取检查与覆盖模式

  • 返回结果

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

  • 函数示例

    下述示例基于如下Redis数据表。

    重要

    目前仅支持字符串类型的Redis数据值(VALUE)。

    KEY

    VALUE

    i1001

    { "name": "橘子", "price": 10 }

    i1002

    { "name": "苹果", "price": 12 }

    i1003

    { "name": "芒果", "price": 16 }

    • 示例1:根据item字段值在Redis数据表中查找对应的值并返回,其中加工规则中未设置Redis数据库用户名和密码。

      • 原始日志

        item: i1002
        count: 7
      • 加工规则

        e_redis_map("item", "detail", host="r-bp1olrdor8353v4s.redis.rds.aliyuncs.com")
      • 加工结果

        item: i1002
        count: 7
        detail: {
           "name": "苹果",
           "price": 12
          }
    • 示例2:根据item字段值在Redis数据表中查找对应的值并返回,其中加工规则中设置了Redis数据库用户名和密码。

      • 原始日志

        item: i1003
        count: 7
      • 加工规则

        e_redis_map("item", "detail", host="r-bp1olrdor8353v4s****.redis.rds.aliyuncs.com", username="r-bp****", password="***")
      • 加工结果

        item: i1003
        count: 7
        detail:{
           "name": "芒果",
           "price": 16
          }