全部產品
Search
文件中心

Simple Log Service:映射富化函數

更新時間:Oct 29, 2024

本文介紹映射富化函數的文法規則,包括參數解釋、函數樣本等。

函數列表

類型

函數

說明

欄位對應

e_dict_map

與目標資料字典進行映射,根據輸入的欄位對應一個新欄位。

支援和其他函數組合使用。相關樣本,請參見使用e_dict_map函數進行資料富化

e_table_map

與目標表格進行映射,根據輸入的欄位名稱返回欄位值。

支援和其他函數組合使用。相關樣本,請參見使用e_table_map函數對HTTP請求返回碼進行富化

e_tablestore_map

以阿里雲Table Store(Tablestore)作為維表資料對原始日誌進行富化。

e_redis_map

以阿里雲Redis作為維表資料對原始日誌進行富化。

e_dict_map

與目標資料字典進行映射,根據輸入的欄位對應一個新欄位。

  • 函數格式

    e_dict_map(data, field, output_field, case_insensitive=True, missing=None, mode="overwrite")
  • 參數說明

    參數名稱

    資料類型

    是否必填

    說明

    data

    Dict

    目標資料字典。必須為標準的{key01:value01,key01:value02,...}格式,且必須是字串。例如{"1": "TCP", "2": "UDP", "3": "HTTP", "*": "Unknown"}

    field

    String或者String List

    一個欄位名或者多個欄位名的列表。多個欄位時:

    • 依次對匹配到的值進行映射。

    • 如果匹配命中多條日誌,且mode的取值為overwrite時,則最後一個會覆蓋前面的結果。

    • 當沒有匹配到任何欄位,則使用missing參數的值作為匹配值。

    output_field

    String

    輸出欄位的名稱。

    case_insensitive

    Boolean

    匹配時大小寫是否不敏感。

    • True(預設值):不敏感。

    • False:敏感

    說明

    如果字典中存在同一個關鍵字的不同大小寫,且case_insensitiveTrue時,會優先選擇大小寫完全符合的值。如果沒有,則隨機播放一個。

    missing

    String

    無匹配欄位時,將該參數的取值賦給輸出欄位output_field。預設為None表示不做映射賦值操作。

    說明

    如果字典中包含匹配星號(*),由於星號(*)的優先順序高於missing,此時missing參數不生效。

    mode

    String

    欄位的覆蓋模式。預設為overwrite。更多資訊,請參見欄位提取檢查與覆蓋模式

  • 返回結果

    返回附帶新欄位的日誌。

  • 函數樣本

    • 樣本1:根據原始日誌中pro欄位的值和目標資料字典,輸出新欄位protocol

      • 原始日誌

        data:  123
        pro:  1
      • 加工規則

        e_dict_map(
            {"1": "TCP", "2": "UDP", "3": "HTTP", "6": "HTTPS", "*": "Unknown"},
            "pro",
            "protocol",
        )
      • 加工結果

        data:  123
        pro:  1
        protocol:  TCP
    • 樣本2:根據原始日誌中status欄位的值和目標資料字典,輸出新欄位message

      • 原始日誌(三條日誌)

        status:  500
        status:  400
        status:  200
      • 加工規則

        e_dict_map({"400": "錯誤", "200": "正常", "*": "其他"}, "status", "message")
      • 加工結果

        status:  500
        message:  其他
        status:  400
        message:  錯誤
        status:  200
        message:  正常
  • 更多參考

    支援和其他函數組合使用。相關樣本,請參見使用e_dict_map函數進行資料富化

e_table_map

