本文介绍映射富化函数的语法规则,包括参数解释、函数示例等。
函数列表
类型 | 函数 | 说明 |
字段映射 | 与目标数据字典进行映射,根据输入的字段映射一个新字段。 支持和其他函数组合使用。相关示例,请参见使用e_dict_map函数进行数据富化。 | |
与目标表格进行映射,根据输入的字段名称返回字段值。 支持和其他函数组合使用。相关示例,请参见使用e_table_map函数对HTTP请求返回码进行富化。 | ||
以阿里云表格存储(Tablestore)作为维表数据对原始日志进行富化。 | ||
以阿里云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_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: 正常
更多参考
支持和其他函数组合使用。相关示例,请参见使用e_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
更多参考
支持和其他函数组合使用。相关示例,请参见使用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请求参数的编码方式,默认值为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:根据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
示例2:将日志中的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
示例3:根据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
示例4:根据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
示例5:根据二级索引主键(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
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 }