全部產品
Search
文件中心

Simple Log Service:使用資源函數增量擷取資料

更新時間:Jun 30, 2024

使用增量拉模數式擷取資料時,Log Service每次只拉取新增或更新的資料,效率高。本文介紹如何使用res_rds_mysql函數增量擷取RDS MySQL資料庫中的資料。

前提條件

  • Log Service

    • 已上傳資料到Log Service源Logstore中。具體操作,請參見資料擷取

    • 已建立Log Service目標Logstore。具體操作,請參見建立Logstore

    • 如果您使用的是RAM使用者,則需要先授予RAM使用者資料加工操作許可權。具體操作,請參見授予RAM使用者資料加工操作許可權

    • 已配置源Logstore和目標Logstore的索引。具體操作,請參見建立索引

      資料加工任務不依賴索引;但不配置索引,您無法執行查詢和分析操作。

  • RDS

    • 已建立RDS資料庫和帳號。具體操作,請參見建立資料庫和帳號

    • 已上傳資料到RDS MySQL資料庫表。

    • 已配置RDS MySQL白名單。具體操作,請參見通過用戶端、命令列串連RDS MySQL執行個體

      重要

      使用res_rds_mysql函數從RDS MySQL資料庫中拉取資料時,需先在RDS MySQL中配置白名單為0.0.0.0,使所有IP地址都可訪問資料庫,但是這種方式會增加資料庫的風險。如果您需要設定指定的Log ServiceIP地址,可以提工單進行配置。

背景資訊

某科技公司將客戶資訊儲存在雲資料庫RDS MySQL資料庫中,將客戶維護記錄儲存在Log Service的Logstore中,兩種資料都在持續更新。現在該公司希望將兩種資料JOIN後儲存到一個新的Logstore中。

Log Service提供res_rds_mysql函數,可從RDS MySQL資料庫中拉取資料,儲存到目標Logstore中。增量拉模數式下,在加工任務運行過程中,Log Service根據資料庫中的時間戳記欄位增量拉取資料,只拉取更新或新增的資料,效率高。適用於資料庫中的資料量大、更新頻繁、刪除資料較少、資料加工即時性要求高的情境。

其他拉模數式以及增量拉取的更多資訊,請參見res_rds_mysql

資源資訊與資料樣本

  • Log Service資源

    • Project:client-project

    • 源Logstore:client-log

      資料範例如下所示:

      Logstore

    • 目標Logstore:client-information

  • RDS資源

    • 資料庫:client-db

    • 資料庫表:client

      資料範例如下所示:

      RDS資料庫

    • 資料庫使用者名稱和密碼:test/test1234@@

    • 資料庫外網地址:rm-bp1k****tp8o.mysql.rds.aliyuncs.com

操作步驟

  1. 登入Log Service控制台

  2. 進入資料加工頁面。

    1. 在Project列表中,單擊目標Project(client-project)。

    2. 日誌儲存 > 日誌庫頁簽中,單擊目標Logstore(client-log)。

    3. 在查詢和分析頁面,單擊資料加工

  3. 在頁面右上方,選擇資料的時間範圍。

    請確保在原始日誌頁簽中有日誌資料。

  4. 在編輯框中,輸入資料加工語句。

    詳細的參數說明,請參見res_rds_mysql

    e_table_map(
        res_rds_mysql(
            "rm-bp1k****tp8o.mysql.rds.aliyuncs.com",     
            "test",
            "test1234@@",
            "client-db",
            table="client",
            fields=["c_id", "name", "telephone", "update_time"],
            refresh_interval=1,
            primary_keys="c_id",
            update_time_key="update_time",
            deleted_flag_key=None,
        ),
        "c_id",
        ["name", "telephone"],
    )
  5. 快速預覽資料。

    使用快速預覽,確保加工語句填寫正確。更多資訊,請參見快速預覽

    1. 單擊快速

    2. 測試資料 > 資料頁簽中輸入如下內容。

      {
        "__source__": "192.0.2.0",
        "__time__": 1624956516,
        "__topic__": "log",
        "__tag__:__client_ip__":"192.0.2.2",
        "c_id": "1",
        "staff_id": "002",
        "status": "持續跟進",
        "tag": "二次回訪",
      }
    3. 測試資料 > 維表頁簽中輸入如下內容。

      c_id,name,telephone,update_time,delete_flag
      1,maki,010-123,1606358931,false
    4. 單擊預覽資料

      查看預覽結果。快速預覽結果

  6. 進階預覽資料。

    使用進階預覽,確保Log Service串連RDS MySQL資料庫成功。更多資訊,請參見進階預覽

    1. 單擊進階

    2. 單擊預覽資料

    3. 添加預覽配置面板中,配置授權方式,然後單擊確定

      授權

    4. 查看預覽結果。

      進階預覽結果

      如果提示運行出錯,請參見擷取RDS MySQL資料語法錯誤

  7. 建立資料加工任務。

    1. 單擊儲存資料加工

    2. 建立資料加工任務面板中,配置相關資訊,然後單擊確定

      具體參數說明,請參見建立資料加工任務加工規則

      建立資料加工任務後,您可以在目標Logstore中查看已加工的日誌。加工結果

常見問題

如何使用累加式更新模式中的刪除功能?

累加式更新模式下,Log Service會根據資料庫表中的主鍵和時間,只拉取更新或新增的資料。如果您在資料庫表中將某條資料標記為刪除(例如delete_flag=true),Log Service依舊會拉取該資料繼續加工。針對該情況時,Log Service在res_rds_mysql函數中新增了deleted_flag_key參數。在加工語句中配置deleted_flag_key參數後,加工任務在擷取資料庫表更新的資料後,會將讀取到的delete_flagtrue的資料行從加工任務的記憶體維表中刪除(不影響資料庫表的內容)。在加工任務記憶體維表中被刪除的資料行將不再參與後續與日誌資料JOIN的操作。

重要
  • delete_flag設定為true1等值時,都表示刪除。更多資訊,請參見res_rds_mysql

  • 如果在加工語句中配置了deleted_flag_key參數,則還需配置update_time_key參數。

例如在RDS MySQL資料庫表中新增兩條資料(name=mia,name=tom),其中name=mia這條資料被標記為刪除,即設定delete_flagtrue。則Log Service記憶體維表更新時,name=mia這條資料在維表中被刪除,不會被加工。

加工語句樣本如下:

e_table_map(
    res_rds_mysql(
        "rm-bp1****l3tp.mysql.rds.aliyuncs.com",     
        "test",
        "test1234@@",
        "client-db",
        table="client",
        fields=["c_id", "name", "telephone", "update_time"],
        refresh_interval=1,
        primary_keys="c_id",
        update_time_key="update_time",
        deleted_flag_key="delete_flag",
    ),
    "c_id",
    ["name", "telephone"],
)