與目標表格進行映射,根據輸入的欄位名稱返回欄位值。

  • 函數格式

    e_table_map(data, field, output_fields, missing=None, mode="fill-auto")
  • 參數說明

    參數名稱

    資料類型

    是否必填

    說明

    data

    Table

    目標表格。

    說明

    如果採用資源函數res_rds_mysqlres_log_logstore_pull作為資料來源,請設定primary_keys參數,否則會嚴重影響效能並可能導致任務延遲。如何設定,請參見資源函數

    field

    String、String List或Tuple List

    日誌中映射到表格的源欄位。如果日誌中不存在對應欄位,則不進行任何操作。

    output_fields

    String、String List或Tuple List

    映射後的欄位。例如["province", "pop"]

    missing

    String

    無匹配欄位時,將該參數的取值賦給輸出欄位output_fields。預設為None表示不做映射賦值操作。如果目標欄位是多列,則missing可以是一個長度與目標欄位數一致的預設值列表。

    說明

    如果表格中包含匹配星號(*),由於星號(*)的優先順序高於missing,此時missing參數將不起作用。

    mode

    String

    欄位的覆蓋模式。預設為fill-auto。更多資訊,請參見欄位提取檢查與覆蓋模式

  • 返回結果

    返回附帶新欄位值的日誌。

  • 函數樣本

    • 樣本1:在映射表格中尋找對應行,根據city欄位返回province欄位的值。

      • 原始日誌

        data: 123
        city: nj
      • 加工規則

        e_table_map(
            tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"), "city", "province"
        )
      • 加工結果

        data: 123
        city: nj
        province: js
    • 樣本2:在映射表格中尋找對應行,根據city欄位返回province欄位和pop欄位的值。

      • 原始日誌

        data: 123
        city: nj
      • 加工規則

        e_table_map(
            tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"),
            "city",
            ["province", "pop"],
        )
      • 加工結果

        data: 123
        city: nj
        province: js
        pop: 800
    • 樣本3:使用tab_parse_csv函數構建映射表格,根據city欄位返回province欄位和pop欄位的值。

      • 原始日誌

        data: 123
        city: nj
      • 加工規則

        e_table_map(
            tab_parse_csv("city#pop#province\nnj#800#js\nsh#2000#sh", sep="#"),
            "city",
            ["province", "pop"],
        )
      • 加工結果

        data: 123
        city: nj
        province: js
        pop: 800
    • 樣本4:使用tab_parse_csv函數構建映射表格,根據city欄位返回province欄位和pop欄位的值。

      • 原始日誌

        data: 123
        city: nj
      • 加工規則

        e_table_map(
            tab_parse_csv(
                "city,pop,province\n|nj|,|800|,|js|\n|shang hai|,2000,|SHANG,HAI|", quote="|"
            ),
            "city",
            ["province", "pop"],
        )
      • 加工結果

        data: 123
        city: nj
        province: js
        pop: 800
    • 樣本5:日誌匹配欄位與映射表格中欄位不一樣。在映射表格中尋找對應行,根據ctycity欄位返回province欄位的值。

      • 原始日誌

        data: 123
        cty: nj
      • 加工規則

        e_table_map(
            tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"),
            [("cty", "city")],
            "province",
        )
      • 加工結果

        data: 123
        cty: nj
        province: js
    • 樣本6:日誌匹配欄位與映射表格中欄位不一樣,並且對輸出欄位進行重新命名。

      • 原始日誌

        data: 123
        cty: nj
      • 加工規則

        e_table_map(
            tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"),
            [("cty", "city")],
            [("province", "pro")],
        )                                  
      • 加工結果

        data: 123
        cty: nj
        pro: js
    • 樣本7:多個日誌匹配欄位。

      • 原始日誌

        data: 123
        city: nj
        pop: 800
      • 加工規則

        e_table_map(
            tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"),
            ["city", "pop"],
            "province",
        )
      • 加工結果

        data: 123
        city: nj
        pop: 800
        province: js
    • 樣本8:多個日誌匹配欄位,且日誌匹配欄位與映射表格欄位不一樣。

      • 原始日誌

        data: 123
        cty: nj
        pp: 800
      • 加工規則

        e_table_map(
            tab_parse_csv("city,pop,province\nnj,800,js\nsh,2000,sh"),
            [("cty", "city"), ("pp", "pop")],
            "province",
        )
      • 加工結果

        data: 123
        cty: nj
        pp: 800
        province: js
  • 更多參考

    支援和其他函數組合使用。相關樣本,請參見使用e_table_map函數對HTTP請求返回碼進行富化

e_tablestore_map

