本文为您介绍如何使用MULTI_KEYVALUE函数,将目标字符串中拆分为Key-Value(KV)对,匹配split1和split2的KV对,并返回key_name1和key_name2对应的Value值。
使用限制
仅实时计算引擎VVR 3.0.0及以上版本支持MULTI_KEYVALUE函数。
在实时计算引擎VVR 8.0.7及下版本,为避免MULTI_KEYVALUE函数解析结果错误,在遇到以下场景时,请改用KEYVALUE函数:
MULTI_KEYVALUE对应的split1、split2分隔符和所有key_name都使用了常量字符串。
同一个项目空间下的同一个引擎版本中,如果存在多个MULTI_KEYVALUE函数调用,且它们使用了不同的split1、split2分隔符(无论是单个作业内多次重复使用还是多个作业中分别使用)。
使用KEYVALUE函数,在对同一字段中不同key_name进行多次解析时,实时计算引擎会尝试复用中间解析结果,并且通过字符串二进制解析机制,整体处理效率通常会更优。但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