全部產品
Search
文件中心

Simple Log Service:從其他Logstore擷取資料進行資料富化

更新時間:Jun 30, 2024

本文檔介紹如何通過資源函數從其他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)中cid12346的資料,返回該資料中的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")
  • 獲得資料

    namemaki的客人,最後的入住資訊為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