以阿里雲Table Store(Tablestore)作為維表資料對原始日誌進行富化。

  • 函數格式

    e_tablestore_map(
        fields,
        endpoint,
        ak_id,
        ak_secret,
        instance_name,
        table_names,
        output_fields=None,
        output_table_name=None,
        encoding="utf8",
        mode="fill-auto",
    )
  • 參數說明

    參數名稱

    資料類型

    是否必填

    說明

    fields

    String、Number、 List或Tuple List

    原始日誌中與Table Store資料表進行映射的欄位。日誌欄位與資料表中的所有主鍵欄位一一映射。例如:

    • 資料表的主鍵為欄位a,日誌欄位也是a,則可以設定為fields="a"

    • 資料表的主鍵為欄位abc,日誌欄位也為abc,則可以設定為fields=["a", "b", "c"]

    • 資料表的主鍵為欄位abc,日誌欄位為a1b1c1,則可以設定為fields=[("a1", "a"), ("b1", "b"), ("c1", "c")]

    endpoint

    String

    Table Store服務執行個體的網域名稱地址。更多資訊,請參見服務地址

    說明

    支援同地區VPC地址和全地區公網地址。

    ak_id

    String

    具備Table Store執行個體存取權限的AccessKey ID。如何擷取,請參見建立AccessKey

    如果是RAM使用者,需具備Table Store存取權限(例如AliyunOTSReadOnlyAccess許可權)。具體操作,請參見為RAM使用者授權

    ak_secret

    String

    具備Table Store執行個體存取權限的AccessKey Secret。如何擷取,請參見建立AccessKey

    instance_name

    String

    Table Store執行個體名稱。

    table_names

    String、String List或Tuple List

    資料表名稱。如果資料表使用的是二級索引,則設定該參數為索引名。關於二級索引的更多資訊,請參見全域二級索引

    例如已建立資料表的二級索引為index1,則設定為table_names="index1"

    output_fields

    List

    映射後的列集合,列名可以為主鍵列或屬性列。例如["province", "pop"]。如果不設定返回的列名,則返回匹配到的資料條目的所有列。

    說明

    如果目標Table Store執行個體包含多個資料表,則返回的是第一個查詢到的資料條目所在資料表的資料。

    output_table_name

    String

    查詢到的資料條目所在的資料表名稱。預設為None,表示映射出的列集合不包含資料表名。如果設定為字串,表示映射出的列集合包含資料表名。

    例如:資料表名為test,且設定加工規則為output_fields=["province", "pop"],output_table_name="table_name",如果資料表test中匹配到資料列["province", "pop"],則輸出欄位為province: xxx, pop:xxx,table_name:test

    encoding

    String

    HTTPS請求參數的編碼方式,預設值為utf-8。

    mode

    String

    欄位的覆蓋模式。預設為fill-auto。更多資訊,請參見欄位提取檢查與覆蓋模式

  • 返回結果

    返回附帶新欄位值的日誌。

  • 函數樣本

    下述樣本基於如下資料表table_name_test。

    city(主鍵)

    pop(主鍵)

    cid

    province

    region

    bj

    300

    1

    bj

    huabei

    nj

    800

    2

    js

    huadong

    sh

    200

    3

    sh

    huadong

    • 樣本1:根據citypop欄位在資料表中尋找對應行,返回該行中provincecid列的值。

      • 原始日誌

        city:sh
        name:maki
        pop:200
      • 加工規則

        e_tablestore_map(
            ["city","pop"],
            "https://d00s0dxa****.cn-hangzhou.ots.aliyuncs.com",
            "LTA3****",
            "VIH9****",
            "d00s0dxa****",
            "table_name_test",
            output_fields=["province","cid"])
                                            
      • 加工結果

        city:sh
        name:maki
        pop:200
        cid:3
        province:sh
    • 樣本2:將日誌中的city1pop1欄位與資料表中的主鍵(citypop)進行映射,返回目標行中所有列的值。

      • 原始日誌

        city1:sh
        name:maki
        pop1:200
      • 加工規則

        e_tablestore_map(
            [("city1","city"), ("pop1", "pop")],
            "https://d00s0dxa****.cn-hangzhou.ots.aliyuncs.com",
            "LTA3****",
            "VIH9****",
            "d00s0dxa****",
            "table_name_test")
                                            
      • 加工結果

        city:sh
        name:maki
        pop:200
        cid:3
        province:sh
        region:huadong
    • 樣本3:根據citypop欄位在資料表中尋找對應行,返回該行中所有列的值。其中設定output_table_nameoutput_table_name="table_name",返回結果中將包含資料表名稱。

      • 原始日誌

        city:sh
        name:maki
        pop:200
      • 加工規則

        e_tablestore_map(
            ["city","pop"],
            "https://d00s0dxa****.cn-hangzhou.ots.aliyuncs.com",
            "LTA3****",
            "VIH9****",
            "d00s0dxa****",
            "table_name_test",
            output_table_name="table_name"
        )                                  
      • 加工結果

        city:sh
        name:maki
        pop:200
        cid:3
        province:sh
        region:huadong
        table_name:table_name_test
    • 樣本4:根據citypop欄位在多個資料表table_name_test、table_name_test1、table_name_test2中尋找對應的行,返回第一個查詢到的資料表(table_name_test)中目標行對應的所有列的值。

      • 原始日誌

        city:sh
        name:maki
        pop:200
      • 加工規則

        e_tablestore_map(
            ["city","pop"],
            "https://d00s0dxa****.cn-hangzhou.ots.aliyuncs.com",
            "LTA3****",
            "VIH9****",
            "d00s0dxa****",
            ["table_name_test","table_name_test1","table_name_test2"],
            output_table_name="table_name"
        )
      • 加工結果

        city:sh
        name:maki
        pop:200
        cid:3
        province:sh
        region:huadong
        table_name:table_name_test
    • 樣本5:根據二級索引主鍵(pk1pk2)欄位在資料表中尋找對應行,查詢索引index1中definedcol2欄位(預定義列)的值並返回。

      • 資料表tablestore中的資料(索引名index1)

        pk1(主鍵)

        pk2(主鍵)

        definedcol2(預定義列)

        definedcol3(預定義列)

        pk1_1

        pk2_1

        definedcol2_1

        definedcol3_1

        pk1_2

        pk2_2

        definedcol2_2

        definedcol3_2

      • 原始日誌

        pk1:pk1_1
        pk2:pk2_1
      • 加工規則

        e_tablestore_map(
            ["pk1","pk2"],
            "https://d00s0dxa****.cn-hangzhou.ots.aliyuncs.com",
            "LTA3****",
            "VIH9****",
            "d00s0dxa****",
            "index1",
            output_fields= ["definedcol2"],
            output_table_name="table_name",
        )                                
      • 加工結果

        pk1:pk1_1
        pk2:pk2_1
        definedcol2:definedcol2_1
        table_name:index1

