我有两个hive表table1和table2。两个表中都没有共同的列。
表1:
------
| id |
------
| 22 |
| 11 |
| 56 |
| 15 |
------
表2:
-------------
| from | to |
-------------
| 10 | 20 |
| 21 | 35 |
| 40 | 60 |
-------------
必须在表格2中检查table1的id列,以确定它属于哪个范围'来自'和'到' table2。
预期产出:
------------------
| id | from | to |
------------------
| 22 | 21 | 35 |
| 11 | 10 | 20 |
| 56 | 40 | 60 |
| 15 | 10 | 20 |
------------------
尝试使用交叉连接和where
条件并且能够获得所需的输出(但是想要避免交叉连接)。也尝试使用' exists'命令但在获取输出时遇到错误:
查询:
select id from table1 t1
where exists(select 1 from table2 t2
where t1.id between t2.from and t2.to) ;
但是错误为:subquery expression refers to both parent and subquery expressions and is not a valid join condition
。
任何建议最早都会有所帮助。
由于
答案 0 :(得分:1)
以下是逐步说明以获得所需结果:
hive> create table table1(id int);
hive> create table table2(from_ int, to_ int);
hive> select * from table1;
OK
22
11
56
15
hive> select * from table2;
OK
10 20
21 35
40 60
您的SQL应如下所示,以获得所需的结果:
select id,from_,to_
from table1 t1
left join table2 t2 on(t1.id between t2.from_ and t2.to_);
Output:
id from_ to_
22 21 35
11 10 20
56 40 60
15 10 20
答案 1 :(得分:0)
支持ON子句中的复杂表达式,从Hive 2.2.0开始(参见HIVE-15211,HIVE-15251)。在此之前,Hive不支持不是平等条件的连接条件。
因此,Hive中的唯一解决方案< 2.2.0似乎适用CROSS JOIN
+过滤器