本文為您介紹如何使用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