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