使用全局富化函數作富化時, 須要傳遞一個字典或者表格結構作富化. 參考構建字典與表格作數據富化的各類途徑比較.
本篇介紹從使用資源函數res_log_logstore_pull
從其餘logstore拉取數據的作富化的詳細實踐.關於res_log_logstore_pull
的參數說明, 參考這裏. 該語法目前支持兩種模式去logstore拉取數據,一種是拉取指定時間間隔內的logstore 的數據內容,另一種是不設置結束時間,持續的拉取目標logstore內容數據庫
這裏咱們有兩個logstore,一個是存儲我的信息的source_logstore,一個是酒店存儲客人入住信息的target_logstore ,咱們如今將酒店的入住信息拿來作富化。
注意: 這裏採用pull_log接口拉取數據, 富化的logstore並不依賴索引.服務器
我的信息 source_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
酒店入住信息logstorefetch
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
基本語法spa
res_log_logstore_pull( endpoint, ak_id, ak_secret, project, logstore, fields, from_time=None, to_time=None, fetch_include_data=None, fetch_exclude_data=None, primary_keys=None, delete_data=None, refresh_interval_max=60, fetch_interval=2):
具體的參數說明請參考res_log_logstore_pull,須要注意的地方是,res_log_logstore_pull 是一個單獨的語法,只負責從目標logstore 拉取數據下來,自己本身並無作任何富化的操做,因此請不要單獨使用res_log_logstore_pull語法,結合e_table_map和e_search_table_map語句一塊兒使用纔是有意義的,本篇也會結合e_table_map和e_search_map_table的使用給出一些例子進行演示。日誌
注意: 這裏的時間是日誌獲取時間.code
res_log_logstore_pull(..., ["cid","name","room_number"],from_time=1567038284,to_time=1567038500)
#這裏咱們的語法中 field 填入了 cid,name,room_number 三個字段,,而且指定了時間範圍,將會獲取這個時間範圍內的logstore的全部數據的這三個字段的值 cid:12345 name:maki room_number:1111 cid:12346 name:vicky room_number:2222 cid:12347 name:mary room_number:3333 cid:12345 name:maki room_number:1111
# 設置白名單,只有 room_number 值等於 1111的的數據會被拉去下來 res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_include_data="room_number:1111")
# 設置了 ferch_include_data 白名單,只有包含 room_numver:1111的數據會被拉去下來,其餘數據不會被拉取。 status: check in cid:12345 name:maki room_number:1111 status:leave cid:12345 name:maki room_number:1111
res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_exclude_data="room_number:1111")
# 設置黑名單 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
res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_exclude_data="status:leave",fetch_include_data="status:check in")
# 黑白名單同時存在的狀況下,優先進行黑名單數據的匹配,這裏咱們填入的是 status:leave的值,當數據包含status:leave的值時候,數據會被直接丟棄,然後匹配白名單,白名單咱們填入的是 status:check in 當數據包含 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 的數據是持續寫入,咱們須要持續的去拉取時候,設置 to_time 參數爲None 就能夠,同時能夠設置fetch_interval 設置拉取的時間間隔,和refresh_interval_max 當拉取遇到錯誤的時候退火重試的最大時間間隔索引
res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=None,fetch_interval=15,refresh_interval_max=60) # 須要注意的是,在持續拉取的過程當中,若是遇到錯誤,服務器會一直退火重試,直到成功爲止,不會中止數據加工進程。
目前該功能僅限使用全部數據存儲在logstore的同一個shard中,因此暫時不推薦使用該功能。接口
以咱們的我的信息logstore 和 酒店信息logstore的數據進行舉例,由於logstore和數據庫不一樣,logstore中的數據只能寫入,沒法刪除,因此有的時候咱們但願匹配的時候將已經刪除的數據不要進行匹配,這時候就須要開啓主鍵維護功能。進程
如今咱們想拉取酒店信息logstore中,全部入住尚未離開的客人信息,當status=leave的時候,表示客人已經離開酒店,因此不須要將該信息進行拉取。
res_log_logstore_pull(..., ["cid","name","room_number","status","time"],from_time=1567038284,to_time=None,primary_keys="cid",delete_data="status:leave")
## 能夠看到 name爲maki 的客人的最後更新status爲leave ,已經離開酒店,因此並無將 maki的數據拉取下來, time:1567038284 status:check in cid:12346 name:vicky room_number:2222 time:1567038500 status:check in cid:12347 name:mary room_number:3333
須要注意的是 primary_keys 目前只支持設置單字符串,這個須要設置logstore數據中 值爲惟一的字段,好比樣例中的cid , 相似數據庫的惟一主鍵,而且當設置primary_keys的時候,delete_data 也必須不爲 None,這樣纔有意義。
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。