如何在 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 中执行“事件顺序”查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何hadoop 看hive执行日志

执行查询时,hive 是不是运行 hadoop?

Hive查看执行日志

如何在所有可用节点中运行 Hive mapreduce 任务?

为 Hadoop 数据仓库 (Hive) 设置环境

Hive执行脚本: Return Code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask