You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
);

关键修正点

  1. 移除了原语句中错误的GROUP BY子句,改用CTE(公共表表达式)处理分组和行号计算
  2. 去掉冗余的COUNT(*)判断,仅用row_num > 1就能精准标记需要删除的重复记录
  3. 如果需要按特定规则保留记录(比如保留每组中最新的data),只需修改ORDER BY后的列即可

内容的提问来源于stack exchange,提问作者Diego

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:57:17