hive中间接实现不等值连接<转>
2014-03-05 16:07
302 查看
由于hive中不支持不等值连接,给应用带来不便。
create tablelpx_test_a as
select id,class
from (
select 1 as id, 2 asclass from dual
union all
select 2 as id, 3 asclass from dual
union all
select 3 as id, 4 asclass from dual
union all
select 5 as id, 6 asclass from dual
) a;
create tablelpx_test_b as
select id,class
from (
select 1 as id, 3 asclass from dual
union all
select 2 as id, 3 asclass from dual
union all
select 3 as id, 3 asclass from dual
union all
select 5 as id, 6 asclass from dual
) a;
--oracle
SELECT a.*, b.id ASb_id, b.class AS b_class
FROM lpx_test_a a
LEFT OUTER JOIN lpx_test_b b
ON (a.id = b.id AND a.class < b.class);
--hive
SELECT a.*,
CASE WHEN a.class < b.class THEN b.idEND AS b_id,
CASE WHEN a.class < b.class THEN b.class END AS b_class
FROM lpx_test_a a
LEFT OUTER JOIN lpx_test_b b
ON (a.id = b.id);
create tablelpx_test_a as
select id,class
from (
select 1 as id, 2 asclass from dual
union all
select 2 as id, 3 asclass from dual
union all
select 3 as id, 4 asclass from dual
union all
select 5 as id, 6 asclass from dual
) a;
create tablelpx_test_b as
select id,class
from (
select 1 as id, 3 asclass from dual
union all
select 2 as id, 3 asclass from dual
union all
select 3 as id, 3 asclass from dual
union all
select 5 as id, 6 asclass from dual
) a;
--oracle
SELECT a.*, b.id ASb_id, b.class AS b_class
FROM lpx_test_a a
LEFT OUTER JOIN lpx_test_b b
ON (a.id = b.id AND a.class < b.class);
--hive
SELECT a.*,
CASE WHEN a.class < b.class THEN b.idEND AS b_id,
CASE WHEN a.class < b.class THEN b.class END AS b_class
FROM lpx_test_a a
LEFT OUTER JOIN lpx_test_b b
ON (a.id = b.id);
相关文章推荐
- datawindow简单的动态加列
- Windows Phone开发(39):漫谈关键帧动画上篇
- 如何将mysql表结构导出成Excel格式的(并带备注)
- C# 判断文件有没占用
- Gossip protocol(zz)
- Hierarchy--分层。单词意思即为分层视图。
- 证明算法复杂度
- 程序员应知——关注细节
- Toast 在service中出现的问题
- 静态内部类
- 监听返回键
- anagrams
- 什么时候加上android.intent.category.DEFAULT和LAUNCHER
- UIImageView
- hdu 2041 超级楼梯
- iphone 内存管理【转】
- JAX-B【转】
- 如何使用 Google app engine 建立soap应用
- C/C++结构体初始化
- C++ 默认构造函数