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

从Azure SQL Database读取表到Azure Databricks的方法咨询

将Azure SQL Database表读取到Azure Databricks的方法

前置准备

先确认两件事:

  • Azure SQL Database的防火墙规则已经允许Databricks集群访问(可开启“允许Azure服务和资源访问此服务器”,或添加集群的出站IP)
  • 你持有SQL DB的有效访问凭证(用户名密码/服务主体信息)

方法一:用Spark JDBC直接连接(最通用)

这是最常用的方式,通过JDBC驱动直接连接SQL DB并读取表数据。

基础用户名密码认证代码示例(Python)

# 替换为你的实际信息
server_name = "jdbc:sqlserver://你的sql-server-name.database.windows.net"
database_name = "your-db-name"
table_name = "your-target-table"
username = "sql-username"
password = "sql-password"

# 拼接完整JDBC URL
jdbc_url = f"{server_name};databaseName={database_name};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"

# 读取表数据
df = spark.read \
    .format("jdbc") \
    .option("url", jdbc_url) \
    .option("dbtable", table_name) \
    .option("user", username) \
    .option("password", password) \
    .load()

# 查看读取结果
df.display()

服务主体认证(生产环境推荐,更安全)

如果使用Azure AD服务主体访问SQL DB,代码调整如下:

# 替换为你的实际信息
server_name = "jdbc:sqlserver://你的sql-server-name.database.windows.net"
database_name = "your-db-name"
table_name = "your-target-table"
tenant_id = "your-tenant-id"
client_id = "service-principal-client-id"
client_secret = "service-principal-secret"

jdbc_url = f"{server_name};databaseName={database_name};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"

df = spark.read \
    .format("jdbc") \
    .option("url", jdbc_url) \
    .option("dbtable", table_name) \
    .option("authentication", "ActiveDirectoryServicePrincipal") \
    .option("user", client_id) \
    .option("password", client_secret) \
    .option("tenantId", tenant_id) \
    .load()

方法二:用已配置的Databricks数据源连接

如果你的Databricks工作区已在「数据」页面配置好Azure SQL Database的数据源连接,可直接通过连接名称快速读取:

df = spark.read \
    .format("sqlserver") \
    .option("dbtable", "your-target-table") \
    .option("connectionName", "已配置的数据源名称") \
    .load()

性能优化小技巧

  • 读取大表时,添加分区参数实现并行读取,提升效率(需指定一个数值型分区列):
    df = spark.read \
        .format("jdbc") \
        .option("url", jdbc_url) \
        .option("dbtable", table_name) \
        .option("user", username) \
        .option("password", password) \
        .option("partitionColumn", "id") \  # 替换为你的数值型分区列
        .option("lowerBound", "1") \
        .option("upperBound", "100000") \
        .option("numPartitions", "10") \
        .load()
    
  • 避免硬编码密码/密钥,用Databricks Secrets管理敏感信息,例如:dbutils.secrets.get(scope="your-secret-scope", key="sql-password")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:45:57