String to map
str_to_map(text[, delimiter1, delimiter2])
splits the text into key-value pairs using two delimiters. Delimiter1 splits the text into KV pairs and Delimiter2 splits each KV pair. The default delimiter is ',' for delimiter1 and '=' for delimiter2.
select str_to_map('aaa:11&bbb:22', '&', ':')['aaa']; --11,这里&是各个k:v & k:v的分隔符,:是k:v的分隔符
select str_to_map('aaa:11&bbb:22', '&', ':')['aaa']; -- 11
-- 直接用+会报错
select str_to_map('aaa:'+'11'+'&bbb:'+'22', '&', ':')['aaa']; -- FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments '':'': All argument should be string/character type
-- concat可以输入多个参数
select concat('aaa:','11','&bbb:','22') -- aaa:11&bbb:22
select str_to_map(concat('aaa:','11','&bbb:','22'), '&', ':')['aaa']; -- 11
select str_to_map('abtest=NULL,keya=100727622', ',', '=')['keya']; --100727622
select str_to_map('abtest=NULL', ',', '=')['keya']; --NULL
select str_to_map('14129999', ',', '=')['keya']; --NULL
select str_to_map('Android', ',', '=')['keya']; --NULL
select str_to_map('abtest=NULL,p=100009', ',', '=')['keya']; -- NULL
select str_to_map('abtest=NULL,keya_num=9,keyas=101754088|100942309|10034488|10026828|110547601,shop_num=1', ',', '=')['keyas']; -- 101754088|100942309|10034488|10026828|110547601
select str_to_map('abtest=NULL,keya_num=9,keyas=101754088,100942309,10034488,10026828,110547601,shop_num=1', ',', '=')['keyas']; --101754088
------------------
select str_to_map('abtest=NULL,sku=', ',', '=')['sku']; --无结果,查询过程报错
select str_to_map('abtest=NULL,sku', ',', '=')['sku']; -- NULL,查询过程报错
------------------
查询过程报错,虽然结果是NULL。所以在查询前需要先对字符串做判断,
比如:str like '%sku=%' 再提取sku的值
select str_to_map('abtest=NULL', ',', '=')['sku']; --NULL,
At this point, in order to parse out keya, converting to map is simpler than converting to json.