Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何做一个;事件顺序“;Hadoop配置单元中的查询?_Hadoop_Hive_Emr_Hiveql - Fatal编程技术网

如何做一个;事件顺序“;Hadoop配置单元中的查询?

如何做一个;事件顺序“;Hadoop配置单元中的查询?,hadoop,hive,emr,hiveql,Hadoop,Hive,Emr,Hiveql,在过去的两个月里,我一直在学习Hive,但我很难弄清楚如何进行某些基于序列的查询。举个例子: 我有一个由用户操作组成的巨大日志 每个用户操作都有一个日期字段,但由于来自不同机器的多个日志文件,显然可能无法按该顺序进行扫描 每个日志可以记录各种不同的事件。对于这个例子,我将用字母表示:A,B,C,D 问题是:我如何编写一个查询,询问“平均来说,事件a在B发生之前发生了多少次” 我知道如何对用户进行分组,只对做了A和B的用户进行分组,并对发生的A的数量进行平均,但是限制B的首次出现似乎很困难。我

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

  • 我有一个由用户操作组成的巨大日志
  • 每个用户操作都有一个日期字段,但由于来自不同机器的多个日志文件,显然可能无法按该顺序进行扫描
  • 每个日志可以记录各种不同的事件。对于这个例子,我将用字母表示:A,B,C,D
问题是:我如何编写一个查询,询问“平均来说,事件a在B发生之前发生了多少次”

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


谢谢

这不容易映射到SQL,特别是在配置单元中,因为配置单元不支持与equi连接不同的连接
同时,我们可以把很多繁重的工作留给蜂巢,而自己做一小部分
我建议的想法是:让配置单元将特定用户的所有事件组合在一起。我们可以创建自己的agregation UDF,该UDF将计算A和B的最小日期,并给出输出0,1,2,3-如果只有A发生,只有B发生,A发生在B之前,B发生在A之前。

从这里开始,剩下的计算在蜂巢中也变得微不足道

谢谢!我还没有研究过UDF,但看起来聚合函数可以解决这个问题。