日誌服務數據加工最佳實踐: 從其餘logstore拉取數據作富化

概述

使用全局富化函數作富化時, 須要傳遞一個字典或者表格結構作富化. 參考構建字典與表格作數據富化的各類途徑比較. 
本篇介紹從使用資源函數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的使用給出一些例子進行演示。日誌

場景1: 獲取指定時間內全部的數據

注意: 這裏的時間是日誌獲取時間.code

DSL編排語法

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

場景2: 設置黑白名單參數來過濾拉取的數據

1.DSL 編排語法(只設置白名單)

# 設置白名單,只有 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

2.DSL 編排語法(只設置黑名單)

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

3.DSL編排語法(同時設置黑白名單)

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

場景3: 開通持續拉取目標logstore 數據

DSL編排語法

若是目標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)
# 須要注意的是,在持續拉取的過程當中,若是遇到錯誤,服務器會一直退火重試,直到成功爲止,不會中止數據加工進程。

場景4: 開啓主鍵維護拉取的目標logstore數據(暫時不推薦)

注意事項

目前該功能僅限使用全部數據存儲在logstore的同一個shard中,因此暫時不推薦使用該功能。接口

背景

以咱們的我的信息logstore 和 酒店信息logstore的數據進行舉例,由於logstore和數據庫不一樣,logstore中的數據只能寫入,沒法刪除,因此有的時候咱們但願匹配的時候將已經刪除的數據不要進行匹配,這時候就須要開啓主鍵維護功能。進程

需求演示

如今咱們想拉取酒店信息logstore中,全部入住尚未離開的客人信息,當status=leave的時候,表示客人已經離開酒店,因此不須要將該信息進行拉取。

DSL編排語法

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,這樣纔有意義。


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索