配置单元合并查询/联接

nhaq1z21  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(365)

我希望创建一个链接表的基础上从两列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    |

即:x(2)和x(4)由y(b)等连接
任何帮助都是惊人的。我试过很多group-by,joins和unions的组合,但是没有运气/pebcak。我也试过收集集(y),然后爆炸,但没有骰子。即使做不到,那也是有用的信息。

h79rfbju

h79rfbju1#

这太长了,不能发表评论。
在sql中解决这个问题的一般方法是使用递归cte。配置单元不支持递归CTE。
这就给你留下了不太完美的选择。这是一个图形遍历算法,如果您知道用户之间没有太多的连接,那么您可以使用显式 join 学生:

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

相关问题