BigQuery移除重复数据时DELETE语句报错,求修正方法
修正重复记录删除SQL的方法
你的原语句报错是因为DELETE语句不能直接使用GROUP BY子句,而且条件里同时混用ROW_NUMBER和COUNT(*)的逻辑冗余混乱,下面是正确的修正方案:
核心思路
通过给每个重复组(按data、imobiliaria、negocio、codigo分组)的记录分配行号,删除行号大于1的记录,只保留每组的第一条。
修正后的SQL(适配你的表名格式,适用于BigQuery)
WITH ranked_records AS ( SELECT *, -- 按指定列分组,给每组内的记录编行号 ROW_NUMBER() OVER ( PARTITION BY `data`, `imobiliaria`, `negocio`, `codigo` ORDER BY (SELECT NULL) -- 随机保留一条,若要按规则保留(比如最新数据)可改成 ORDER BY `data` DESC ) AS row_num FROM `dashboard.scrappy.imoveis` ) DELETE FROM `dashboard.scrappy.imoveis` WHERE ( `data`, imobiliaria, negocio, codigo, url, endpoint, total, valor, cidade, uf, tipo, bairro ) IN ( SELECT `data`, imobiliaria, negocio, codigo, url, endpoint, total, valor, cidade, uf, tipo, bairro FROM ranked_records WHERE row_num > 1 );
关键修正点
- 移除了原语句中错误的
GROUP BY子句,改用CTE(公共表表达式)处理分组和行号计算 - 去掉冗余的COUNT(*)判断,仅用
row_num > 1就能精准标记需要删除的重复记录 - 如果需要按特定规则保留记录(比如保留每组中最新的
data),只需修改ORDER BY后的列即可
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

