Pyspark 从azure数据库中删除azure sql数据库行

Pyspark 从azure数据库中删除azure sql数据库行,pyspark,azure-sql-database,pyspark-sql,databricks,azure-databricks,Pyspark,Azure Sql Database,Pyspark Sql,Databricks,Azure Databricks,我在Azure SQL数据库中有一个表,我想根据某些条件从中删除选定的行,或者从Azure数据库中删除整个表。目前,我正在使用JDBC的truncate属性来截断整个表而不删除它,然后使用新的dataframe重新写入它 df.write \ .option('user', jdbcUsername) \ .option('password', jdbcPassword) \ .jdbc('<connection_string>', '<table

我在Azure SQL数据库中有一个表,我想根据某些条件从中删除选定的行,或者从Azure数据库中删除整个表。目前,我正在使用JDBC的truncate属性来截断整个表而不删除它,然后使用新的dataframe重新写入它

df.write \
     .option('user', jdbcUsername) \
     .option('password', jdbcPassword) \
     .jdbc('<connection_string>', '<table_name>', mode = 'overwrite', properties = {'truncate' : 'true'} )
df.write\
.option('user',jdbc用户名)\
.option('password',jdbcspassword)\
.jdbc(“”,,,mode='overwrite',properties={'truncate':'true'})

但接下来我不想每次都截断并覆盖整个表,而是使用delete命令。我也无法使用下推查询来实现这一点。在此方面的任何帮助都将不胜感激。

使用pyodbc执行SQL语句

import pyodbc
conn = pyodbc.connect( 'DRIVER={ODBC Driver 17 for SQL Server};'
                       'SERVER=mydatabe.database.azure.net;'
                       'DATABASE=AdventureWorks;UID=jonnyFast;'
                       'PWD=MyPassword')
conn.execute('DELETE TableBlah WHERE 1=2')

让pyodbc在Databricks上工作有点麻烦-请参阅此处的详细信息:

您也可以下拉到scala来执行此操作,因为已经安装了SQL Server JDBC驱动程序。例如:

%scala

import java.util.Properties
import java.sql.DriverManager

val jdbcUsername = "xxxxx"
val jdbcPassword = "xxxxxx"
val driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver"

// Create the JDBC URL without passing in the user and password parameters.
val jdbcUrl = s"jdbc:sqlserver://xxxxxx.database.windows.net:1433;database=AdventureWorks;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"

// Create a Properties() object to hold the parameters.

val connectionProperties = new Properties()

connectionProperties.put("user", s"${jdbcUsername}")
connectionProperties.put("password", s"${jdbcPassword}")
connectionProperties.setProperty("Driver", driverClass)

val connection = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword)
val stmt = connection.createStatement()
val sql = "delete from sometable where someColumn > 4"

stmt.execute(sql)
connection.close()

我做不到。这句话永远挂不住