hiveql:如何删除基于两列的重复行

anauzrmj  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(330)

我正在创建一个无向图表,如下所示。

+-------------------+------------------------+----------------------+
|     id            |     node_a             |        node_b        |
+-------------------+------------------------+----------------------+
|     1             |         a              |           b          |
+-------------------+------------------------+----------------------+
|     2             |         a              |           c          |
+-------------------+------------------------+----------------------+
|     3             |         a              |           d          |
+-------------------+------------------------+----------------------+
|     4             |         b              |           a          |
+-------------------+------------------------+----------------------+
|     5             |         b              |           c          |
+-------------------+------------------------+----------------------+
...

行id=1和id=4为重复行,应删除一行。删除此表中所有重复行的有效方法是什么?

vi4fp9gy

vi4fp9gy1#

您可以通过执行以下操作来生成不同的行:

select e.*
from edges e
where e.node_a < e.node_b
union all
select e.*
from edges e
where e.node_a > e.node_b and
      not exists (select 1
                  from edges e2 
                  where e2.node_a = e.node_b and e2.node_b = e.node_a
                 );

如果实际有未转置的副本,请使用 union 而不是 union all .
以上内容保留了表中的原始边。如果这不是一个问题,一个简单的方法是:

select distinct least(node_a, node_b) as node_a, greatest(node_a, node_b) as node_b
from edges e;

相关问题