構(gòu)建字典與表格做數(shù)據(jù)富化
字典和表格是對數(shù)據(jù)進(jìn)行富化時(shí)主要使用的兩種數(shù)據(jù)結(jié)構(gòu),本文檔主要介紹這兩種數(shù)據(jù)結(jié)構(gòu)的常見構(gòu)建方式,并對比不同構(gòu)建方式的優(yōu)缺點(diǎn)。
字典構(gòu)建
直接構(gòu)建
e_dict_map({"400": "error", "200": "ok", "*": "other"}, "status", "message")
從任務(wù)配置資源構(gòu)建
e_dict_map(res_local("http_code_map"), "status", "message")
其中
http_code_map
是任務(wù)高級配置項(xiàng),值為:{"400": "error", "200": "ok", "*": "other"}
從表格構(gòu)建
使用
tab_to_dict
從表格構(gòu)建。而表格的構(gòu)建參見本文后面的表格構(gòu)建。e_dict_map(tab_to_dict(tab_parse_csv("status_code,status_info\n400,error\n200,ok\n*,other"), "status_code", "status_info"), "status", "message")
從字典函數(shù)構(gòu)建
e_dict_map(dct_make("400", "error", "200", "ok", "*", "other"), "status", "message")
從其他表達(dá)式構(gòu)建
e_dict_map(json_parse(v("http_code_map")), "status", "message")
此處從源日志的
http_code_map
字段中獲取映射關(guān)系。
不同字典構(gòu)建方式對比。
構(gòu)建方式 | 優(yōu)點(diǎn) | 缺點(diǎn) |
直接構(gòu)建 | 直觀、簡單、方便。 | 如果內(nèi)容較多,規(guī)則會相對冗長。且靜態(tài)不靈活。 |
從任務(wù)配置資源構(gòu)建 | 內(nèi)容較多且經(jīng)常修改時(shí)推薦使用,易于維護(hù)。 | 不易于擴(kuò)展和跨任務(wù)復(fù)用,不支持自動刷新。 |
從表格構(gòu)建 | 高級場景下使用,維護(hù)機(jī)制更靈活。 | 需要構(gòu)建和維護(hù)對應(yīng)的表格,過程相對繁瑣。 |
從字典函數(shù)構(gòu)建 | 基于邏輯動態(tài)構(gòu)建字典,特定場景下適用。 | 較為高級,不易于維護(hù)。 |
從其他表達(dá)式構(gòu)建 | 從日志事件的字段中動態(tài)提取映射關(guān)系,特定場景下適用。 | 較為高級,不易于維護(hù)。 |
表格構(gòu)建
從文本構(gòu)建
e_table_map(tab_parse_csv("city,name,age\nshanghai,aliyun,10\ncity:nanjing,Maki,18"), "name",["city", "age"])
從RDS資源中構(gòu)建
e_table_map(tab_parse_csv(res_rds_mysql(...database="db", table="city")), "name",["city", "age"])
RDS表格
city
的內(nèi)容為:content,name,age shanghai,aliyun,10 nanjing,Maki,18
從其他Logstore資源構(gòu)建
e_table_map(res_log_logstore_pull(..., project="project_name", logstore="logstore_name", fields=["city","name","age"]),, "name",["city", "age"])
對應(yīng)Logstore中日志事件為:
"日志1" { "city": "shanghai", "name": "aliyun", "age": "10" } "日志2" { "city": "city:nanjing and data > 100", "name": "Maki", "age": "18" }
不同表格構(gòu)建方式對比:
構(gòu)建方式 | 優(yōu)點(diǎn) | 缺點(diǎn) |
從文本構(gòu)建 | 直觀、簡單、方便。 | 如果內(nèi)容較多,規(guī)則會相對冗長。不易于維護(hù)、擴(kuò)展和復(fù)用。 |
從RDS資源構(gòu)建 |
| 需要連接外部RDS資源,配置過程相對比較繁瑣。 |
從其他Logstore資源構(gòu)建 | 支持實(shí)時(shí)讀取,維護(hù)機(jī)制更靈活,高級場景下使用。 | 需要連接其他Logstore,配置過程相對比較繁瑣。 |