本文介绍映射富化函数的语法规则,包括参数解释、函数示例等。
函数列表
类型 | 函数 | 说明 |
---|---|---|
字段映射 | e_dict_map | 与目标数据字典进行映射,根据输入的字段映射一个新字段。
支持和其他函数组合使用。相关示例,请参见使用e_dict_map、e_search_dict_map函数进行数据富化。 |
e_table_map | 与目标表格进行映射,根据输入的字段名称返回字段值。
支持和其他函数组合使用。相关示例,请参见使用e_table_map函数对HTTP请求返回码进行富化。 |
|
e_tablestore_map | 以阿里云表格存储(Tablestore)作为维表数据对原始日志进行富化。 | |
e_redis_map | 以阿里云Redis作为维表数据对原始日志进行富化。 | |
搜索映射 | e_search_dict_map | 对关键字(查询字符串)以及其匹配的值的字典数据进行映射。
支持和其他函数组合使用。相关示例,请参见使用e_dict_map、e_search_dict_map函数进行数据富化。 |
e_search_table_map | 对某列(查询字符串)以及其匹配的值的表格数据进行映射。 |
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_insensitive为True时,会优先选择大小写完全匹配的值。如果没有,则随机选择一个。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: 正常
- 原始日志(三条日志)
- 示例1:根据原始日志中pro字段的值和目标数据字典,输出新字段protocol。
-
更多参考
支持和其他函数组合使用。相关示例,请参见使用e_dict_map、e_search_dict_map函数进行数据富化。
e_table_map
与目标表格进行映射,根据输入的字段名称返回字段值。
-
函数格式
e_table_map(data, field, output_fields, missing=None, mode="fill-auto")
-
参数说明
参数名称 数据类型 是否必填 说明 data Table 是 目标表格。 说明 如果采用资源函数res_rds_mysql和res_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:日志匹配字段与映射表格中字段不一样。在映射表格中查找对应行,根据cty或city字段返回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
- 原始日志
- 示例1:在映射表格中查找对应行,根据city字段返回province字段的值。
-
更多参考
支持和其他函数组合使用。相关示例,请参见使用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"
。 - 数据表的主键为字段a、b、c,日志字段也为a、b、c,则可以设置为
fields=["a", "b", "c"]
。 - 数据表的主键为字段a、b、c,日志字段为a1、b1、c1,则可以设置为
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请求参数的编码方式,默认值为utf8。 mode String 否 字段的覆盖模式。默认为fill-auto。更多信息,请参见字段提取检查与覆盖模式。 - 数据表的主键为字段a,日志字段也是a,则可以设置为
-
返回结果
返回附带新字段值的日志。
-
函数示例
下述示例基于如下数据表table_name_test。city(主键) pop(主键) cid province region bj 300 1 bj huabei nj 800 2 js huadong sh 200 3 sh huadong - 示例1:根据city字段在数据表中查找对应行,返回该行中province列的值。
- 原始日志
city:sh name:maki pop:200
- 加工规则
e_tablestore_map( "city", "https://d00s0dxa****.cn-hangzhou.ots.aliyuncs.com", "LTA3****", "VIH9****", "d00s0dxa****", "table_name_test", output_fields=["province"])
- 加工结果
city:sh name:maki pop:200 province:sh
- 原始日志
- 示例2:根据city和pop字段在数据表中查找对应行,返回该行中province和cid列的值。
- 原始日志
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
- 原始日志
- 示例3:将日志中的city1、pop1字段与数据表中的主键(city、pop)进行映射,返回目标行中所有列的值。
- 原始日志
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
- 原始日志
- 示例4:根据city和pop字段在数据表中查找对应行,返回该行中所有列的值。其中设置output_table_name为
output_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
- 原始日志
- 示例5:根据city和pop字段在多个数据表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
- 原始日志
- 示例6:根据二级索引主键(pk1、pk2)字段在数据表中查找对应行,查询索引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
- 数据表tablestore中的数据(索引名index1)
- 示例1:根据city字段在数据表中查找对应行,返回该行中province列的值。
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 }
- 原始日志
- 示例1:根据item字段值在Redis数据表中查找对应的值并返回,其中加工规则中未设置Redis数据库用户名和密码。
e_search_dict_map
对关键字(查询字符串)以及其匹配的值的字典数据进行映射。
-
函数格式
e_search_dict_map(data, output_field, multi_match=False, multi_join=" ", missing=None, mode="overwrite")
-
参数说明
参数名称 数据类型 是否必填 说明 data Dict 是 映射关系的字典。.必须为标准的 {key01:value01,key01:value02,...}
格式,且关键字key必须是查询字符串。output_field String 是 输出字段的名称。 multi_match Boolean 否 是否允许匹配多个字段。默认为False表示不匹配多个字段,会返回匹配到的最后一个字段值。支持使用 multi_join
拼接多个匹配的值。multi_join String 否 匹配多个字段时,多值的连接字符串,默认为空格。当multi_match值为True时生效。 missing String 否 无匹配字段时,将该参数的取值赋给输出字段output_field。默认为None表示不做映射赋值操作。 说明 如果字典中包含默认匹配星号(*),由于星号(*)的优先级高于missing
,此时missing
将不起作用。mode String 否 字段的覆盖模式。默认为overwrite。更多信息,请参见字段提取检查与覆盖模式。 -
返回结果
返回查询匹配中后的映射结果。
-
函数示例
- 示例1:匹配模式。
- 原始日志
data:123 pro:1
- 加工规则
e_search_dict_map ({"pro==1": "TCP", "pro==2": "UDP", "pro==3": "HTTP"}, "protocol")
- 加工结果
data:123 pro:1 protocol:TCP
- 原始日志
- 示例2:根据字段值的不同开头进行映射。
- 原始日志
status:200,300
- 加工规则
e_search_dict_map( { "status:2??": "ok", "status:3??": "redirect", "status:4??": "auth", "status:5??": "server_error", }, "status_desc", multi_match=True, multi_join="测试", )
- 加工结果
status:200,300 status_desc:ok测试redirect
- 原始日志
- 示例1:匹配模式。
-
更多参考
支持和其他函数组合使用。相关示例,请参见使用e_dict_map、e_search_dict_map函数进行数据富化。
e_search_table_map
对某列(查询字符串)以及其匹配的值的表格数据进行映射。
-
函数格式
e_search_table_map(data, inpt, output_fields, multi_match=False, multi_join=" ", missing=None, mode="fill-auto")
-
参数说明
参数名称 数据类型 是否必填 说明 data Table 是 映射关系的表格,表格某一列必须是查询字符串。 inpt String 是 表格中用于匹配搜索的字段名。 output_fields String,String List或Tuple List 是 表格中映射出的字段,可以是字符串、列表或者其名称映射元组的列表。 multi_match Boolean 否 是否允许匹配多个字段。默认为False表示不匹配多个字段,会返回匹配到的第一个字段值。支持使用 multi_join
来拼接多个匹配的值。multi_join String 否 匹配多个字段时,多值的连接字符串,默认为空格。当 multi_match
值为True时生效。missing String 否 无匹配字段时,将该参数的取值赋给输出字段output_fields。默认为None表示不做映射赋值操作。 说明 如果表格中包含默认匹配*
,由于*
的优先级高于missing
,此时missing
将不起作用。mode String 否 字段的覆盖模式。默认为fill-auto。关于更多字段值及含义参见字段提取检查与覆盖模式。 -
返回结果
返回查询匹配中后的映射结果。
-
函数示例
- 示例1:根据映射关系的表格,将日志中city字段映射出pop和province字段。
- 原始日志
例如,以下映射关系的表格,其中search列是查询字符串。data: 123 city: sh
search pop province city==nj
800 js city==sh
2000 sh - 加工规则
e_search_table_map( tab_parse_csv("search,pop,province\ncity==nj,800,js\ncity==sh,2000,sh"), "search", ["pop", "province"], )
- 加工结果
data: 123 city: sh province: sh pop: 2000
- 原始日志
- 示例2:overwrite模式。
- 原始日志
data: 123 city: nj province:
- 加工规则
e_search_table_map( tab_parse_csv("search,pop,province\ncity==nj,800,js\ncity==sh,2000,sh"), "search", "province", mode="overwrite", )
- 加工结果
data: 123 city: nj province: js
- 原始日志
- 示例3:无匹配时目标字段的值由missing指定。
- 原始日志
data: 123 city: wh province:
- 加工规则
e_search_table_map( tab_parse_csv("search,pop,province\ncity==nj,800,\ncity==sh,2000,sh"), "search", "province", missing="Unknown", )
- 加工结果
data: 123 city: wh province: Unknown
- 原始日志
- 示例4:允许匹配多个字段(multi_match模式)。
- 原始日志
data: 123 city: nj,sh province:
- 加工规则
e_search_table_map( tab_parse_csv("search,pop,province\ncity:nj,800,js\ncity:sh,2000,sh"), "search", "province", multi_match=True, multi_join=",", )
- 加工结果
data: 123 city: nj,sh province: js,sh
- 原始日志
- 示例1:根据映射关系的表格,将日志中city字段映射出pop和province字段。