全部產品
Search
文件中心

Realtime Compute for Apache Flink:MULTI_KEYVALUE

更新時間:Jul 13, 2024

本文為您介紹如何使用MULTI_KEYVALUE函數,將目標字串中拆分為Key-Value(KV)對,匹配split1和split2的KV對,並返回key_name1和key_name2對應的Value值。

使用限制

僅Realtime Compute引擎VVR 3.0.0及以上版本支援MULTI_KEYVALUE函數。

警告

在Realtime Compute引擎VVR 8.0.7及下版本,為避免MULTI_KEYVALUE函數解析結果錯誤,在遇到以下情境時,請改用KEYVALUE函數:

  • MULTI_KEYVALUE對應的split1、split2分隔字元和所有key_name都使用了常量字串。

  • 同一個專案空間下的同一個引擎版本中,如果存在多個MULTI_KEYVALUE函數調用,且它們使用了不同的split1、split2分隔字元(無論是單個作業內多次重複使用還是多個作業中分別使用)。

使用KEYVALUE函數,在對同一欄位中不同key_name進行多次解析時,Realtime Compute引擎會嘗試複用中間解析結果,並且通過字串二進位解析機制,整體處理效率通常會更優。但KEYVALUE函數是純量涵式,解析多個欄位需要使用多個KEYVALUE函數分別表示。

文法

MULTI_KEYVALUE(VARCHAR str, VARCHAR split1, VARCHAR split2, VARCHAR key_name1, VARCHAR key_name2, ...)

入參

參數

資料類型

說明

str

VARCHAR

目標字串。

split1

VARCHAR

KV對的分隔字元。

當split1為NULL時,表示按照空格作為KV對的分割符。當split1的長度>1時,split1僅表示分隔字元的集合,每個字元都表示一個有效分隔字元。

split2

VARCHAR

KV的分隔字元。

當split2為NULL時,表示按照空格作為KV的分割符。當split2的長度>1時,split2僅表示分隔字元的集合,每個字元都表示一個有效分隔字元。

key_name1, key_name2, ...

VARCHAR

需要擷取Value的Key值列表。

樣本

  • 測試資料

    表 1. T1

    str(VARCHAR)

    split1(VARCHAR)

    split2(VARCHAR)

    key1(VARCHAR)

    key2(VARCHAR)

    k1=v1;k2=v2

    ;

    =

    k1

    k2

    NULL

    ;

    =

    k1

    k2

    k1:v1;k2:v2

    ;

    :

    k1

    k3

    k1:v1;k2:v2

    ;

    =

    k1

    k2

    k1:v1;k2:v2

    ,

    :

    k1

    k2

    k1:v1;k2=v2

    ;

    :

    k1

    k2

    k1:v1abck2:v2

    abc

    :

    k1

    k2

    k1:v1;k2=v2

    ;

    :=

    k1

    k2

    k1:v1 k2:v2

    NULL

    :

    k1

    k2

    k1 v1;k2 v2

    ;

    NULL

    k1

    k2

  • 測試語句

    SELECT c1, c2 
    FROM T1, lateral table(MULTI_KEYVALUE(str, split1, split2, key1, key2)) 
    as T(c1, c2);                
  • 測試結果

    c1(VARCHAR)

    c2(VARCHAR)

    v1

    v2

    NULL

    NULL

    v1

    NULL

    NULL

    NULL

    NULL

    NULL

    v1

    NULL

    v1

    v2

    v1

    v2

    v1

    v2

    v1

    v2