0

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

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

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

我知道如何对用户进行分组,只取完成 A 和 B 的用户并平均 A 发生的数量,但是限制 B 的第一次出现似乎很困难。我想我实际上可以通过将 10 个左右看起来很讨厌的查询串在一起来做到这一点,但我想知道是否有一种我不知道的更简单的方法来做到这一点。

谢谢!

4

1 回答 1

2

这并不容易映射到 SQL,尤其是在 Hive 中,考虑到 Hive 不支持与等值连接不同的连接。
同时,我们可以将很多繁重的工作留给 Hive,而我们自己做一小部分。
我建议的想法是:让 hive 将特定用户的所有事件组合在一起。我们可以创建自己的聚合 UDF,它将计算 A 和 B 的最小日期并给出输出 0,1,2,3 - 如果只有 A 发生,只有 B 发生,A 发生在 B 之前,B 发生在 A 之前。
从那里剩下的在 Hive 中进行计算再次变得微不足道。

于 2013-01-26T07:10:00.937 回答