我在过去的两个月里一直在学习Hive,但是我无法弄清楚如何进行某些基于序列的查询。举个例子:
问题:如何编写一个询问“平均来说,事件A在B发生之前发生了多少次”的查询?
我知道如何对用户进行分组,并且只对那些已经完成A和B的用户进行分析,并对发生的A的数量进行平均,但是首次出现B的限制似乎很难。我想我实际上可以通过将大约10个讨厌的查询串联在一起来做到这一点,但我想知道是否有更简单的方法来做我不知道的事情。
谢谢!
答案 0 :(得分:2)
这并不容易映射到SQL,特别是在Hive中,考虑到Hive不支持与equi-joins不同的连接。
与此同时,我们可以给Hive留下很多繁重的负担,同时自己做一小部分。
我建议的想法是:让hive将特定用户的所有事件组合在一起。我们可以创建我们自己的agregation UDF,它将计算A和B的最小日期并给出输出0,1,2,3 - 如果只有A发生,只有B发生,A发生在B之前,B发生在A之前。
从那里开始,其余的计算在Hive中也是微不足道的。