Hive整合查询/加入

时间:2017-01-17 03:08:22

标签: sql join group-by hive

我希望根据两列X,Y的输入创建链接表。如果它们是由X或Y链接,那么它们是同一个用户。

   X   |   Y        |  output |
-------+-------     |---------|
   1   |   a        |   u1    |
   2   |   b        |   u2    |
   2   |   c        |   u2    |
   3   |   d   ->   |   u3    |
   4   |   e        |   u2    |
   4   |   b        |   u2    |
   5   |   -        |   u3    |
   5   |   d        |   u3    |

IE:X(2)和X(4)由Y(b)等链接

任何帮助都会很棒。我已尝试了一些分组,加入和联合组合,但没有运气/ PEBCAK。我也尝试了collect_set(Y)然后爆炸,但没有骰子。即使它不能完成,这将是有用的信息。

1 个答案:

答案 0 :(得分:0)

评论太长了。

在SQL中解决此问题的一般方法是使用递归CTE。 Hive不支持递归CTE。

这给你留下了不太完美的选择。这是一个图形行走算法,并且 - 如果您知道用户之间没有太多连接 - 那么您可以使用显式join s:

select t1.x, t1.y,
       min(least(coalesce(t2.x, t1.x), coalesce(t3.x, t1.x), coalesce(t4.x, t1.x))) as grp
from t t1 join
     t t2
     on t1.x = t2.y left join
     t t3
     on t2.x = t3.y left join
     t t4
     on t3.x = t4.y
group by t1.x, t1.y