[1179]hive的lateral view用法
创始人
2024-03-23 06:47:43
0

文章目录

    • 1. lateral view 简介
    • 2. 实操
      • 2.1 建表(hive)
      • 2.2 插入数据
      • 2.3 转成多行
      • 2.4 汇总求和

1. lateral view 简介

hive函数 lateral view 主要功能是将原本汇总在一条(行)的数据拆分成多条(行)成虚拟表,再与原表进行笛卡尔积,从而得到明细表。配合UDTF函数使用,一般情况下经常与explode函数搭配,explode的操作对象(列值)是 ARRAY 或者 MAP ,可以通过 split 函数将 String 类型的列值转成 ARRAY 来处理。

【语法格式】

select col_A,col_B,tmp_table.tmp_col 
from test_table 
lateral view explode(split(col_C,'分隔符')) tmp_table as tmp_col
where partition_name='xxx';

【说明】
col_A,col_B,col_C: 都是原表 test_table 的列(字段);
tmp_table:explode形成的新虚拟表,可以不写;
tmp_col:explode 形成的新列(字段);

2. 实操

2.1 建表(hive)

创建一个“部门利润表”,按照日期分区,一共三个字段,“部门编号”、“部门层级树”、“利润(万元)”。DDL语句如下:

drop table if exists zero_test_01:
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;

【字段说明】:DEPT_TREE 字段是按照“一级部门编号.二级部门编号.三级部门编号” 模式进行取值的。

2.2 插入数据

往“20220516”分区中插入三条数据。

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;
DEPT_NO(部门编号)DEPT_TREE(部门层级树)BENIFIT(利润[万元])
101A.A1.10150
102A.A1.10220
201A.A2.20180

2.3 转成多行

利用 lateral view 和 explode 函数将 DEPT_TREE(部门层级树) 列按照.分割转成多行,通过结果可以看到,lateral view函数将 “部门层级树” 字段炸开进行了扩展,每个部门(DEPT_NO)都有与之对应的利润(BENIFIT),从三行数据直接变成9行数据。

select tmp_dept_no as DEPT_NO, BENIFIT
from zero_test_01 
LATERAL VIEW explode (split(DEPT_TREE, '\\.')) tmp as tmp_dept_no
where DEAL_DATE='20220516';
DEPT_NOBENIFIT
A80
A280
20180
A20
A120
10220
A50
A150
10150

2.4 汇总求和

对部门利润进行向上汇总求和,可以看到每个部门的总利润。

select tmp_dept_no as DEPT_NO, sum(BENIFIT) as BENIFIT
from zero_test_01
LATERAL VIEW explode (split(DEPT_TREE, '\\.')) tmp as tmp_dept_no
where DEAL_DATE='20220516'
group by tmp_dept_no;
DEPT_NOBENIFIT
A150
A170
A280
10150
10220
20180

参考:https://blog.csdn.net/weixin_41579433/article/details/124799660

相关内容

热门资讯

深交所参与建设的香港综合基金平... 7月3日,由香港交易及结算所有限公司(以下简称港交所)牵头、深圳证券交易所(以下简称深交所)下属深圳...
【工业硅】盘面涨跌反复,市场情...  在经历了昨日期货行情大幅上行后,今日工业硅期货行情转弱运行,盘面价格稍有松动!7月3日,截止15:...
四预警齐发!我国多地高温 四川... 01高温黄色预警中央气象台7月3日18时继续发布高温黄色预警:预计7月4日白天,华北南部、黄淮、江淮...
吉宏股份(02603)截至6月... 吉宏股份(02603)发布公告,截至2025年6月30日,公司通过回购专用证券账户以集中竞价交易方式...
夏天白手臂的秘密武器是…… 转自:扬子晚报扬子晚报网7月3日讯(记者 薄云峰)这两天,江苏多地持续高温,户外阳光刺眼,紫外线特别...
甘肃天水一幼儿园部分幼儿血铅异... 记者3日从甘肃省天水市获悉,1日,天水市麦积区市场监督管理局等部门接群众反映后,查获一起某幼儿园违规...
安诺其(300067.SZ):... 格隆汇7月3日丨安诺其(300067.SZ)公布,控股股东、实际控制人纪立军先生的一致行动人张烈寅女...
长虹美菱拟斥1.5亿至3亿元回... 2025年7月4日,长虹美菱发布回购股份报告书,公司将使用自有资金和自筹资金,通过集中竞价交易方式回...
东方卫视直击:日本参议院选举拉... 日本国会参议院选举7月3日发布公告,为期17天的竞选活动就此拉开序幕。这是石破内阁成立以来的首次参议...