Удалите строки базы данных Azure SQL из блоков данных Azure
У меня есть таблица в базе данных SQL Azure, из которой я хочу удалить выбранные строки на основе некоторых критериев или всю таблицу из блоков данных Azure. В настоящее время я использую свойство truncate JDBC, чтобы обрезать всю таблицу, не удаляя ее, а затем переписать ее с новым фреймом данных.
df.write \
.option('user', jdbcUsername) \
.option('password', jdbcPassword) \
.jdbc('<connection_string>', '<table_name>', mode = 'overwrite', properties = {'truncate' : 'true'} )
Но в дальнейшем я не хочу урезать и перезаписывать всю таблицу каждый раз, а использовать команду удаления. Я не смог добиться этого с помощью запроса pushdown. Любая помощь по этому вопросу будет принята с благодарностью.
2 ответа
Вы также можете сделать это в scala, так как драйвер JDBC для SQL Server уже установлен. НАПРИМЕР:
%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()
Используйте 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 - подробности смотрите здесь: https://datathirst.net/blog/2018/10/12/executing-sql-server-stored-procedures-on-databricks-pyspark