Hive的union和join操作


建表語句:

create table  tb_in_base
(
   id  bigint,
   devid bigint,
    devname string 
) partitioned by (job_time bigint) row format delimited fields terminated by ',';
 
create table  tb_in_up
(
   id  bigint,
   devid bigint,
   devname string 
) partitioned by (job_time bigint) row format delimited fields terminated by ',';
場景一:單表子查詢沒有指定表別名
語句:select * from (select id,devid,job_time from tb_in_base) ;

執行過程:

 

提示需要指定子查詢源。
加上表別名:
語句:select * from (select id,devid,job_time from tb_in_base) a;
執行過程:

 

 

加了表別名后可以正常輸出子查詢中的數據。
結果分析:在hive中若有子查詢必須指定子查詢的表別名
場景二:單表查詢外圍字段比子查詢少一個
語句: select id,devid from (select id,devid,job_time from tb_in_base) a; 
執行過程:

 

 

結果分析:輸出外圍指定字段的數據 。
場景三:兩張表進行union all
語句:
 select a.id,a.devid from (select a.id,a.devid,a.job_time from tb_in_base a union all select b.id,b.devid,b.job_time from tb_in_up b) a;
執行過程:

 

 

結果分析:兩張表進行union all 取相同的字段名稱,可正常輸出指定數據內容,且結果為兩張表的結果集
場景四:兩張表進行union 
 
語句:
 
 select a.id,a.devid from (select a.id,a.devid,a.job_time from tb_in_base a union all select b.id,b.devid,b.job_time from tb_in_up b) a;
 
執行過程:

 

結果分析:hive 不支持union 

 

場景五:外圍使用count、sum 統計id 
語句:
select count(a.id),sum(a.id)  from (select a.id,a.devid,a.job_time from tb_in_base a union all select b.id,b.devid,b.job_time from tb_in_up b) a;
執行過程:

 

 

結果分析:兩表直接進行union all 可以使用count、sum 等聚合函數 
 
場景六:union all 時使用count、sum 、max等 聚合函數

結果分析:union all 時不能使用count、sum 、max等 聚合函數,單表可以進行聚合函數使用,如下圖

 

 

場景七:left join 是否可以使用max、count、sum 等函數 
語句:
select max(a.id),min(b.id),sum(a.job_time),count(a.id) from tb_in_base a join tb_in_up b on (a.id=b.id);
執行過程:

 

 

結果分析:在left join 中可以使用max、count等聚合函數。
總結分析
1. 子查詢相當於表名,使用 from 關鍵字需要指定真實表名或表別名。
2. hive 不支持union ,只支持union all 
3. 子查詢中使用union all 時,在子查詢里不能使用count、sum 等 聚合函數 
4. 兩表直接進行union all 可以使用count、sum 等聚合函數 
5. 兩張表進行union all 取相同的字段名稱,可正常輸出指定數據內容,且結果為兩張表的結果集


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM