Hive查询,高效非equi join?

时间:2013-07-04 18:43:39

标签: join hive

我有两张桌子。

tableOne包含

用户标识 游戏ID starttimestamp endtimestamp

tableTwo包含

用户标识 actiontimestamp someaction

鉴于userid和gameid,我想看看每个游戏ID中有多少个动作。鉴于只允许使用equi join,将它们连接在一起的有效方法是什么?

我的大部分交叉连接和过滤器尝试最终导致mapper和reducer卡在100%。

2 个答案:

答案 0 :(得分: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的非可空列。

答案 1 :(得分:0)

Hive中没有非等连接。

为了优化equi连接,您可以尝试以下操作。

1.您可以在Hive中实施Buckets

2.同时阅读facebook article

3.您有多个工作吗?。是的,在配置单元中启用并行执行。 如果你的工作是独立的,他们会并行。

4.如果其中一个表很小,请在配置单元中使用带有添加文件选项的分布式缓存。