当表中的数据在给定范围内时,我需要一个查询来返回布尔值。
假设表 顾客 [用户ID,名称,日期,产品已购买]
我正在尝试:
选择存在的情况(
选择日期,计数(*) 来自客户
“2015-08-03”和“2015-08-05”之间的日期
)
然后施放(1作为BIT)
else case(0为BIT)结束;
这是在“选择日期”附近抛出错误。 然而,奇怪的部分是内部查询运行完全正常。
我想知道我是否错过了这里的东西!
答案 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”应该没问题