【数据库】lateral view explode函数的坑

         之前小白有写过一篇文章是高效的解析字符串,里面讲到过一个方法:lateral view explode

最近小白发现,这个函数在使用时,还是有一些坑的,这里小白做一个总结。

在正常解析一个有值的字符串时,用lateral view explode是完全ok的,但是,当遇到该字符串为空时,如果在使用该函数,就会导致该条记录消失。具体场景如下:

sidfilterlist
46NULL

 

这时,用lateral view explode解析:

select a.sid
	   ,b.filtertype --筛选类型
  	   ,b.filtername --筛选内容
  	   ,b.filtertitle --筛选子类型
  	   ,b.filtersubtype --来源:1搜索;2筛选;3url传参
  	   ,b.filterid --筛选id
from (select sid,filterlist
        from dw_htlbizdb.tmp_hotel_list_bottom01 
	  lateral view explode(split(filterlist,'\\;'))t as flist
     )a
lateral view json_tuple(flist,'filtername') b as
  filtername
  where sid = 49
  ;

结果如下:

sidfiltername
无记录

这样的结果就会导致我们漏掉一部分用户的浏览信息,在统计浏览量时数据缺失,结果与实际偏小。

这时,就要用到lateral view outer explode

lateral view explode这个UDTF转换的Array为空的记录,自动被过滤掉了,如果想要保留记录,需要加上outer关键字。

select a.sid
	   ,b.filtertype --筛选类型
  	   ,b.filtername --筛选内容
  	   ,b.filtertitle --筛选子类型
  	   ,b.filtersubtype --来源:1搜索;2筛选;3url传参
  	   ,b.filterid --筛选id
from (select sid,filterlist
        from dw_htlbizdb.tmp_hotel_list_bottom01 
	  lateral view outer explode(split(filterlist,'\\;'))t as flist
     )a
lateral view json_tuple(flist,'filtername') b as
  filtername
  where sid = 49
  ;

结果为:

sidfiltername
46NULL

这才是最真实的浏览记录。大家在使用时,也要注意哦~

 

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值