在过去的两个月里,我一直在学习hive,但是我很难弄清楚如何进行某些基于序列的查询。举个例子:
我有一个由用户操作组成的巨大日志
每个用户操作都有一个日期字段,但由于来自不同机器的多个日志文件,显然可能无法按该顺序扫描
每个日志可以记录各种不同的事件。对于这个例子,我将用字母来表示:a,b,c,d。。。
问题是:我该如何编写一个询问“平均来说,事件a在b发生之前发生了多少次”的查询?
我知道如何对用户进行分组,只取做了a和b的用户,并平均发生a的数量,但是限制b的第一次出现似乎很困难。我想我可能真的可以通过串接10个左右看起来很恶心的查询来做到这一点,但我想知道是否有一个更简单的方法来做到这一点,我不知道。
谢谢!
1条答案
按热度按时间d6kp6zgx1#
考虑到配置单元不支持与equi连接不同的连接,这一点很难Map到sql,特别是在配置单元中。
同时,我们可以把很多繁重的工作交给Hive,而自己做一小部分。
我的建议是:让配置单元将特定用户的所有事件组合在一起。我们可以创建自己的agregation udf,它将计算a和b的最小日期,并给出输出0,1,2,3-如果只有a发生,只有b发生,a发生在b之前,b发生在a之前。
从那里开始,剩下的计算在Hive中也变得微不足道。