我有一个大的事件表。每个用户我想在最早的 B 类事件之前计算 A 类事件的发生。
我正在寻找一个优雅的查询。使用了 Hive,所以我不能做子查询
Timestamp Type User
... A X
... A X
... B X
... A X
... A X
... A Y
... A Y
... A Y
... B Y
... A Y
想要的结果:
User Count_Type_A
X 2
Y 3
我无法通过以下方式获得“截止”时间戳:
Select User, min(Timestamp)
Where Type=B
Group BY User;
但是,我如何在下一个查询中使用该信息,我想在其中执行以下操作:
SELECT User, count(Timestamp)
WHERE Type=A AND Timestamp<min(User.Timestamp_Type_B)
GROUP BY User;
到目前为止,我唯一的想法是首先确定截止时间戳,然后与所有 A 类事件进行连接,然后从结果表中进行选择,但这感觉不对,而且看起来很难看。
我还在考虑这可能是 Hive 的错误类型的问题/分析,我应该考虑手写 map-reduce 或 pig 来代替。
请指出正确的方向来帮助我。