转义字符
在正则表达式中,\\[|\\] 是一个模式,它匹配的是字符 '[' 或者 ']'
| 是一个特殊字符,表示“或”操作,也就是说,它会匹配它左边或者右边的字符\\[ 和 \\] 是对特殊字符 '[' 和 ']' 的转义,因为在正则表达式中,'[' 和 ']' 有特殊的含义,通常用于定义字符集例如,'[abc]' 会匹配任何一个 'a','b' 或者 'c'
所以,如果想要匹配字符 '[' 或者 ']' 本身,需要使用 '\' 来进行转义所以,\\[|\\] 这个正则表达式会匹配任何一个 '[' 或者 ']'
regexp_replace
sql">select regexp_replace('[{"content":"这个挑战主题是我感兴趣的","id":"10080","extra":"{\"parent_id\":36382,\"project_id\":\"771,\"feed_survey\":51306}"},{"content":"喜欢这个音乐","id":"10081","extra":"{\"parent_id\":36382,\"project_id\":\"771,\"feed_survey\":51306}"},{"content":"这个内容类型(亲子、美食、时尚等)是我喜欢的","id":"10082","extra":"{\"parent_id\":36382,\"project_id\":\"771,\"feed_survey\":51306}"}]','\\[|\\]','') as split_table
将所有 “[” 或者 “]” 去掉
split
sql">select split('{111},{222},{333}','},'
) as split_table
-- ["{111","{222","{333}"]
将一行信息拆分为hive的list
转为多行
sql">select exploded_table.split_table
from (select split('{111},{222},{333}', '},') as split_table) t
lateral view explode(t.split_table) exploded_table as split_table-- split_table
-- {111
-- {222
-- {333}
LATERAL VIEW
Hive 中的一个功能,用于与表生成函数(如 explode)一起使用,以便在原始数据的每一行上应用表生成函数
并将输出作为虚拟表,这个虚拟表可以在查询的 FROM 子句中使用
LATERAL VIEW 会为原始表的每一行生成一行或多行
这对于处理数组和 map 类型的数据非常有用,因为它可以将这些复杂类型的数据展开成多行,每行对应数组或 map 的一个元素。
sql">SELECT t.id, v.word
FROM my_table t LATERAL VIEW explode(t.words) v AS word;
my_table 有两个列 id 和 words
my_table 的 words 列是一个数组
explode 函数会将这个数组展开成多行,每行对应数组的一个元素
然后,LATERAL VIEW 会将这些行作为一个虚拟表 v,并将数组元素作为 word 列
最后,查询返回 my_table 的 id 列和虚拟表 v 的 word 列
LATERAL VIEW 是一个强大的工具,可以处理复杂类型的数据