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

如何用externalDataSource从Databricks写入Synapse及相关疑问

Databricks externalDataSource 选项相关问题解答

1. 使用该选项写入Synapse时性能是否存在差异?

使用externalDataSource选项写入Synapse的性能和常规PolyBase写入基本一致,底层依然采用PolyBase批量加载的核心逻辑。差异仅在于常规写入需要连接器临时创建外部数据源和范围凭据,而该选项直接复用预配置好的外部数据源,减少了资源创建阶段的权限校验和初始化操作。单次写入场景下性能差异可忽略,多次重复写入时,因为省去了重复创建资源的步骤,整体效率会更高。

2. 示例中的<your-pre-provisioned-data-source>是否需要与dbTable的名称一致?

不需要。<your-pre-provisioned-data-source>是Azure Synapse中预先创建的外部数据源对象,作用是指向用于数据中转的存储服务(和读取时tempDir对应的存储一致);而dbTable是Synapse中要读写的目标表名称。两者属于完全不同的对象,没有名称匹配的强制要求,只要预配置的外部数据源具备对应存储的访问权限即可。

3. 如何使用externalDataSource选项实现从Databricks到Synapse的数据写入?

该选项仅支持以PolyBase语义写入Synapse的新表,且不可指定其他存储认证类型。示例代码如下:

# 假设df是待写入的DataFrame
df.write \
  .format("com.databricks.spark.sqldw") \
  .option("url", "jdbc:sqlserver://<your-synapse-server>.sql.azuresynapse.net:1433;database=<your-db-name>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.sql.azuresynapse.net;loginTimeout=30;") \
  .option("externalDataSource", "<your-pre-provisioned-data-source>") \
  .option("dbTable", "<your-new-table-name>") \
  .mode("overwrite")  # 写入新表常用overwrite或create模式
  .save()

注意事项:

  • 预配置的外部数据源需指向可用于中转数据的存储路径,连接器会自动用该存储来处理数据中转
  • 目标表<your-new-table-name>无需预先在Synapse中创建,连接器会自动生成对应新表
  • 不可同时配置forwardSparkAzureStorageCredentials等其他存储认证选项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:06:20