蜂巢-每个日期选择不同的唯一ID,而无需创建外部表或使用JOINS

时间:2018-11-29 06:30:57

标签: hive bigdata hiveql hadoop2

我正在处理包含以下列的数据集:

unique_ID       Date
a               2018_09_08
a               2018_09_18
a               2018_09_28
d               2018_09_08

我希望选择在所有三个日期(即2018_09_08、2018_09_18和2018_09_28)上出现的唯一ID。

我的输出应该只是'a'。

解决此问题的方法很长-每个日期提取unique_ID,并在所有三个日期的顶部创建外部表,然后对三个表使用join获取所有三个日期的唯一ID。我相信应该有更好的解决方案,因为在这种情况下,我们只有3个日期,以后可能会增加,因此我正在寻找更通用的解决方案。

这是我编写的查询-select distinct(unique_ID) from table_name where Date = '2018_09_08' and Date = '2018_09_18' and Date = '2018_09_28',它返回null。

我也在尝试编写子查询,但是我怀疑HIVE在这种情况下是否支持此类子查询。这是我写的:

select count(distinct(unique_ID)) from (
(select distinct(unique_ID) from table_name where Date = '2018_09_08') a
union all
(select distinct(unique_ID) from table_name where Date = '2018_09_18') b
union all
(select distinct(unique_ID) from table_name where Date = '2018_09_28') c
);

并且我收到以下解析错误:FAILED: ParseException line 3:0 missing ) at 'union' near ')' line 4:87 missing EOF at 'b' near ')'

在这种情况下,我们如何获得Unique_ID?

1 个答案:

答案 0 :(得分:2)

这可以通过group byhaving完成。

select unique_id,count(distinct date)
from tbl
where date in ('2018_09_08','2018_09_18','2018_09_28')
group by id 
having count(distinct date) = 3