hive--join
来源:互联网 发布:淘宝上最贵的东西 编辑:程序博客网 时间:2024/05/21 22:53
来源:http://www.cnblogs.com/xd502djj/archive/2013/01/18/2866662.html
举例子:
hive> select * from zz0;
111111
222222
888888
hive> select * from zz1;
111111
333333
444444
888888
hive> select * from zz0 join zz1 on zz0.uid = zz1.uid;
111111 111111
888888 888888
hive> select * from zz0 left outer join zz1 on zz0.uid = zz1.uid;
111111 111111
222222 NULL
888888 888888
hive> select * from zz0 right outer join zz1 on zz0.uid = zz1.uid;
NULL
111111 111111
NULL 333333
NULL 444444
888888 888888
hive> select * from zz0 full outer join zz1 on zz0.uid = zz1.uid;
NULL
111111 111111
222222 NULL
NULL 333333
NULL 444444
888888 888888
hive> select * from zz0 left semi join zz1 on zz0.uid = zz1.uid;
111111 111111
888888 888888
Hive怎样决定reducer个数?
Hadoop MapReduce程序中,reducer个数的设定极大影响执行效率,这使得Hive怎样决定reducer个数成为一个关键问题。遗憾的是Hive的估计机制很弱,不指定reducer个数的情况下,Hive会猜测确定一个reducer个数,基于以下两个设定:
1. hive.exec.reducers.bytes.per.reducer(默认为1000^3)
2. hive.exec.reducers.max(默认为999)
计算reducer数的公式很简单:
N=min(参数2,总输入数据量/参数1)
通常情况下,有必要手动指定reducer个数。考虑到map阶段的输出数据量通常会比输入有大幅减少,因此即使不设定reducer个数,重设参数2还是必要的。依据Hadoop的经验,可以将参数2设定为0.95*(集群中TaskTracker个数)。
这两种写法带来的值居然不是相等的,我一直以为理解这两种方式的写法是一样的,
但是统计的结果却是不一样的。
目前还没有搞清楚是什么原因,谁能那个搞清楚呢。
经过一层一层的查找,发现是由于子表(tmall_data_fdi_dim_main_auc)中存在重复的数据,当使用JOIN ON的时候,A,B表会关联出两条记录,应为ON上的条件符合;
而是用LEFT SEMI JOIN 当A表中的记录,在B表上产生符合条件之后就返回,不会再继续查找B表记录了,所以如果B表有重复,也不会产生重复的多条记录。
大多数情况下JOIN ON 和left semi on是对等的,但是在上述情况下会出现重复记录。大家以后可要小心。
- hive join
- hive join
- hive join
- hive join
- hive join
- hive join
- hive join
- hive join
- 【HIVE】join
- hive join
- Hive Join
- hive join
- Hive Join
- hive join
- HIVE JOIN
- hive--join
- hive join
- hive -f Hive join source
- 前端工程师应该选择什么操作系统
- 设计模式 工厂模式 从卖肉夹馍说起
- C语言学习------1.2运算符和表达式
- [WAMP网站开发] PHP连接MySQL数据库基础知识
- 了解CSS/CSS3原生变量var
- hive--join
- Android studio 使用之删除整个项目(包括项目空间)
- 详~谈~继承
- PHP发送异步请求方法总结
- python 文件简单操作
- iOS开发中之如何让项目支持https请求
- angularJs 个人初探笔记
- 欢迎使用CSDN-markdown编辑器
- 设计模式 单例模式