本文介紹映射富化函數的文法規則,包括參數解釋、函數樣本等。
函數列表
類型 | 函數 | 說明 |
欄位對應 | 與目標資料字典進行映射,根據輸入的欄位對應一個新欄位。 支援和其他函數組合使用。相關樣本,請參見使用e_dict_map函數進行資料富化。 | |
與目標表格進行映射,根據輸入的欄位名稱返回欄位值。 支援和其他函數組合使用。相關樣本,請參見使用e_table_map函數對HTTP請求返回碼進行富化。 | ||
以阿里雲Table Store(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
以阿里雲Table Store(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
是
原始日誌中與Table Store資料表進行映射的欄位。日誌欄位與資料表中的所有主鍵欄位一一映射。例如:
資料表的主鍵為欄位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
是
Table Store服務執行個體的網域名稱地址。更多資訊,請參見服務地址。
說明支援同地區VPC地址和全地區公網地址。
ak_id
String
是
具備Table Store執行個體存取權限的AccessKey ID。如何擷取,請參見建立AccessKey。
如果是RAM使用者,需具備Table Store存取權限(例如AliyunOTSReadOnlyAccess許可權)。具體操作,請參見為RAM使用者授權。
ak_secret
String
是
具備Table Store執行個體存取權限的AccessKey Secret。如何擷取,請參見建立AccessKey。
instance_name
String
是
Table Store執行個體名稱。
table_names
String、String List或Tuple List
是
資料表名稱。如果資料表使用的是二級索引,則設定該參數為索引名。關於二級索引的更多資訊,請參見全域二級索引。
例如已建立資料表的二級索引為index1,則設定為
table_names="index1"
。output_fields
List
否
映射後的列集合,列名可以為主鍵列或屬性列。例如
["province", "pop"]
。如果不設定返回的列名,則返回匹配到的資料條目的所有列。說明如果目標Table Store執行個體包含多個資料表,則返回的是第一個查詢到的資料條目所在資料表的資料。
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 }