本文檔介紹如何通過資源函數從其他Logstore中擷取資料對資料進行富化。
背景資訊
某酒店將客人個人資訊儲存在名為user_logstore的Logstore中,將客人入住資訊儲存在名為check-in_logstore的Logstore中,現在酒店希望從check-in_logstore中擷取部分欄位資料,與user_logstore中的資料拼接。針對該需求,Log Service提供res_log_logstore_pull函數從check-in_logstore中擷取資料,提供e_table_map函數或e_search_table_map函數實現資料富化。
不同Logstore日誌的拼接
未經處理資料
用於儲存個人資訊的Logstore(user_logstore)
topic:xxx city:xxx cid:12345 name:maki topic:xxx city:xxx cid:12346 name:vicky topic:xxx city:xxx cid:12347 name:mary
用於儲存入住資訊的Logstore(check-in_logstore)
time:1567038284 status:check in cid:12345 name:maki room_number:1111 time:1567038284 status:check in cid:12346 name:vicky room_number:2222 time:1567038500 status:check in cid:12347 name:mary room_number:3333 time:1567038500 status:leave cid:12345 name:maki room_number:1111
加工規則
說明res_log_logstore_pull函數支援設定時間範圍,您可以設定一個時間區間,也可以只設定開始時間。
在加工規則中,設定from_time=1567038284,to_time=1567038500,則表示只擷取該時間範圍內的Logstore資料。
在加工規則中,設定from_time="begin",則表示持續擷取Logstore資料。
res_log_logstore_pull函數中的各個欄位詳情請參見res_log_logstore_pull。
e_table_map函數
通過兩個Logstore中相同的
cid
欄位進行匹配,只有cid
欄位的值完全相同,才能匹配成功。匹配成功後,返回Logstore(check-in_logstore)中的room_number
欄位和欄位值,與Logstore(check-in_logstore)中的資料拼接,產生新的資料。e_table_map(res_log_logstore_pull(endpoint, ak_id, ak_secret, project, logstore, fields=["cid","room_number"], from_time="begin", ), "cid","room_number")
e_search_table_map函數
使用e_search_table_map函數對Logstore(check-in_logstore)和Logstore(user_logstore)做搜尋匹配,搜尋Logstore(check-in_logstore)中
cid
為12346
的資料,返回該資料中的room_number
欄位和欄位值,與Logstore(user_logstore)中的資料拼接,產生新的資料。e_search_table_map(res_log_logstore_pull(endpoint, ak_id, ak_secret, project, logstore, fields=["cid","room_number"], from_time="begin", ), "cid=12346","room_number")
加工結果
e_table_map函數
topic:xxx city:xxx cid:12345 name:maki room_nuber:1111 topic:xxx city:xxx cid:12346 name:vicky room_number:2222 topic:xxx city:xxx cid:12347 name:mary room_number:3333
e_search_table_map函數
topic:xxx city:xxx cid:12346 name:vicky room_number:2222
設定黑白名單過濾資料
設定白名單
加工規則
通過fetch_include_data設定白名單,例如fetch_include_data="room_number:1111"表示在擷取資料過程中,只擷取room_number值為1111的資料。
res_log_logstore_pull(endpoint, ak_id, ak_secret, project, logstore, ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_include_data="room_number:1111")
擷取到的資料
status: check in cid:12345 name:maki room_number:1111 status:leave cid:12345 name:maki room_number:1111
設定黑名單
加工規則
通過fetch_exclude_data設定黑名單,例如fetch_exclude_data="room_number:1111"表示在擷取資料過程中,丟棄room_number值為1111的資料。
res_log_logstore_pull(endpoint, ak_id, ak_secret, project, logstore, ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_exclude_data="room_number:1111")
擷取到的資料
status:check in cid:12346 name:vicky room_number:2222 status:check in cid:12347 name:mary room_number:3333
同時設定黑白名單
加工規則
同時設定黑白名單時,優先匹配黑名單,再匹配白名單。例如
fetch_exclude_data="time:1567038285",fetch_include_data="status:check in"
表示在資料擷取過程中,先匹配time
值為1567038285
的資料進行丟棄,再匹配status值為check in的資料進行擷取。res_log_logstore_pull(endpoint, ak_id, ak_secret, project, logstore, ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_exclude_data="time:1567038285",fetch_include_data="status:check in")
擷取到的資料
status:check in cid:12345 name:maki room_number:1111 status:check in cid:12346 name:vicky room_number:2222 status:check in cid:12347 name:mary room_number:3333
開啟主鍵維護擷取目標Logstore資料
當您擷取到資料,還沒加工時,您希望刪除已擷取到資料,不再加工,您可以開啟主鍵維護功能。例如:您要在名為check-in_logstore的Logstore中,擷取已入住還未離開的客戶入住資訊,如果擷取到的資料中包含status:leave表示客人已經離開,可以設定res_log_logstore_pull函數的primary_keys
參數設定主鍵,不加工該資料。
primary_keys參數只支援設定單個字串,且必須存在於fields欄位中。
開啟主鍵維護功能時,待拉取資料的Logstore中只能存在一個Shard。
開啟主鍵維護功能時,delete_data欄位必須不為None。
加工規則
res_log_logstore_pull(endpoint, ak_id, ak_secret, project, logstore, ["cid","name","room_number","status","time"],from_time=1567038284,to_time=None,primary_keys="cid",delete_data="status:leave")
獲得資料
name為maki的客人,最後的入住資訊為status:leave表示已離開酒店,則不加工該客人的相關資料。
time:1567038284 status:check in cid:12346 name:vicky room_number:2222 time:1567038500 status:check in cid:12347 name:mary room_number:3333