日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hive 的 lateral view用法以及注意事项

發(fā)布時間:2024/3/12 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hive 的 lateral view用法以及注意事项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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)

??創(chuàng)建一個“部門利潤表”,按照日期分區(qū),一共三個字段,“部門編號”、“部門層級樹”、“利潤(萬元)”。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 '日期分區(qū)' ) stored as orc;

【字段說明】:DEPT_TREE 字段是按照“一級部門編號.二級部門編號.三級部門編號” 模式進行取值的。

2.2 插入數據

??往“20220516”分區(qū)中插入三條數據。

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

總結

以上是生活随笔為你收集整理的hive 的 lateral view用法以及注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。