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

在Azure Data Factory中执行Databricks更新语句时遇错误求助

问题场景

我在Azure Data Factory中使用Lookup活动执行Databricks的更新语句,SQL代码如下:

UPDATE MPH_CATALOG_DEV.MPH_STAGE_SCHEMA.MPH_TABLE_REFRESH_LOOKUP
    SET ACTIVE = '0' WHERE
    TARGET_TABLE_SCHEMA = '@{item().TARGET_TABLE_SCHEMA}' and
    TARGET_TABLE_NAME   = '@{item().TARGET_TABLE_NAME}' ;
select 0 as id;

管道结构:
管道结构
执行时出现错误:
错误信息

已知条件:

  • 目标数据库为Databricks
  • 无法为Script活动选择Databricks数据源
  • 已向查询传递参数值
解决方案

核心问题分析

Lookup活动的设计初衷是查询并返回结果集,并非执行DML操作。即便添加了select 0 as id来返回结果,仍可能因为Databricks JDBC驱动的多语句执行限制、ADF Lookup对DML操作的兼容性问题导致报错。

推荐解决方案:改用Databricks Notebook活动

既然无法使用Script活动,Databricks Notebook活动是更适合执行DML的选择:

  1. 在Databricks中创建一个Notebook,编写更新逻辑,通过参数接收TARGET_TABLE_SCHEMA和TARGET_TABLE_NAME:
    %sql
    UPDATE MPH_CATALOG_DEV.MPH_STAGE_SCHEMA.MPH_TABLE_REFRESH_LOOKUP
    SET ACTIVE = '0' 
    WHERE TARGET_TABLE_SCHEMA = dbutils.widgets.get("TARGET_TABLE_SCHEMA")
      AND TARGET_TABLE_NAME = dbutils.widgets.get("TARGET_TABLE_NAME")
    
  2. 在ADF管道中添加Databricks Notebook活动,关联你的Databricks链接服务,选择目标Notebook。
  3. 在活动的参数设置中,传递@{item().TARGET_TABLE_SCHEMA}和@{item().TARGET_TABLE_NAME}对应的值。

若必须使用Lookup活动的兼容调整

如果一定要用Lookup活动执行,尝试以下修改:

  1. 修改JDBC连接字符串:在Databricks链接服务的JDBC属性中添加allowMultiQueries=true,允许执行多语句。
  2. 验证参数传递:确认ForEach活动的迭代项参数正确,@{item()}能正确获取到TARGET_TABLE_SCHEMA和TARGET_TABLE_NAME的值,可以先通过Lookup查询参数值来验证。
  3. 简化SQL逻辑:确保UPDATE和SELECT语句能被Databricks正确解析,避免语法层面的冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 19:33:11