![Hive笛卡尔积,第1张 Hive笛卡尔积,第1张](/aiimages/Hive%E7%AC%9B%E5%8D%A1%E5%B0%94%E7%A7%AF.png)
Hive笛卡尔积
1
)笛卡尔集会在下面条件下产生
(1)省略连接条件
(2)连接条件无效
(3)所有表中的所有行互相连接
2
)案例实 ***
hive (default)> select empno, dname from emp, dept;
4
排序
4.1
全局排序(
Order By
)
Order By
:全局排序,只有一个
Reducer
1
)使用
ORDER BY
子句排序
ASC
(
ascend
)
:
升序(默认)
DESC
(
descend
)
:
降序
2
)
ORDER BY
子句在
SELECt
语句的结尾
3
)案例实 ***
(1)查询员工信息按工资升序排列
hive (default)> select * from emp order by sal;
(2)查询员工信息按工资降序排列
hive (default)> select * from emp order by sal desc;
4.2
按照别名排序
按照员工薪水的
2
倍排序
hive (default)> select ename, sal*2 twosal from emp order by twosal;
4.3
多个列排序
按照部门和工资升序排序
hive (default)> select ename, deptno, sal from emp order by deptno, sal;
4.4
每个
Reduce
内部排序(
Sort By
)
Sort By
:对于大规模的数据集
order by
的效率非常低。在很多情况下,并不需要全局排
序,此时可以使用
sort by
。
Sort by
为每个
reducer
产生一个排序文件。每个
Reducer
内部进行排序,对全局结果集
来说不是排序。
1
)设置
reduce
个数
hive (default)> set mapreduce.job.reduces=3;
2
)查看设置
reduce
个数
hive (default)> set mapreduce.job.reduces;
3
)根据部门编号降序查看员工信息
hive (default)> select * from emp sort by deptno desc;
4
)将查询结果导入到文件中(按照部门编号降序排序)
hive (default)> insert overwrite local directory
'/opt/module/data/sortby-result'
select * from emp sort by deptno desc;
4.5
分区(
Distribute By
)
Distribute By
:
在有些情况下,我们需要控制某个特定行应该到哪个
reducer
,通常是为
了进行后续的聚集 *** 作。
distribute by
子句可以做这件事。
distribute by
类似
MR
中
partition
(自定义分区),进行分区,结合
sort by
使用。
对于
distribute by
进行测试,一定要分配多
reduce
进行处理,否则无法看到
distribute
by
的效果。
1
)案例实 *** :
(1)先按照部门编号分区,再按照员工编号降序排序。
注意:
➢
distribute by
的分区规则是根据分区字段的
hash
码与
reduce
的个数进行模除后,
余数相同的分到一个区。
➢
Hive
要求
DISTRIBUTE BY
语句要写在
SORT BY
语句之前。
4.6 Cluster By
当
distribute by
和
sorts by
字段相同时,可以使用
cluster by
方式。
cluster by
除了具有
distribute by
的功能外还兼具
sort by
的功能。但是排序
只能是升序
排序,
不能指定排序规则为
ASC
或者
DESC
。
(1)以下两种写法等价
hive (default)> select * from emp cluster by deptno;
hive (default)> select * from emp distribute by deptno sort by deptno;
注意:
按照部门编号分区,不一定就是固定死的数值,可以是
20
号和
30
号部门分到一
个分区里面去。
评论列表(0条)