union用於聯合多個select語句的結果集,合併為乙個獨立的結果集,結果集去重。
union all也是用於聯合多個select語句的結果集。但是不能消除重複行。現在hive只支援union all。
這裡需要特別注意,每個select語句返回的列的數量和名字必須一樣,同時字段型別必須完全匹配,否則會丟擲語法錯誤。
欄位名稱一樣,並不是必須完全一樣,比如下面這個例子:
例一:欄位名完全一樣
select a,b,c from t1
union all
select a,b,c from t2
例二:欄位名前面有表名不一致,其他一致
select t1.a,t2.b,t2.c from t1
inner join t2 on t1.a = t2.a
union all
select t3.a,t4.b,t4.c from t3
inner join t4 on t3.a = t4.a
這兩個例子都不報錯
但例三:第乙個查詢第二個字段重新命名為k,與第二個查詢欄位名不一樣了,此時會報錯
select a,'' as k,c from t1
union all
select a,b,c from t2
會報編譯錯誤
編譯錯誤:semanticexception the abstract syntax tree is null
hql裡面union和union all的區別
union和union all的區別是,union會自動壓縮多個結果集合中的重複結果,而union all則將所有的結果全部顯示出來,不管是不是重複。注意,原來表裡面的重複行也會被壓縮。union 對兩個結果集進行並集操作,不包括重複行,同時進行預設規則的排序。使用union和union all必須...
hive通過union all 實現 join
對於join操作,需要shuffle,在reduce端進行。所以對於資料量超大,比如兩個表記錄條數均在億級別的,往往會導致計算時間過長。在reduce 關聯時 兩個表的key也是需要通過增加標識區別的 那如何可以高效的完成呢?也就是如果我們把標識去掉,就是兩個表成為乙個大表,中間會少些耗時的邏輯,那...
hive裡面時間相關的函式的操作
show functions看一下,發現還蠻多的,需要注意天月時分秒之類的返回的都是數字,不會自動補0,可以使用lpad補全 year 獲取年 month 獲取月 weekofyear 獲取周 day 獲取日 hour 獲取小時 minute 獲取分鐘 second 獲取秒 datediff a,b...