2013-07-04 57 views
2

我有兩個表。Hive查詢,高效的非Equi加入?

tableOne包含

用戶ID 遊戲ID starttimestamp endtimestamp

tableTwo包含

用戶ID actiontimestamp someaction

考慮到用戶ID和遊戲ID,我想看看有多少動作有在每個遊戲ID中。鑑於只允許equi連接,將它們連接在一起的有效方法是什麼?

我的大多數crossjoin和過濾器嘗試結束了映射器和reducer陷入了100%。

回答

0

非Equi連接在Hive中不可用。

爲了優化equi連接,您可以嘗試以下操作。

1.您可以在Hive中實現Buckets

2.閱讀facebook article也。

3.你有多個工作嗎?.if是,在配置單元中啓用並行執行。 如果你的工作是獨立的,他們平行運行。

4.如果其中一個表很小,請在配置單元中使用帶有添加文件選項的分佈式緩存。

1

您可以在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的非空列。