Aller au contenu principal

Interroger SQL Server avec Databricks

Cet article montre comment vous pouvez connecter Databricks à un serveur Microsoft SQL pour lire et écrire des données.

info

Expérimental

La documentation sur la fédération des query héritées a été retirée et pourrait ne pas être mise à jour. Les configurations mentionnées dans ce contenu ne sont ni officiellement approuvées ni testées par Databricks. Si la Lakehouse Federation prend en charge votre base de données source, Databricks recommande d'utiliser cette dernière.

Configurer une connexion au serveur SQL

Dans Databricks Runtime 11.3 LTS et versions ultérieures, vous pouvez utiliser le mot-clé sqlserver pour utiliser le Driver inclus afin de vous connecter au serveur SQL. Lorsque vous travaillez avec des DataFrames, utilisez la syntaxe suivante :

Python
remote_table = (spark.read
.format("sqlserver")
.option("host", "hostName")
.option("port", "port") # optional, can use default port 1433 if omitted
.option("user", "username")
.option("password", "password")
.option("database", "databaseName")
.option("dbtable", "schemaName.tableName") # (if schemaName not provided, default to "dbo")
.load()
)

Lorsque vous travaillez avec SQL, spécifiez sqlserver dans la clause USING et transmettez les options lors de la création d'une table, comme illustré dans l'exemple suivant :

SQL
DROP TABLE IF EXISTS sqlserver_table;
CREATE TABLE sqlserver_table
USING sqlserver
OPTIONS (
dbtable '<schema-name.table-name>',
host '<host-name>',
port '1433',
database '<database-name>',
user '<username>',
password '<password>'
);

Utilisez l'ancien Driver JDBC

Dans Databricks Runtime 10.4 LTS et versions antérieures, vous devez spécifier le Driver et les configurations à l'aide des paramètres JDBC. L'exemple suivant interroge SQL Server en utilisant son Driver JDBC. Pour plus de détails sur la lecture, l'écriture, la configuration du parallélisme et le pushdown de query, consultez Query databases using JDBC.

Python
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"

database_host = "<database-host-url>"
database_port = "1433" # update if you use a non-default port
database_name = "<database-name>"
table = "<table-name>"
user = "<username>"
password = "<password>"

url = f"jdbc:sqlserver://{database_host}:{database_port};database={database_name}"

remote_table = (spark.read
.format("jdbc")
.option("driver", driver)
.option("url", url)
.option("dbtable", table)
.option("user", user)
.option("password", password)
.load()
)