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

Azure Synapse Spark笔记本跨工作区连接读取SQL池表的实现及报错处理

跨私有网络场景下Scala Spark读取跨工作区Azure Synapse SQL池的实现方案

Linked Service参数的支持有效性

当前Synapse内置的SQL Analytics Connector支持通过Linked Service参数传入连接配置,对应的常量定义Constants.LINKED_SERVICE可直接调用,官方文档未单独覆盖跨工作区私有网络的适配场景。
使用该参数时,连接器会自动从已配置的Linked Service中拉取目标连接的服务器地址、认证信息、网络路由规则,无需手动拼接连接参数,可直接复用pipeline已经验证通过的跨工作区连通链路。

适配私有网络场景的标准Scala读表代码

%%spark
import com.microsoft.spark.sqlanalytics.utils.Constants
import org.apache.spark.sql.SqlAnalyticsConnector._

val df = spark.read
  .option(Constants.LINKED_SERVICE, "当前Synapse工作区已配置的跨目标SQL池的Linked Service名称")
  .synapsesql("<目标SQL池所在数据库名>.<Schema名称>.<目标表名称>")

// 触发计算完成后可直接做结果校验
df.show(10)

报错根因解释

出现“Data exfiltration to 'DATALAKE_NAME.dfs.core.windows.net' is blocked”类报错,和访问SQL池的目标无关,本质是SQL Analytics Connector的运行机制触发了目标SQL池的出站访问策略:

  • 连接器读取大表时不会采用纯JDBC逐行拉取的低性能模式,而是会生成Polybase导出任务,将目标SQL池的表数据临时写入当前Spark工作区关联的默认ADLS Gen2存储做中转,再由Spark从该存储读取数据生成DataFrame
  • 目标侧的SQL池开启了数据外泄保护策略,该策略会阻断目标SQL池向不在白名单内的存储账户发起的所有出站写入请求,和网络层是否配置了私有端点无关联——私有端点只解决网络可达性问题,无法绕过SQL池层面的出站访问控制规则
  • 未使用Linked Service的原有写法,会让连接器默认走公网连接逻辑,自动生成的Polybase中转存储地址未被加入目标SQL池的外泄允许列表,因此触发拦截报错。

落地前的前置校验项

  • 确认在运行Spark Notebook的当前Synapse工作区,已创建指向目标SQL池的Linked Service,且连通性测试结果为通过(可直接复用pipeline中已验证可正常使用的同名Linked Service)
  • 在目标侧Synapse工作区的目标SQL池网络设置页,将当前Spark工作区关联的ADLS Gen2存储账户,添加到“允许数据外泄的目标存储列表”中
  • 替换参数后无需额外配置公网访问规则,所有流量会通过已打通的私有端点链路传输。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 02:15:03