sql~ 将一行转为多行

转义字符

在正则表达式中,\\[|\\] 是一个模式,它匹配的是字符 '[' 或者 ']'
| 是一个特殊字符,表示“或”操作,也就是说,它会匹配它左边或者右边的字符

\\[ 和 \\] 是对特殊字符 '[' 和 ']' 的转义,因为在正则表达式中,'[' 和 ']' 有特殊的含义,通常用于定义字符集

例如,'[abc]' 会匹配任何一个 'a','b' 或者 'c'
所以,如果想要匹配字符 '[' 或者 ']' 本身,需要使用 '\' 来进行转义

所以,\\[|\\] 这个正则表达式会匹配任何一个 '[' 或者 ']'

regexp_replace

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

select split(
   '{111},{222},{333}',
    '},'
) as split_table
-- ["{111","{222","{333}"]

将一行信息拆分为hive的list

转为多行

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 的一个元素。

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 是一个强大的工具,可以处理复杂类型的数据

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值