我有一個大型的事件表。每個用戶我想計算在最早的B型事件之前發生的A類事件。如何在Hive/SQL中的where/having子句(避免子查詢)中使用min()
我正在尋找一個優雅的查詢。蜂巢使用,所以我不能做子查詢
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代替。
請通過指向正確的方向來幫助我。
我發現蜂巢(遺憾的是不支持<加盟條件:「只有平等連接,外連接,並留下半聯接在蜂巢支持蜂房不支持加入不在平等條件,因爲它的條件。 「https://cwiki.apache.org/Hive/languagemanual-joins.html – Cilvic
我很抱歉,我又做了一次嘗試,請讓我知道它是否有效。簡而言之,我將ON語句移到了WHERE子句,並使(INNER)JOIN成爲CROSS JOIN。 –