Log Service資料加工功能支援從阿里雲RDS MySQL資料庫擷取資料,結合資料加工規則,進行資料富化。
背景資訊
在資料存放區情境中,您可能經常遇到資料分散儲存的問題,例如使用者操作、行為等相關資料存放區在Log Service中,使用者屬性、註冊資訊等相關資料存放區在RDS MySQL資料庫中。面對類似問題,您可以通過Log Service資料加工功能從RDS MySQL資料庫擷取資料,儲存到Log ServiceLogstore中。
您可以使用res_rds_mysql函數從RDS MySQL資料庫擷取資料,然後使用e_table_map函數或e_search_table_map函數進行資料富化。
RDS MySQL執行個體與Log ServiceProject需處於同一地區,否則無法擷取資料。
如果您要使用RDS內網地址訪問RDS MySQL資料庫擷取資料,進行資料富化,可參見使用RDS內網地址訪問RDS MySQL資料庫。
結合e_table_map函數進行資料富化
本樣本介紹使用e_table_map函數和res_rds_mysql函數完成資料富化的方法。
未經處理資料
RDS MySQL資料庫表中的資料範例如下表所示。
province
city
population
cid
eid
上海
上海
2000
1
00001
天津
天津
800
1
00002
北京
北京
4000
1
00003
河南
鄭州
3000
2
00004
江蘇
南京
1500
2
00005
Log ServiceLogstore中的日誌範例如下所示。
time:"1566379109" data:"test-one" cid:"1" eid:"00001" time:"1566379111" data:"test_second" cid:"1" eid:"12345" time:"1566379111" data:"test_three" cid:"2" eid:"12345" time:"1566379113" data:"test_four" cid:"2" eid:"12345"
加工規則
通過Log ServiceLogstore中的cid欄位和RDS MySQL資料庫表中cid欄位進行匹配,只有cid欄位的值完全相同,才能匹配成功。匹配成功後,返回RDS MySQL資料庫表中的province、city和population欄位和欄位值,與Logstore中的資料拼接,產生新的資料。
說明日誌欄位的值和RDS MySQL資料庫表欄位的值進行等值匹配時,如果RDS MySQL資料庫表欄位存在多個相同的值(例如RDS MySQL資料庫表有多個值為1的cid欄位。),e_table_map函數只擷取匹配到的第一行資料。
e_table_map函數只支援單行匹配,如果您要實現多行匹配,將匹配到的資料群組合成新的日誌,可使用e_search_table_map函數,詳情請參見結合e_search_map_table函數進行資料富化。
e_table_map(res_rds_mysql(address="rds-host", username="mysql-username",password="xxx",database="xxx",table="xx",refresh_interval=60),"cid",["province","city","population"])
在res_rds_mysql函數中配置RDS MySQL資料庫相關資訊,詳情請參見res_rds_mysql。
加工結果
time:"1566379109" data:"test-one" cid:"1" eid:"00001" province:"上海" city:"上海" population:"2000" time:"1566379111" data:"test_second" cid:"1" eid:"12345" province:"上海" city:"上海" population:"2000" time:"1566379111" data:"test_three" cid:"2" eid:"12345" province:"河南" city:"鄭州" population:"3000" time:"1566379113" data:"test_four" cid:"2" eid:"12345" province:"河南" city:"鄭州" population:"3000"
結合e_search_map_table函數進行資料富化
本樣本介紹使用e_search_map_table函數和res_rds_mysql函數完成資料富化的方法。
未經處理資料
RDS MySQL資料庫表中的資料範例如下表所示。
content
name
age
city~=n*
aliyun
10
province~=su$
Maki
18
city:nanjing
vicky
20
Log ServiceLogstore中的日誌範例如下所示。
time:1563436326 data:123 city:nanjing province:jiangsu
加工規則
根據指定的RDS MySQL資料庫表中的欄位值(例如content欄位的值)去匹配日誌欄位,其中指定的RDS MySQL資料庫表中的欄位值為Key-Value形式,Key對應日誌欄位,Value為Regex,對應日誌欄位的值。根據匹配結果,將相關欄位和欄位值與Logstore中的資料拼接,產生新的資料。
說明在res_rds_mysql函數中配置RDS MySQL資料庫相關資訊,詳情請參見res_rds_mysql。
content欄位為RDS MySQL資料庫表中的欄位,使用該欄位的值去匹配日誌欄位,支援正則匹配、完全符合、模糊比對等形式,具體匹配規則請參見e_search。
單行匹配
匹配到RDS MySQL資料庫表中一行資料就返回。
e_search_table_map(res_rds_mysql(address="rds-host", username="mysql-username",password="xxx",database="xxx",table="xx",refresh_interval=60),"content","name")
多行匹配
遍曆RDS MySQL資料庫表中的所有資料行,將匹配到的資料全部添加到指定欄位中。
說明文法中增加如下兩個參數。
multi_match=True
:開啟多行匹配。multi_join=","
:匹配到多個值時使用逗號(,)進行組合。
e_search_table_map(res_rds_mysql(address="rds-host", username="mysql-username",password="xxx",database="xxx",table="xx",refresh_interval=60),"content","name",multi_match=True,multi_join=",")
加工結果
單行匹配
例如:匹配日誌中欄位值符合n*運算式的city欄位,匹配成功後,返回RDS MySQL資料庫表中的name欄位和欄位值,產生一條新的日誌。
time:1563436326 data:123 city:nanjing province:jiangsu name:aliyun
多行匹配
例如:匹配日誌中欄位值符合n*運算式的city欄位,符合su$運算式的province和是否包含nanjing的city欄位。其中~=後面是Regex,冒號(:)表示是否包含該欄位。匹配成功後,返回RDS MySQL資料庫表中的name欄位和對應的三個欄位值,多個欄位值用逗號(,)分隔,產生一條新的日誌。
time:1563436326 data:123 city:nanjing province:jiangsu name:aliyun,Maki,vicky