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

Databricks SQL中DELETE FROM用子查询触发非确定性表达式错误排查

Databricks SQL DELETE语句报错的解决办法

错误原因

你执行的DELETE语句中,WHERE子句里的子查询被判定为非确定性表达式,而Databricks的Delete算子不允许这类表达式出现在该位置,因此触发AnalysisException。

可行解决方法

方法1:将子查询结果存入变量后执行DELETE

先通过查询获取目标值并存储到变量,再用变量做条件删除:

-- 声明并赋值变量
DECLARE max_source_file STRING;
SET max_source_file = (SELECT MAX(_JOB_SOURCE_FILE) FROM temp_sapex_posted);

-- 执行删除
DELETE FROM prod_gbs_gpdi.bronze_data.sapex_ap_posted
WHERE _JOB_SOURCE_FILE = max_source_file;

方法2:用MERGE INTO替代DELETE

Databricks对MERGE INTO的逻辑支持更灵活,可通过关联实现删除:

MERGE INTO prod_gbs_gpdi.bronze_data.sapex_ap_posted AS target
USING (
    SELECT MAX(_JOB_SOURCE_FILE) AS max_file 
    FROM temp_sapex_posted
) AS source
ON target._JOB_SOURCE_FILE = source.max_file
WHEN MATCHED THEN DELETE;

这两种方法都能规避非确定性表达式的限制,完成基于新数据表值删除历史数据的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:25:23