hive 的 lateral view用法以及注意事项
1. lateral view 簡(jiǎn)介
??hive函數(shù) lateral view 主要功能是將原本匯總在一條(行)的數(shù)據(jù)拆分成多條(行)成虛擬表,再與原表進(jìn)行笛卡爾積,從而得到明細(xì)表。配合UDTF函數(shù)使用,一般情況下經(jīng)常與explode函數(shù)搭配,explode的操作對(duì)象(列值)是 ARRAY 或者 MAP ,可以通過(guò) split 函數(shù)將 String 類(lèi)型的列值轉(zhuǎn)成 ARRAY 來(lái)處理。
【語(yǔ)法格式】
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';【說(shuō)明】
col_A,col_B,col_C: 都是原表 test_table 的列(字段);
tmp_table:explode形成的新虛擬表,可以不寫(xiě);
tmp_col:explode 形成的新列(字段);
2. 實(shí)操
2.1 建表(hive)
??創(chuàng)建一個(gè)“部門(mén)利潤(rùn)表”,按照日期分區(qū),一共三個(gè)字段,“部門(mén)編號(hào)”、“部門(mén)層級(jí)樹(shù)”、“利潤(rùn)(萬(wàn)元)”。DDL語(yǔ)句如下:
drop table if exists zero_test_01: create table zero_test_01 (DEPT_NO string comment'部門(mén)編號(hào)',DEPT_TREE string comment'部門(mén)層級(jí)樹(shù)',BENIFIT int comment'利潤(rùn)(萬(wàn)元)' ) comment '測(cè)試-部門(mén)利潤(rùn)表' partitioned by (deal_date string comment '日期分區(qū)' ) stored as orc;【字段說(shuō)明】:DEPT_TREE 字段是按照“一級(jí)部門(mén)編號(hào).二級(jí)部門(mén)編號(hào).三級(jí)部門(mén)編號(hào)” 模式進(jìn)行取值的。
2.2 插入數(shù)據(jù)
??往“20220516”分區(qū)中插入三條數(shù)據(jù)。
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;| 101 | A.A1.101 | 50 |
| 102 | A.A1.102 | 20 |
| 201 | A.A2.201 | 80 |
2.3 轉(zhuǎn)成多行
??利用 lateral view 和 explode 函數(shù)將 DEPT_TREE(部門(mén)層級(jí)樹(shù)) 列按照“.”分割轉(zhuǎn)成多行,通過(guò)結(jié)果可以看到,lateral view函數(shù)將 “部門(mén)層級(jí)樹(shù)” 字段炸開(kāi)進(jìn)行了擴(kuò)展,每個(gè)部門(mén)(DEPT_NO)都有與之對(duì)應(yīng)的利潤(rùn)(BENIFIT),從三行數(shù)據(jù)直接變成9行數(shù)據(jù)。
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';| A | 80 |
| A2 | 80 |
| 201 | 80 |
| A | 20 |
| A1 | 20 |
| 102 | 20 |
| A | 50 |
| A1 | 50 |
| 101 | 50 |
2.4 匯總求和
??對(duì)部門(mén)利潤(rùn)進(jìn)行向上匯總求和,可以看到每個(gè)部門(mén)的總利潤(rùn)。
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;| A | 150 |
| A1 | 70 |
| A2 | 80 |
| 101 | 50 |
| 102 | 20 |
| 201 | 80 |
總結(jié)
以上是生活随笔為你收集整理的hive 的 lateral view用法以及注意事项的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 案例 | 中央企业数字化转型实践
- 下一篇: later与late 的区别