如何在Hadoop Hive中执行“事件顺序”查询?

时间:2013-01-26 04:53:39

标签: hadoop hive emr hiveql

我在过去的两个月里一直在学习Hive,但是我无法弄清楚如何进行某些基于序列的查询。举个例子:

  • 我有一个包含用户操作的巨大日志
  • 每个用户操作都有一个日期字段,但由于来自不同计算机的多个日志文件,显然可能无法按该顺序进行扫描
  • 每个日志都可以记录各种不同的事件。对于这个例子,我将这些表示为字母:A,B,C,D ......

问题:如何编写一个询问“平均来说,事件A在B发生之前发生了多少次”的查询?

我知道如何对用户进行分组,并且只对那些已经完成A和B的用户进行分析,并对发生的A的数量进行平均,但是首次出现B的限制似乎很难。我想我实际上可以通过将大约10个讨厌的查询串联在一起来做到这一点,但我想知道是否有更简单的方法来做我不知道的事情。

谢谢!

1 个答案:

答案 0 :(得分:2)

这并不容易映射到SQL,特别是在Hive中,考虑到Hive不支持与equi-joins不同的连接。
与此同时,我们可以给Hive留下很多繁重的负担,同时自己做一小部分。
我建议的想法是:让hive将特定用户的所有事件组合在一起。我们可以创建我们自己的agregation UDF,它将计算A和B的最小日期并给出输出0,1,2,3 - 如果只有A发生,只有B发生,A发生在B之前,B发生在A之前。
从那里开始,其余的计算在Hive中也是微不足道的。