Connessione loopback a SQL Server da uno script Python o R

Si applica a: SQL Server 2019 (15.x) Istanza gestita di SQL di Azure

Informazioni su come usare una connessione loopback con Machine Learning Services per riconnettersi a SQL Server tramite ODBC per leggere o scrivere dati da uno script Python o R eseguito da sp_execute_external_script. Questo approccio è utile quando non è possibile usare gli argomenti InputDataSet e OutputDataSet di sp_execute_external_script.

Connection string

Per eseguire una connessione loopback, è necessario usare una stringa di connessione corretta. Gli argomenti obbligatori comuni sono il nome del driver ODBC, l'indirizzo del server e il nome del database.

Stringa di connessione in Windows

Per l'autenticazione in SQL Server in Windows, lo script Python o R può usare l'attributo della stringa di connessione Trusted_Connection per eseguire l'autenticazione con lo stesso utente che ha eseguito sp_execute_external_script.

Ecco un esempio della stringa di connessione loopback in Windows:

"Driver=SQL Server;Server=.;Database=nameOfDatabase;Trusted_Connection=Yes;"

Stringa di connessione in Linux

Per l'autenticazione in SQL Server in Linux, lo script Python o R deve usare gli attributi ClientCertificate e ClientKey del driver ODBC per eseguire l'autenticazione con lo stesso utente che ha eseguito sp_execute_external_script. Questa operazione richiede l'uso del driver ODBC più recente, ovvero la versione 17.4.1.1.

Ecco un esempio della stringa di connessione loopback in Linux:

"Driver=ODBC Driver 17 for SQL Server;Server=fe80::8012:3df5:0:5db1%eth0;Database=nameOfDatabase;ClientCertificate=file:/var/opt/mssql-extensibility/data/baeaac72-60b3-4fae-acfd-c50eff5d34a2/sqlsatellitecert.pem;ClientKey=file:/var/opt/mssql-extensibility/data/baeaac72-60b3-4fae-acfd-c50eff5d34a2/sqlsatellitekey.pem;TrustServerCertificate=Yes;Trusted_Connection=no;Encrypt=Yes"

L'indirizzo del server, il percorso del file del certificato client e il percorso del file di chiave client sono univoci per ogni sp_execute_external_script e possono essere ottenuti usando l'API rx_get_sql_loopback_connection_string() per Python o rxGetSqlLoopbackConnectionString() per R.

Per altre informazioni sugli attributi della stringa di connessione, vedere Parole chiave e attributi per la stringa di connessione e DSN per Microsoft ODBC Driver for SQL Server.

Stringa di connessione nell'Istanza gestita di SQL di Azure

Per generare la stringa di connessione per l'Istanza gestita di SQL di Azure, vedere gli esempi nelle sezioni successive. Usare ODBC Driver 11 for SQL Server come driver ODBC per le connessioni di loopback.

Generare la stringa di connessione con revoscalepy per Python

È possibile usare l'API rx_get_sql_loopback_connection_string() in revoscalepy per generare una stringa di connessione corretta per una connessione loopback in uno script Python.

Sono accettati gli argomenti seguenti:

Argomento Descrizione
name_of_database Nome del database al quale deve essere eseguita la connessione
odbc_driver Nome del driver ODBC

Esempi

Esempio per SQL Server in Windows:

EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
from revoscalepy import rx_get_sql_loopback_connection_string, RxSqlServerData, rx_data_step
loopback_connection_string = rx_get_sql_loopback_connection_string(odbc_driver="SQL Server", name_of_database="DBName")
print("Connection String:{0}".format(loopback_connection_string))
data_set = RxSqlServerData(sql_query = "select col1, col2 from tableName",
                           connection_string = loopback_connection_string)
OutputDataSet = rx_data_step(data_set)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Esempio per SQL Server in Linux:

EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
from revoscalepy import rx_get_sql_loopback_connection_string, RxSqlServerData, rx_data_step
loopback_connection_string = rx_get_sql_loopback_connection_string(odbc_driver="ODBC Driver 17 for SQL Server",
                                                                   name_of_database="DBName")
print("Loopback Connection String:{0}".format(loopback_connection_string))
data_set = RxSqlServerData(sql_query = "select col1, col2 from tableName",
                           connection_string = loopback_connection_string)
OutputDataSet = rx_data_step(data_set)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Esempio per Istanza gestita di SQL di Azure:

EXECUTE sp_execute_external_script
@language = N'Python',
@script = N'
from revoscalepy import rx_get_sql_loopback_connection_string, RxSqlServerData, rx_data_step
loopback_connection_string = rx_get_sql_loopback_connection_string(odbc_driver="ODBC Driver 11 for SQL Server", name_of_database="DBName")
print("Connection String:{0}".format(loopback_connection_string))
data_set = RxSqlServerData(sql_query = "select col1, col2 from tableName",
                           connection_string = loopback_connection_string)
OutputDataSet = rx_data_step(data_set)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Generare la stringa di connessione con RevoScaleR per R

È possibile usare l'API rxGetSqlLoopbackConnectionString() in RevoScaleR per generare una stringa di connessione corretta per una connessione loopback in uno script R.

Sono accettati gli argomenti seguenti:

Argomento Descrizione
nameOfDatabase Nome del database al quale deve essere eseguita la connessione
odbcDriver Nome del driver ODBC

Esempi

Esempio per SQL Server in Windows:

EXECUTE sp_execute_external_script
@language = N'R',
@script = N'
    loopbackConnectionString <- rxGetSqlLoopbackConnectionString(nameOfDatabase="DBName", odbcDriver ="SQL Server")
    print(paste("Connection String:", loopbackConnectionString))
    dataSet <- RxSqlServerData(sqlQuery = "select col1, col2 from tableName",
                               connectionString = loopbackConnectionString)
    OutputDataSet <- rxDataStep(dataSet)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Esempio per SQL Server in Linux:

EXECUTE sp_execute_external_script
@language = N'R',
@script = N'
    loopbackConnectionString <-  rxGetSqlLoopbackConnectionString(nameOfDatabase="DBName", 
                                                                  odbcDriver ="ODBC Driver 17 for SQL Server")
    print(paste("Connection String:", loopbackConnectionString))
    dataSet <- RxSqlServerData(sqlQuery = "select col1, col2 from tableName", 
                               connectionString = loopbackConnectionString)
    OutputDataSet <- rxDataStep(dataSet)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Esempio per Istanza gestita di SQL di Azure:

EXECUTE sp_execute_external_script
@language = N'R',
@script = N'
    loopbackConnectionString <- rxGetSqlLoopbackConnectionString(nameOfDatabase="DBName", odbcDriver ="ODBC Driver 11 for SQL Server")
    print(paste("Connection String:", loopbackConnectionString))
    dataSet <- RxSqlServerData(sqlQuery = "select col1, col2 from tableName",
                               connectionString = loopbackConnectionString)
    OutputDataSet <- rxDataStep(dataSet)
'
WITH RESULT SETS ((col1 int, col2 int))
GO

Passaggi successivi