如何使用 HIVE 在 WHERE 语句中对 OR 子句进行分组

How do you group OR clause in WHERE statement using HIVE

我想通过以下方式查询

(statement1 AND statement2 AND (statement3 OR statement4 ))

这是我的配置单元查询,我确认它不起作用,因为它只有 returns statement3,而且我知道在某些情况下 statement4 是正确的

SELECT 
  cid,
  SUM(count) AS total_count
FROM
  count_by_day
WHERE
  time >= 1435536000
  AND time < 1436140800
  AND(
    cid = '4eb3441f282d4d657a000016'
    OR cid = '14ebe153121a863462300043d'
  )
GROUP BY
  cid

谁能告诉我哪里出了问题?谢谢

  1. count是一个真正的变量名吗?仔细检查一下。
  2. 还要检查以确保您的时间是数字类型,可能是 bigint。如果不是像这样将其转换为大整数:

    WHERE cast(time as bigint) >= 1435536000 AND cast(time as bigint) < 1436140800
    
  3. 尝试将您的 or 语句更改为 in 语句。

    SELECT 
     cid,
     SUM(count) AS total_count
    FROM
    count_by_day
    WHERE time >= 1435536000 AND time < 1436140800
    AND cid in('4eb3441f282d4d657a000016','14ebe153121a863462300043d')
    GROUP BY
    cid;
    

一次尝试每个更改,这样您就知道解决方法是什么。

查询 1:

Select A,B,C
From 
                Table1 t1
                Join 
                Table2 t2
                On 
                                T1.field1=T2.field1 OR 
                                T1.field2 = T2.field2

查询 2:

Select A,B,C
From 
                Table1 t1
                Join 
                Table2 t2
                On 
                                T1.field1=T2.field1 

Union 

Select A,B,C
From 
                Table1 t1
                Join 
                Table2 t2
                On 
                                T1.field2 = T2.field2

总是学会在关系数据库中使用 UNION 而不是 OR。尝试看看 union 是否能解决您的问题。

select cols
from table
where statement1 AND statement2 AND statement3

union all

select cols
from table
where statement1 AND statement2 AND statement4