Hive 中给定记录集的最小和最大日期

Min and Max dates from the given set of records in Hive

全部, 我需要在 Hive 中获取一组记录的最小和最大日期。我的数据看起来像这样。

Key    start_date    end_date
----   ----------    ---------      
111    01-01-2017    06-30-2017
111    07-01-2017    07-31-2017
111    09-01-2017    09-30-2017
111    10-01-2017    10-20-2017
111    11-01-2017    11-30-2017

输出我期望的是

key   start_date    end_date
---   ---------     --------
111   01-01-2017    07-31-2017
111   09-01-2017    10-20-2017
111   11-01-2017    11-30-2017

基本上,每当日期范围出现中断时,我都需要将其写为新记录。

我试图获取结束日期和开始日期之间的日期差异,如果它大于 1,我将其标记为新的 record.But,我不确定之后如何拆分记录.非常感谢任何帮助或指导。

预期结果

key   start_date    end_date
111   01-01-2017    07-31-2017
111   09-01-2017    10-20-2017
111   11-01-2017    11-30-2017

这是一种间隙和孤岛问题。您需要确定 "islands" 存在的位置。假设时间段相邻(如您的示例所示),您可以使用 joinexists:

select key, min(start_date), max(end_date)
from (select t.*,
             sum(case when tprev.key is null then 1 else 0 end) over (partition by t.key order by t.start_date) as grp
      from t left join
           t tprev
           on tprev.key = t.key and
              tprev.end_date = date_add(t.start_date, -1)
     ) t
group by key, grp;

可以调整此逻辑以处理重叠,但您的数据似乎不需要这样做。