2

我有两张桌子。

表一个包含

userid gameid starttimestamp endtimestamp

表二包含

userid actiontimestamp someaction

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

我的大多数交叉连接和过滤尝试最终都导致映射器和减速器卡在 100%。

4

2 回答 2

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 的不可为空的列。

于 2014-12-09T02:32:41.747 回答
0

非 equi 连接在 Hive 中不可用。

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

1.您可以在Hive中实现Buckets 。

2.也阅读这篇facebook 文章

3.你有不止一项工作吗?如果有,在hive中启用并行执行。如果您的工作是独立的,它们会并行运行。

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

于 2013-07-05T06:25:03.433 回答