配置单元合并查询/联接

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

我希望创建一个链接表的基础上从两列x,y的输入。如果它们通过x或y链接,则它们是同一个用户。

  1. X | Y | output |
  2. -------+------- |---------|
  3. 1 | a | u1 |
  4. 2 | b | u2 |
  5. 2 | c | u2 |
  6. 3 | d -> | u3 |
  7. 4 | e | u2 |
  8. 4 | b | u2 |
  9. 5 | - | u3 |
  10. 5 | d | u3 |

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

h79rfbju

h79rfbju1#

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

  1. select t1.x, t1.y,
  2. min(least(coalesce(t2.x, t1.x), coalesce(t3.x, t1.x), coalesce(t4.x, t1.x))) as grp
  3. from t t1 join
  4. t t2
  5. on t1.x = t2.y left join
  6. t t3
  7. on t2.x = t3.y left join
  8. t t4
  9. on t3.x = t4.y
  10. group by t1.x, t1.y

相关问题