我需要一个查询返回布尔值时,有表中的数据在给定的范围。假定表customer[用户id、名称、日期、购买的产品]我想做的是:存在时选择案例(从客户处选择日期、计数(*)其中日期介于“2015-08-03”和“2015-08-05”之间)然后铸造(1个钻头)else case(0为位)end;这在“选择日期”附近引发了一个错误。然而,奇怪的是内部查询运行得非常好。我想知道我是否遗漏了什么!
xhv8bpkk1#
有什么更直截了当的事吗。
select case when count(*) >0 then 1 else 0 end as HIT from ... where ...
这样,您就不必担心hive假设exists意味着一个相关的子查询,自动转换为mapjoin,即一个java hashmap被洗牌到第二行mappers作业,等等。这不完全是您的用例。那么,计算准确的计数就没有用了,因此可以根据需要对查询进行细化
select case when count(*) >0 then 1 else 0 end as HIT from (select ... from ... where ... limit 1) X
[编辑]配置单元中没有“位”数据类型。但是如果您只需要一个返回标志(零/非零),那么默认的“int”应该是可以的
1条答案
按热度按时间xhv8bpkk1#
有什么更直截了当的事吗。
这样,您就不必担心hive假设exists意味着一个相关的子查询,自动转换为mapjoin,即一个java hashmap被洗牌到第二行mappers作业,等等。这不完全是您的用例。
那么,计算准确的计数就没有用了,因此可以根据需要对查询进行细化
[编辑]配置单元中没有“位”数据类型。但是如果您只需要一个返回标志(零/非零),那么默认的“int”应该是可以的