用法:第一个参数为待切割的变量,第二个参数为切割符号
注意:所有正则表达式中的预定义字符比如?,},|,逗号,分号等需要在这里用\进行反转义才能表达本意 。比如正则表达式中w表示匹配字母,所以也属于预定义字符,单独的w表示匹配的是字母w,而\w才表示匹配字母 。
三、经典实战案例
1. 案例 A
需求背景:hive表中某字段tag按行存储了每个用户的多个标签,但如果想要计算每个标签下的用户数,需要将tag里的userID、tag、weight字段信息扩展抽取出来 。
字段tag的数据取值如下:
思路整理:
1. userID 可用 get_json_object 函数直接取出;
2. tag和weight提取
a. 先取出每个tags的子json结构 。用 get_json_object 函数取出tags,然后用正则和split处理成map格式,用 LATERAL VIEW explode 函数以行展开;
b. 解析子json结构的tag和weight 。用 LATERAL VIEW json_tuple 函数解析并以行展开
以下为可在 Hive 环境里执行的代码:
小tips:上面案例的数据格式是json数据的常见格式,后续重复遇到与之高度类似的json结构概率极大,到时可以直接套用上述中的代码思路进行快速解析,因此建议收藏以上代码 。
2. 案例 B(难度升级)
该题比案例A 难度升高,具体为:
1)json结构中object的K-V值不固定;
2)dataInfo对应的值为字符串,由一个带双引号的json组成 。双引号的存在导致无法正常使用get_json_object函数
原数据:
思路整理:
【手把手教你如何用SQL解析复杂JSON】1)先通过正则函数处理dataInfo对应的值的双引号,以正常的使用get_json_object函数
2)对于object的K-V值不固定的情况,可以通过冒号分割截取;
代码:
以上便是全部内容啦 。相信大家在阅读完本文后,如果再遇到复杂的json解析问题,至少可以做到不再焦灼了,可以直接套用以上的解析模版和思路进行解析 。所以,记得收藏或者点个在看哦~
推荐阅读
- 成本高、获客难,餐饮企业如何在微信生态中乘风破浪?
- 办公室喝茶用什么茶具,如何正确清洁茶具
- 如何在Linux安装防火墙,你可能不会见到这么详细的教程。
- 如何优化我们的电脑
- 宋江带领梁山好汉招安的原因 如果宋江不接受招安的后果
- 曼松贡茶的口感如何,把逍遥化进曼松
- 有机农药如何划分呢
- 清朝宗室爵位继承制度 清朝的爵位等级如何世袭
- 如何去掉封闭性粉刺?
- 水泡型疱疹如何治疗