如何在 Hadoop Hive 中执行“事件顺序”查询?
Posted
技术标签:
【中文标题】如何在 Hadoop Hive 中执行“事件顺序”查询?【英文标题】:How to do an "Order of Events" query in Hadoop Hive? 【发布时间】:2013-01-26 04:53:39 【问题描述】:在过去的 2 个月里,我一直在学习 Hive,但我无法弄清楚如何进行某些基于序列的查询。举个例子:
我有一个包含用户操作的巨大日志 每个用户操作都有一个日期字段,但由于来自不同机器的多个日志文件,显然可能不会按该顺序扫描 每个日志都可以记录各种不同的事件。在本例中,我将它们表示为字母:A、B、C、D...问题:我将如何编写一个询问“平均而言,事件 A 在 B 发生之前发生多少次”的查询?
我知道如何对用户进行分组,只取完成 A 和 B 的用户,并对 A 发生的次数进行平均,但限制 B 的第一次出现似乎很困难。我想我实际上可以通过将 10 个左右看起来令人讨厌的查询串在一起来做到这一点,但我想知道是否有一种我不知道的更简单的方法来做到这一点。
谢谢!
【问题讨论】:
【参考方案1】:这并不容易映射到 SQL,尤其是在 Hive 中,考虑到 Hive 不支持与等值连接不同的连接。 同时,我们可以将很多繁重的工作留给 Hive,而我们自己做一小部分。 我建议的想法是:让 hive 将特定用户的所有事件组合在一起。我们可以创建自己的聚合 UDF,它将计算 A 和 B 的最小日期并给出输出 0,1,2,3 - 如果只有 A 发生,只有 B 发生,A 发生在 B 之前,B 发生在 A 之前。 从那里开始,其余的计算在 Hive 中再次变得微不足道。
【讨论】:
谢谢!我没有探索过UDF,但看起来聚合函数可以做到这一点。以上是关于如何在 Hadoop Hive 中执行“事件顺序”查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何在所有可用节点中运行 Hive mapreduce 任务?
Hive执行脚本: Return Code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask