本文介紹映射富化函數的語法規則,包括參數解釋、函數示例等。
函數列表
類型 | 函數 | 說明 |
字段映射 | 與目標數據字典進行映射,根據輸入的字段映射一個新字段。 支持和其他函數組合使用。相關示例,請參見使用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 }