Hive中的行块(如何按特定条件对行进行分组并计算这些组)

时间:2014-04-19 01:32:41

标签: sql hive hiveql

以下是我拥有的数据示例:

Date_key       UserID
20140401         a
20140402         a
20140406         a
20140407         a 
20140408         a
20140409         a
20140404         b
20140408         b
20140409         b
20140414         b
20140415         b
...              ...

每一行都有一个日期,用户ID对,表示该用户当天处于活动状态。用户可以出现在多个日期,日期将有多个用户 - 就像示例中一样。

我想获得连续日组的数量(即活动块)。例如,'用户a' 的此值将 2 ,因为它们在20140401和20140402(第一组连续天数)中处于活动状态。在20140402之后,他们等待了一段时间再次变得活跃(即他们在第二天没有活动)。在20140406,他们的第二个活动块开始并持续到20140409没有任何分解。对于'用户b' ,此值将 3 ,因为他们在连续三天期间一直有效:1)20140404 2)20140408,20140409 3)20140414,20140415

我使用Hive。我不确定这在Hive中是否可行,但是如果数据需要转移到RDBMS来执行此任务,我也可以这样做。非常感谢您的推荐。谢谢!

干杯

1 个答案:

答案 0 :(得分:0)

当你使用distribute by子句时,即:.......按user_id分配按user_id排序,date_key desc ......特定用户的所有记录都将转到特定的reducer,其中然后按date_key降序对记录进行排序。这里为什么我们不编写UDF来遍历记录,并且当连续性中断时,它会将计数器的连续性增加1并将结果与​​user_id一起返回。