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

Databricks gold层数据表导出至Azure SQL Database及存储位置咨询

Databricks Gold层表导出到Azure SQL及存储位置问题解答

存储位置疑问解答

你在同资源组找不到对应存储账户属于正常情况:

  • 如果你使用的是Databricks托管Unity Catalog或托管Hive元存储的托管表,底层数据默认存储在Databricks侧管理的Azure存储账户中,这类存储账户归属Databricks官方订阅,不会出现在你的资源组内,也就是你所说的隐式存储。
  • 只有你自行创建的外部表,数据才会存储在你当前订阅下的存储账户中,这类情况你才能在资源组内找到对应存储资源。
  • 旧版DBFS根存储同样属于Databricks托管存储,也不会出现在你的资源组列表中。

Gold层表导出到Azure SQL Database的可行方案

你无需获取底层存储的直接访问权限,直接在Databricks工作区的Notebook中运行Spark代码即可完成导出,以下是两种生产环境常用方案:

方案1:原生JDBC导出(适配全场景,中小规模表首选)

提前在Azure SQL Database中创建好目标表结构(也可让Spark自动生成,生产环境建议提前规划Schema),运行以下代码替换占位符即可:

# Azure SQL 连接配置
jdbc_url = "jdbc:sqlserver://<SQL服务器名>.database.windows.net:1433;database=<SQL库名>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
conn_props = {
    "user": "<SQL登录用户名>",
    "password": dbutils.secrets.get(scope="<你的机密Scope名>", key="<SQL密码对应的机密Key名>"), # 敏感信息建议存在Databricks机密中,避免明文泄露
    "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

# 读取Gold层表
gold_df = spark.read.table("gold.<你的表名>")

# 写入Azure SQL
# mode参数可选:overwrite(覆写全表)/append(追加数据)/ignore(表存在则跳过)/error(表存在则报错)
gold_df.write.jdbc(
    url=jdbc_url,
    table="<SQL端目标表名>",
    mode="overwrite",
    properties=conn_props
)

方案2:优化型Azure SQL连接器(大规模表首选,性能更高)

Databricks Runtime 11.3及以上版本内置了优化过的Azure SQL专用连接器,写入性能比原生JDBC高3~10倍,代码示例如下:

gold_df.write \
  .format("sqlserver") \
  .option("server", "<SQL服务器名>.database.windows.net") \
  .option("databaseName", "<SQL库名>") \
  .option("user", "<SQL登录用户名>") \
  .option("password", dbutils.secrets.get(scope="<你的机密Scope名>", key="<SQL密码对应的机密Key名>")) \
  .option("dbtable", "<SQL端目标表名>") \
  .option("batchSize", 10000) \
  .mode("append") \
  .save()

如果是增量同步场景,你可以先过滤Gold层表中新增/变更的数据,再用append模式写入即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:15:03