我有两张桌子。
tableOne包含
用户标识 游戏ID starttimestamp endtimestamp
tableTwo包含
用户标识 actiontimestamp someaction
鉴于userid和gameid,我想看看每个游戏ID中有多少个动作。鉴于只允许使用equi join,将它们连接在一起的有效方法是什么?
我的大部分交叉连接和过滤器尝试最终导致mapper和reducer卡在100%。
答案 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.如果其中一个表很小,请在配置单元中使用带有添加文件选项的分布式缓存。