我们如何使用带有 python 的服务主体将数据块连接到 SQL 数据库?

How can we connect databricks to SQL database using service principal with python?

我想从 Azure Databricks 中插入一些数据框作为 sql 数据库中的表。如何使用服务主体和 python 将 Azure Databricks 与 Azure SQL 数据库连接起来?

我搜索了类似的内容:

jdbcHostname = "..."
jdbcDatabase = "..."
jdbcPort = ...
jdbcUrl = "jdbc:sqlserver://{0}:{1};database={2}".format(jdbcHostname, jdbcPort, jdbcDatabase)

connectionProperties = {
  "user" : "...",
  "password" : "...",
  "driver" : "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

但发现与Python无关。我该怎么做 ?也许像下面这样使用 pyspark?

hostname = "<servername>.database.windows.net"
server_name = "jdbc:sqlserver://{0}".format(hostname)

database_name = "<databasename>"
url = server_name + ";" + "databaseName=" + database_name + ";"
print(url)

table_name = "<tablename>"
username = "<username>"
password = dbutils.secrets.get(scope='', key='passwordScopeName')

要连接到 Azure SQL 数据库,您需要安装 SQL Spark Connector and the Microsoft Azure Active Directory Authentication Library for Python.

转到您在 Databricks 中的集群并安装 com.microsoft.azure:spark-mssql-connector_2.12_3.0:1.0.0-alpha 来自 Maven 和来自 PyPIadal。 确保为 Key Vault 分配了客户端 ID 和机密

Azure SQL

应用程序需要权限才能登录进入Azure SQL访问对象。 为对象创建服务原则然后授予它对底层对象的权限,在下面的例子中我给了服务主体select权限在 dbo 架构上。 代码示例在参考.

我们还要在数据库中创建一个table

Azure SQL Snippet:

参考:

https://www.thedataswamp.com/blog/databricks-connect-to-azure-sql-with-service-principal

https://docs.microsoft.com/en-us/sql/connect/spark/connector?view=sql-server-ver15