全部產品
Search
文件中心

Simple Log Service:從RDS MySQL資料庫擷取資料進行資料富化

更新時間:Jul 27, 2024

Log Service資料加工功能支援從阿里雲RDS MySQL資料庫擷取資料,結合資料加工規則,進行資料富化。

背景資訊

在資料存放區情境中,您可能經常遇到資料分散儲存的問題,例如使用者操作、行為等相關資料存放區在Log Service中,使用者屬性、註冊資訊等相關資料存放區在RDS MySQL資料庫中。面對類似問題,您可以通過Log Service資料加工功能從RDS MySQL資料庫擷取資料,儲存到Log ServiceLogstore中。

您可以使用res_rds_mysql函數從RDS MySQL資料庫擷取資料,然後使用e_table_map函數或e_search_table_map函數進行資料富化。

說明
  • RDS MySQL執行個體與Log ServiceProject需處於同一地區,否則無法擷取資料。

  • 如果您要使用RDS內網地址訪問RDS MySQL資料庫擷取資料,進行資料富化,可參見使用RDS內網地址訪問RDS MySQL資料庫

結合e_table_map函數進行資料富化

本樣本介紹使用e_table_map函數和res_rds_mysql函數完成資料富化的方法。

  • 未經處理資料

    • RDS MySQL資料庫表中的資料範例如下表所示。

      province

      city

      population

      cid

      eid

      上海

      上海

      2000

      1

      00001

      天津

      天津

      800

      1

      00002

      北京

      北京

      4000

      1

      00003

      河南

      鄭州

      3000

      2

      00004

      江蘇

      南京

      1500

      2

      00005

    • Log ServiceLogstore中的日誌範例如下所示。

      time:"1566379109"
      data:"test-one"
      cid:"1"
      eid:"00001"
      
      time:"1566379111"
      data:"test_second"
      cid:"1"
      eid:"12345"
      
      time:"1566379111"
      data:"test_three"
      cid:"2"
      eid:"12345"
      
      time:"1566379113"
      data:"test_four"
      cid:"2"
      eid:"12345"
  • 加工規則

    通過Log ServiceLogstore中的cid欄位和RDS MySQL資料庫表中cid欄位進行匹配,只有cid欄位的值完全相同,才能匹配成功。匹配成功後,返回RDS MySQL資料庫表中的provincecitypopulation欄位和欄位值,與Logstore中的資料拼接,產生新的資料。

    說明
    • 日誌欄位的值和RDS MySQL資料庫表欄位的值進行等值匹配時,如果RDS MySQL資料庫表欄位存在多個相同的值(例如RDS MySQL資料庫表有多個值為1cid欄位。),e_table_map函數只擷取匹配到的第一行資料。

    • e_table_map函數只支援單行匹配,如果您要實現多行匹配,將匹配到的資料群組合成新的日誌,可使用e_search_table_map函數,詳情請參見結合e_search_map_table函數進行資料富化

    e_table_map(res_rds_mysql(address="rds-host", username="mysql-username",password="xxx",database="xxx",table="xx",refresh_interval=60),"cid",["province","city","population"])

    在res_rds_mysql函數中配置RDS MySQL資料庫相關資訊,詳情請參見res_rds_mysql

  • 加工結果

    time:"1566379109"
    data:"test-one"
    cid:"1"
    eid:"00001"
    province:"上海"
    city:"上海"
    population:"2000"
    
    time:"1566379111"
    data:"test_second"
    cid:"1"
    eid:"12345"
    province:"上海"
    city:"上海"
    population:"2000"
    
    time:"1566379111"
    data:"test_three"
    cid:"2"
    eid:"12345"
    province:"河南"
    city:"鄭州"
    population:"3000"
    
    time:"1566379113"
    data:"test_four"
    cid:"2"
    eid:"12345"
    province:"河南"
    city:"鄭州"
    population:"3000"

結合e_search_map_table函數進行資料富化

本樣本介紹使用e_search_map_table函數和res_rds_mysql函數完成資料富化的方法。

  • 未經處理資料

    • RDS MySQL資料庫表中的資料範例如下表所示。

      content

      name

      age

      city~=n*

      aliyun

      10

      province~=su$

      Maki

      18

      city:nanjing

      vicky

      20

    • Log ServiceLogstore中的日誌範例如下所示。

      time:1563436326
      data:123
      city:nanjing
      province:jiangsu
  • 加工規則

    根據指定的RDS MySQL資料庫表中的欄位值(例如content欄位的值)去匹配日誌欄位,其中指定的RDS MySQL資料庫表中的欄位值為Key-Value形式,Key對應日誌欄位,Value為Regex,對應日誌欄位的值。根據匹配結果,將相關欄位和欄位值與Logstore中的資料拼接,產生新的資料。

    說明
    • 在res_rds_mysql函數中配置RDS MySQL資料庫相關資訊,詳情請參見res_rds_mysql

    • content欄位為RDS MySQL資料庫表中的欄位,使用該欄位的值去匹配日誌欄位,支援正則匹配、完全符合、模糊比對等形式,具體匹配規則請參見e_search

    • 單行匹配

      匹配到RDS MySQL資料庫表中一行資料就返回。

      e_search_table_map(res_rds_mysql(address="rds-host", username="mysql-username",password="xxx",database="xxx",table="xx",refresh_interval=60),"content","name")
    • 多行匹配

      遍曆RDS MySQL資料庫表中的所有資料行,將匹配到的資料全部添加到指定欄位中。

      說明

      文法中增加如下兩個參數。

      • multi_match=True:開啟多行匹配。

      • multi_join=",":匹配到多個值時使用逗號(,)進行組合。

      e_search_table_map(res_rds_mysql(address="rds-host", username="mysql-username",password="xxx",database="xxx",table="xx",refresh_interval=60),"content","name",multi_match=True,multi_join=",")
  • 加工結果

    • 單行匹配

      例如:匹配日誌中欄位值符合n*運算式的city欄位,匹配成功後,返回RDS MySQL資料庫表中的name欄位和欄位值,產生一條新的日誌。

      time:1563436326
      data:123
      city:nanjing
      province:jiangsu
      name:aliyun
    • 多行匹配

      例如:匹配日誌中欄位值符合n*運算式的city欄位,符合su$運算式的province和是否包含nanjingcity欄位。其中~=後面是Regex,冒號(:)表示是否包含該欄位。匹配成功後,返回RDS MySQL資料庫表中的name欄位和對應的三個欄位值,多個欄位值用逗號(,)分隔,產生一條新的日誌。

      time:1563436326
      data:123
      city:nanjing
      province:jiangsu
      name:aliyun,Maki,vicky