上一篇文章《hive内置函数(二)行转列函数》我们介绍了hive中行转列相关的内置函数,这篇文字我们相反操作,介绍下列转行相关的内置函数。
在hive中列转行对应的内置函数主要有3个,分别是:
Split(str, separator) EXPLODE(col) LATERAL VIEW
下面我们分别介绍下这3个函数。
1)split函数
这个函数函简单,就是根据分隔符来把某个值切割成多个,下面我们演示下:
#插入演示数据 insert into school_user values(5,"李四,王五,赵六,田七"); #查询下结果 select * from school_user;
然后我们使用split函数切割下id为5的行
select split(username,",") from school_user where id = 5;
最后这里的结果会变成数组的形式。
2)explode函数
这个explode函数主要是将复杂的array或者map结构拆分成多行,下面我们演示下:
select explode(split(username,",")) from school_user where id = 5;
3)lateral view函数
这里的lateral view函数主要是用于和split,explode等IDTF函数一起使用,他能够将一行数据拆成多行数据,并且可以在对拆分后的数据进行聚合操作。下面我们演示下:
这里的案例我们参考网上的来源,首先我们创建一张部门层级表:
create table zero_test_01 ( DEPT_NO string comment'部门编号', DEPT_TREE string comment'部门层级树', BENIFIT int comment'利润(万元)')comment '测试-部门利润表'partitioned by (deal_date string comment '日期分区' )stored as orc;
然后我们向这个表里面插入几条数据:
alter table zero_test_01 drop if exists partition (DEAL_DATE='20220516'); insert into table zero_test_01 partition (DEAL_DATE='20220516')select '101','A.A1.101',50; insert into table zero_test_01 partition (DEAL_DATE='20220516')select '102','A.A1.102',20; insert into table zero_test_01 partition (DEAL_DATE='20220516')select '201','A.A2.201',80;
最后我们使用lateral view函数来查询:
select tmp_dept_no as DEPT_NO, BENIFITfrom zero_test_01 LATERAL VIEW explode (split(DEPT_TREE, '\\.')) tmp as tmp_dept_nowhere DEAL_DATE='20220516';
备注:
1、对于lateral view我的使用比较少,后续在真实的业务场景的时候再专门写一篇关于它的文章介绍下。
还没有评论,来说两句吧...