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

如何在Azure Data Factory Data Flow中调用Azure SQL托管实例的用户自定义函数

ADF数据流调用Azure SQL MI标量值函数的可行方案

ADF数据流的所有转换逻辑默认运行在托管Spark集群上,无法直接识别存储在Azure SQL MI侧的用户自定义函数,你之前在SELECT转换中调用失败的核心原因是该转换属于Spark层计算,不会把请求下推到SQL实例执行,可通过以下三种方案实现需求:


方案1:源查询阶段下推调用(性能最优)

直接在数据流的源转换中使用自定义查询模式,把UDF调用逻辑写在源侧的SQL语句中,让计算在SQL MI侧完成后再将结果返回给数据流。
示例代码:

SELECT 
    原有列1,
    原有列2,
    dbo.你的标量函数名(参数列) AS 函数计算结果列
FROM 你的业务表

适用场景:UDF的入参仅需要源表的原始字段,不需要使用数据流中后续转换生成的衍生字段。


方案2:查找转换间接调用

如果UDF的入参是数据流经过多层转换后生成的衍生字段,可以使用查找转换实现逐行调用:

  • 新增查找转换,源选择对应的Azure SQL MI连接
  • 查找源选择「查询」模式,输入带参数的UDF调用语句:SELECT dbo.你的标量函数名(@input_param) AS udf_output
  • 在查找的「条件」设置中,将数据流中需要作为UDF入参的列映射到@input_param参数
  • 查找输出选择udf_output字段,即可获取每行的UDF计算结果

适用场景:小数据量、UDF入参依赖数据流中间生成字段的场景,大数据量下会产生大量数据库请求,性能较差。


方案3:预计算中间表同步

如果是批量离线任务,可以先通过ADF的存储过程活动/复制活动,提前在SQL MI侧把所有需要的UDF计算结果写入中间表,数据流直接读取预计算完成的中间表即可。
适用场景:全量批量计算场景,无实时性要求,综合性能最优。


注意事项
  • 如果标量函数逻辑简单,建议直接用ADF数据流内置的表达式函数重写逻辑,完全在Spark层运行,避免跨服务调用的性能损耗
  • 大流量场景下不建议使用查找转换逐行调用UDF,容易触发SQL MI的请求限流
  • 所有SQL MI侧的UDF调用必须下推到SQL实例执行,无法在数据流的Spark转换层直接识别调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:39:03