UNION的使用
union用于联合多个select语句的结果集,合并为一个独立的结果集。当前只支持UNION ALL(bag union)。不能消除重复行,每个select语句返回的列的数量和名字必须一样,否则会抛出语法错误。
select_statement UNION ALL select_statement UNION ALL select_statement.....
如果必须对union的结果集做一些额外的处理,整个语句可以被嵌入在from子句中。
select * from from(
select_statement
UNION ALL
select_statement
) unionResult
Hive子查询
子查询语法
select .... from (subquery) name ...
Hive只在from子句中支持子查询。子查询必须给定一个名字,因为每个表在from子句中必须有一个名字。子查询的查询列表的列,必须有唯一的名字。子查询的查询列表在外面的查询是可用的,就向表的列。子查询也可以一个UNION查询表达式,Hive支持任意层次的子查询。
select col from (
select a+b as col from t1
) t2;
select t3.col from(
select a+b as col from t1
UNION ALL
select c+d as col from t2
) as t3;
在
hive
中
,
union
和
union
all都是对两个
子查询
的结果
合并
,不过还是有区别的,
union
会对两个
子查询
的结果去重
合并
,而
union
all不会对
子查询
结果去重处理。
接下来验证通过实战进行验证,下面是两张表的数据。
Hive
1.2.0之前的版本仅支持
UNION
ALL,其
中
重复的行不会被删除。
Hive
1.2.0和更高版本
中
,
UNION
的默认行为是从结果
中
删除重复的行。
优化时,把
hive
sql当做map reduce程序来读,会有意想不到的惊喜。
理解hadoop的核心能力,是
hive
优化的根本。这是这一年来,项目组所有成员宝贵的经验总结。
长期观察hadoop处理数据的过程,有几个显著的特征:
1.不怕数据多,就怕数据倾斜。
2.对jobs数比较多的作业运行效率相对比较低,比如即...
union
的巧妙用法,
使用
union
也可以横向
合并
sql查询结果
我们都知道
union
是纵向连接查询结果,join是横向,但是用
union
all连接大家试过吗?
恢复菜鸟代码如下:
select ep.productid,productname,count(st.tduserid),count(distinct sl.tduserid),count(distinct sn.tduserid),a...
首先
union
去重,
union
all 不去重,
union
能对多行相同的数据只留一行。但是有些实际应用
中
union
无法去重,却又找不到原因,往往是因为查询语句与建表语句的数据格式不同,比如建表时,money 字段为bigint类型,然后查询语句
中
sum(xxx) money,得到的是Int类型,如果两个重复数据进行
union
时,即使两个数据都是Int类型,也不会进行去重,需要都与建表语句的类型一致才能去重。
关于 sql 语句的执行顺序网上有很多资料,但是大多都没进行验证,并且很多都有点小错误,尤其是对于 select 和 group by 执行的先后顺序,有说 select 先执行,有说 group by 先执行,到底它俩谁先执行呢?
今天我们通过 explain 来验证下 sql 的执行顺序。
在验证之前,先说结论,
Hive
中
sql 语句的执行顺序如下:
from .. where .. join .. on .. select .. group by .. select .. having ..
Hive
中
的
Union
查询已经
使用
过多次,但在
使用
之前都没有系统的学习过
Union
的语法格式(虽然在
使用
过程
中
没有出现过问题),所以现在将这一点补上。
Union
的语法格式如下:
-----------------------------------------Oracle
子查询
和exists及并集
union
和
union
all的
使用
-----------------------------------------------
子查询
:在一个查询的内部还包括另一个查询,则此查询称为
子查询
。Sql的任何位置都可以加入
子查询
。 范例:查询比7654工资高的雇员分析:查询出7654...