如何在hive中使用带有不等式条件的内部查询

时间:2016-08-06 16:01:38

标签: hive hiveql

我有以下查询,其内部查询具有取决于外部查询的不等式条件。看起来HIVE不支持通过不等式条件从内部查询引用外部查询。如何在HIVE中编写此查询?

SELECT
 *
FROM    
 A
WHERE NOT EXISTS
(
 SELECT * 
 FROM
    B
WHERE
    B.cust_id = A.cust_id
    AND datediff(A.year_month, B.year_month) < 365 * 3
)

2 个答案:

答案 0 :(得分:0)

Hive不支持您正在使用的功能。但是可以重写查询:

  SELECT *
  FROM A
       LEFT JOIN B ON B.cust_id = A.cust_id
  WHERE (datediff(A.year_month, B.year_month) >= 365 * 3) --note >= here
        OR B.cust_id is NULL --is not joined

答案 1 :(得分:0)

Hive会接受此查询吗?

SELECT ab.*
FROM (SELECT a.*, b.min_year_month
      FROM a JOIN
           (SELECT b.cust_id, MAX(b.year_month) as min_year_month
            FROM b
            GROUP BY b.cust_id
           ) b
           ON a.cust_id = b.cust_id
     ) ab
WHERE datediff(A.year_month, B.min_year_month) < 365 * 3;

我认为这是正确的逻辑。这将返回AB中所有记录在过去三年内的所有记录。

关键思想是使用聚合和子查询来获取必要的数据。

如果您真的想要B中的记录以及记录,请使用其他JOIN来获取记录。