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

Delta表去重SQL报错:AssertionError: assertion failed: No plan for DeleteFromTable

Delta表删除重复记录报错的解决方法

你用CTE删除重复记录的方式在Delta Lake里不生效,因为Delta不支持直接从CTE执行DELETE操作——CTE是临时逻辑视图,没有对应的物理存储执行计划,所以会抛出AssertionError: assertion failed: No plan for DeleteFromTable错误。

下面是两种可行的解决方式:

方式一:直接用DELETE结合子查询

通过子查询标记出重复的记录,直接对基表执行删除:

DELETE FROM tablename
WHERE (columnname, your_unique_identifier) IN (
    SELECT columnname, your_unique_identifier,
           ROW_NUMBER() OVER (PARTITION BY columnname ORDER BY columnname) AS row_num
    FROM tablename
)
AND row_num > 1;

注意:your_unique_identifier需要是表中的唯一字段(比如主键、自增ID),用来精准定位要删除的重复行,避免误删。如果没有唯一ID,可以用所有字段的组合来匹配,但效率会低一些。

方式二:使用MERGE INTO(Delta推荐方式)

MERGE是Delta Lake优化过的操作,适合处理批量数据修改,去重效率更高:

MERGE INTO tablename AS target
USING (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY columnname ORDER BY columnname) AS row_num
    FROM tablename
) AS source
-- 匹配条件要确保能精准定位到重复行,这里用分组字段+行号
ON target.columnname = source.columnname 
AND target.your_unique_identifier = source.your_unique_identifier
WHEN MATCHED AND source.row_num > 1 THEN DELETE;

如果表中没有唯一标识字段,也可以调整PARTITION BY和ORDER BY的逻辑,比如按所有可能的重复字段分组,按某个时间字段排序保留最新/最早的一条,然后删除其余的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:30:57