e_redis_map

以阿里雲Redis作為維表資料對原始日誌進行富化。

  • 函數格式

    e_redis_map(field, output_field, host, port=6379, db=0, username=None,
                password=None, encoding="utf-8", max_retries=5, mode="fill-auto")
  • 參數說明

    參數名稱

    資料類型

    是否必填

    說明

    field

    String

    原始日誌中與Redis資料表進行映射的欄位。如果日誌中不存在對應欄位,則不進行任何操作。

    output_field

    String

    與Redis資料表進行映射後,輸出的欄位名。

    host

    String

    Redis資料庫連接地址。

    username

    String

    Redis資料庫使用者名稱。預設值為空白,表示不進行許可權驗證。

    password

    String

    Redis資料庫密碼。預設值為空白,表示不進行許可權驗證。

    port

    Integer

    Redis資料庫連接連接埠,預設值為6379。

    db

    Integer

    Redis資料庫名稱。預設值為0。

    encoding

    String

    Redis資料的編碼方式。預設值為utf-8。

    max_retries

    Integer

    串連Redis資料庫失敗時,最大重試次數。預設值為5次。

    如果重試次數超過閾值後,仍串連失敗,則跳過該日誌的加工(不影響後續加工邏輯)。

    每次重試的間隔從1s開始翻倍增加,最大間隔為120s。

    mode

    String

    欄位的覆蓋模式。預設為fill-auto。更多資訊,請參見欄位提取檢查與覆蓋模式

  • 返回結果

    返回附帶了新欄位值的日誌。

  • 函數樣本

    下述樣本基於如下Redis資料表。

    重要

    目前僅支援字串類型的Redis資料值(VALUE)。

    KEY

    VALUE

    i1001

    { "name": "橘子", "price": 10 }

    i1002

    { "name": "蘋果", "price": 12 }

    i1003

    { "name": "芒果", "price": 16 }

    • 樣本1:根據item欄位值在Redis資料表中尋找對應的值並返回,其中加工規則中未設定Redis資料庫使用者名稱和密碼。

      • 原始日誌

        item: i1002
        count: 7
      • 加工規則

        e_redis_map("item", "detail", host="r-bp1olrdor8353v4s.redis.rds.aliyuncs.com")
      • 加工結果

        item: i1002
        count: 7
        detail: {
           "name": "蘋果",
           "price": 12
          }
    • 樣本2:根據item欄位值在Redis資料表中尋找對應的值並返回,其中加工規則中設定了Redis資料庫使用者名稱和密碼。

      • 原始日誌

        item: i1003
        count: 7
      • 加工規則

        e_redis_map("item", "detail", host="r-bp1olrdor8353v4s****.redis.rds.aliyuncs.com", username="r-bp****", password="***")
      • 加工結果

        item: i1003
        count: 7
        detail:{
           "name": "芒果",
           "price": 16
          }