当表具有指定范围内的数据时返回布尔值

时间:2015-08-07 00:52:17

标签: hadoop apache-spark hive bigdata hiveql

当表中的数据在给定范围内时,我需要一个查询来返回布尔值。

假设表 顾客 [用户ID,名称,日期,产品已购买]

我正在尝试:

  

选择存在的情况(

     

选择日期,计数(*)   来自客户

     

“2015-08-03”和“2015-08-05”之间的日期

     

     

然后施放(1作为BIT)

     

else case(0为BIT)结束;

这是在“选择日期”附近抛出错误。 然而,奇怪的部分是内部查询运行完全正常。

我想知道我是否错过了这里的东西!

1 个答案:

答案 0 :(得分:0)

如何更直接的事情,例如。

select case when count(*) >0 then 1 else 0 end as HIT
from ... where ...

这样你就不必担心Hive,假设EXISTS意味着一个相关的子查询,自动翻译成MapJoin,即一个洗牌到第二行Mappers作业的Java HashMap,等等。不完全是你的用例

然后计算确切的计数没用,所以查询可以改进为

select case when count(*) >0 then 1 else 0 end as HIT
from
 (select ... from ... where ... limit 1) X

[编辑] Hive中没有“bit”数据类型。但是如果你只想要一个返回标志(零/非零)

,默认的“int”应该没问题