本文檔介紹如何通過資源函數從其他Logstore中獲取數據對數據進行富化。
背景信息
某酒店將客人個人信息存儲在名為user_logstore的Logstore中,將客人入住信息存儲在名為check-in_logstore的Logstore中,現在酒店希望從check-in_logstore中獲取部分字段數據,與user_logstore中的數據拼接。針對該需求,日志服務提供res_log_logstore_pull函數從check-in_logstore中獲取數據,提供e_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_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
設置黑白名單過濾數據
設置白名單
加工規則
通過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