Oracle中的connect by 转成hive的 lateral view explode
2021/8/13 2:08:41
本文主要是介绍Oracle中的connect by 转成hive的 lateral view explode,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 首先我们先来看一下业务sql
select t.dept,t.day,count(*) from( select regexp_substr(dept), '[^,]+', 1, level) dept,day from ( select wm_concat(dept) dept,day from baseinfo group by day ) m connect by level<= regexp_count(dept,',') + 1 ) t group by t.dept,t.day
- baseinfo 表中的数据格式如下,仅用来举例说明
dept day 10001,10002 2021-08-12 10003 2021-08-10 2021-08-10 10001,10002 2021-08-14 2021-08-14 10024,10046,10024,10043,10011,10015, 2021-08-14
- 对于oracle sql中的函数分析
wm_concat(dept),day ... group by day ,意思就是根据day来分组,对dept分组内所有值连接成一个集合
regexp_substr(字符串,正则,从左开始偏移-默认1-表示字符串的起点,获取第几个根据正则分割出来的组,默认'c'区分大小写匹配)
regexp_count(字符串1,字符串2) 返回要匹配的字符串2 在字符串1中出现的次数,没有则返回 0
regexp_substr(dept), '[^,]+', 1, level) from table connect by level<= 5 ,要输出 level个子串,这里小于等于5,没有5个就为null。显然多余的null不是我们想要的结果
select regexp_substr(dept), '[^,]+', 1, level),day from table connect by level<= regexp_count(dept,',') + 1 ,这里会根据自谦的子查询中的时间分组,依次返回 dept 集合中的每个子串
- 根据以上分析,得出hive sql 如下(sql 仅供参考)
select a.dept,a.day,count(*) from( select dept,day from( select split(concat_ws(',',collect_list(m.dept)),',') dept,day from baseinfo m group by day ) t lateral view explode(dept) c as dept )a group by a.dept,a.day
最后关于hive的 lateral view explode 介绍可以看这篇博主的博文
https://blog.csdn.net/guodong2k/article/details/79459282
这篇关于Oracle中的connect by 转成hive的 lateral view explode的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-29uni-app 中使用 Vant Weapp,怎么安装和配置npm ?-icode9专业技术文章分享
- 2024-12-27Nacos多环境配置学习入门
- 2024-12-27Nacos快速入门学习入门
- 2024-12-27Nacos快速入门学习入门
- 2024-12-27Nacos配置中心学习入门指南
- 2024-12-27Nacos配置中心学习入门
- 2024-12-27Nacos做项目隔离学习入门
- 2024-12-27Nacos做项目隔离学习入门
- 2024-12-27Nacos初识学习入门:轻松掌握服务发现与配置管理
- 2024-12-27Nacos初识学习入门:轻松掌握Nacos基础操作