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

Azure Data Factory:从Delta表直接加载数据到Postgres的可行性问询

ADF从Delta表同步到Postgres跳过staging的实现方案

结论

原生ADF复制活动从Delta Lake同步到Postgres无法直接跳过staging环节,但是可以通过两种替代方案实现无中间staging存储的直接写入效果,不需要走官方默认的两步staging流程。

原生限制说明

ADF原生复制活动的Delta Lake源读取逻辑存在明确限制,官方提示如下:

Direct copying data from Azure Databricks Delta Lake is only supported when sink dataset is DelimitedText, Parquet or Avro with Azure Blob Storage linked service or Azure Data Lake Storage Gen2, for other dataset or linked service, please enable staging
只有当Sink为Azure Blob/ADLS Gen2上的分隔文本、Parquet、Avro格式时才支持直连复制,其他异构Sink(包括Postgres)必须配置staging中转,这是产品原生的设计限制。

替代实现方案

方案1:使用Databricks Notebook活动实现

该方案依托Databricks集群的计算能力,数据全程在内存流转,无需落地中间staging存储:

  • 首先在ADF中创建Databricks链接服务,关联存放Delta表的Databricks工作区
  • 编写Databricks Notebook处理逻辑,示例代码如下:
# 读取指定路径的Delta表
delta_df = spark.read.format("delta").load("abfss://<你的容器名>@<存储账号名>.dfs.core.windows.net/<Delta表目录路径>")

# 配置Postgres JDBC连接参数
pg_jdbc_url = "jdbc:postgresql://<Postgres服务器地址>:5432/<数据库名>"
pg_conn_props = {
    "user": "<Postgres登录用户名>",
    "password": "<Postgres登录密码>",
    "driver": "org.postgresql.Driver"
}

# 写入Postgres目标表,mode可根据需求调整为append/overwrite/ignore等
delta_df.write.jdbc(
    url=pg_jdbc_url,
    table="<目标Postgres表名>",
    mode="append",
    properties=pg_conn_props
)
  • 在ADF管道中添加Databricks Notebook活动,关联上述Notebook,直接运行即可完成全流程同步。

方案2:使用Mapping Data Flow实现

该方案依托ADF托管的Spark计算资源,无需自行维护Databricks集群:

  • 新建Mapping Data Flow,源数据集选择Delta Lake类型,完成Delta表路径、权限的配置
  • 按需配置字段映射、数据清洗转换规则,无转换需求可直接连接Sink节点
  • Sink数据集选择Postgres类型,配置目标表信息、写入模式
  • 发布运行Data Flow即可,底层会直接完成Delta到Postgres的数据写入,不需要额外配置staging存储。

注意事项

  • 两种方案都需要用到Spark计算资源,成本相比原生复制活动加staging的模式略高
  • 若同步数据量极小,也可以自定义Azure Function活动,通过Delta Lake SDK读取Delta表后直接写入Postgres,同样不需要staging。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:54:04