如何在Google BigQuery中去除无向网络表的重复边
BigQuery无向网络边去重方案
针对无向网络中(A,B)与(B,A)视为重复边的场景,可以通过统一边的节点排序标识实现去重,以下是两种可行的BigQuery查询方案:
方案一:保留原始节点顺序的去重
该方案会从每组重复边中选取一条原始记录,保留原有的节点顺序:
WITH processed_edges AS ( SELECT Column_A, Column_B, Weight, -- 生成统一的边标识,让反向边得到相同的节点组合 LEAST(Column_A, Column_B) AS node1, GREATEST(Column_A, Column_B) AS node2 FROM `你的项目ID.你的数据集ID.你的表名` ) SELECT Column_A, Column_B, Weight FROM processed_edges QUALIFY ROW_NUMBER() OVER (PARTITION BY node1, node2 ORDER BY Column_A) = 1;
方案二:标准化节点顺序的去重
该方案会直接将边的节点按字典序排列,生成统一格式的无向边:
SELECT LEAST(Column_A, Column_B) AS Column_A, GREATEST(Column_A, Column_B) AS Column_B, Weight FROM `你的项目ID.你的数据集ID.你的表名` GROUP BY LEAST(Column_A, Column_B), GREATEST(Column_A, Column_B), Weight;
补充说明
- 两种方案核心都是利用
LEAST()和GREATEST()函数,按字典序统一反向边的节点组合,实现去重判断 - 如果重复边的
Weight值存在差异,可以将Weight替换为聚合函数(比如SUM(Weight))来合并权重,适配不同业务需求
内容的提问来源于stack exchange,提问作者Ali Jaragh
相关产品推荐
相关产品推荐

