我有兩個表。Hive查詢,高效的非Equi加入?
tableOne包含
用戶ID 遊戲ID starttimestamp endtimestamp
tableTwo包含
用戶ID actiontimestamp someaction
考慮到用戶ID和遊戲ID,我想看看有多少動作有在每個遊戲ID中。鑑於只允許equi連接,將它們連接在一起的有效方法是什麼?
我的大多數crossjoin和過濾器嘗試結束了映射器和reducer陷入了100%。
我有兩個表。Hive查詢,高效的非Equi加入?
tableOne包含
用戶ID 遊戲ID starttimestamp endtimestamp
tableTwo包含
用戶ID actiontimestamp someaction
考慮到用戶ID和遊戲ID,我想看看有多少動作有在每個遊戲ID中。鑑於只允許equi連接,將它們連接在一起的有效方法是什麼?
我的大多數crossjoin和過濾器嘗試結束了映射器和reducer陷入了100%。
非Equi連接在Hive中不可用。
爲了優化equi連接,您可以嘗試以下操作。
1.您可以在Hive中實現Buckets。
2.閱讀facebook article也。
3.你有多個工作嗎?.if是,在配置單元中啓用並行執行。 如果你的工作是獨立的,他們平行運行。
4.如果其中一個表很小,請在配置單元中使用帶有添加文件選項的分佈式緩存。
您可以在WHERE子句中處理所有「theta join」(非等距)條件。像這樣:
SELECT * FROM OrderLineItem li LEFT OUTER JOIN ProductPrice p ON p.ProductID = li.ProductID
WHERE (p.StartDate IS NULL AND p.EndDate IS NULL)
OR li.OrderDate BETWEEN p.StartDate AND p.EndDate;
當然,這個例子假設StartDate和EndDate都是ProductPrice的非空列。