Convert Hive string to Map, str_to_map usage uses concat

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.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324142498&siteId=291194637