Hive - 过滤不属于多个范围/间隔的值

时间:2016-09-15 13:26:28

标签: sql hadoop hive hiveql

我有两个表,Table_A和Table_B。

表-A:

Value       
-----
1001        
2001        
3001        
4001        
5001

表-B:

Min             Max
---             ---
1000            2000
3000            4000
5000            6000
7000            8000
9000            10000

我需要从Table_A中获取那些不在主表_B中的任何间隔/范围之间的记录。

预期结果:

Value
-----
2001
4001

请让我知道编写Hive查询以获得预期结果的方法。

2 个答案:

答案 0 :(得分:1)

您可以使用cross join和聚合:

执行此操作
select a.value
from table_a a cross join
     table_b b
group by a.value
having sum(case when a.value between b.min and b.max then 1 else 0 end) = 0;

答案 1 :(得分:0)

这是另一个使用join和NOT IN语句:

SELECT value
FROM table_a
WHERE value NOT IN
(SELECT value
 FROM table_a
 INNER JOIN table_b
 ON table_a.value BETWEEN table_b.min AND table_b.max)

在这里测试:http://sqlfiddle.com/#!9/a6685c/1