Loopbackverbindung zu SQL Server über ein Python- oder R-Skript

Gilt für: SQL Server 2019 (15.x) Azure SQL Managed Instance

Hier erfahren Sie, wie Sie mit einer Loopbackverbindung mit Machine Learning Services über ODBC eine Verbindung zurück zu SQL Server herstellen können, um Daten in einem über sp_execute_external_script ausgeführten Python- oder R-Skript lesen oder schreiben können. Sie können diese Methode verwenden, wenn nicht die Möglichkeit besteht, die Argumente InputDataSet und OutputDataSet von sp_execute_external_script zu verwenden.

Verbindungszeichenfolge

Wenn Sie eine Loopbackverbindung herstellen möchten, müssen Sie eine entsprechende Verbindungszeichenfolge verwenden. Der Name des ODBC-Treibers, die Serveradresse und der Name der Datenbank sind in der Regel obligatorische Argumente.

Verbindungszeichenfolge unter Windows

Bei SQL Server unter Windows kann im Python- oder R-Skript das Verbindungszeichenfolgenattribut Trusted_Connection zur Authentifizierung als der Benutzer, der „sp_execute_external_script“ ausgeführt hat, verwendet werden.

Im Folgenden finden Sie ein Beispiel für die Zeichenfolge einer Loopbackverbindung unter Windows:

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

Verbindungszeichenfolge unter Linux

Bei SQL Server unter Linux müssen im Python- bzw. R-Skript die Attribute ClientCertificate und ClientKey des ODBC-Treibers zur Authentifizierung als der Benutzer, der sp_execute_external_script ausgeführt hat, verwendet werden. Hierfür ist die Verwendung der aktuellen ODBC-Treiberversion 17.4.1.1 erforderlich.

Im Folgenden finden Sie ein Beispiel für die Zeichenfolge einer Loopbackverbindung unter 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"

Serveradresse, Speicherort der Clientzertifikatdatei und Speicherort der Clientschlüsseldatei sind für jedes sp_execute_external_script spezifisch und können mithilfe der API rx_get_sql_loopback_connection_string() für Python bzw. rxGetSqlLoopbackConnectionString() für R abgerufen werden.

Weitere Informationen zu den Verbindungszeichenfolgenattributen finden Sie unter Schlüsselwörter und Attribute von DNS- und Verbindungszeichenfolgen für Microsoft ODBC Driver for SQL Server.

Verbindungszeichenfolge in Azure SQL Managed Instance

Informationen zum Generieren der Verbindungszeichenfolge für Azure SQL Managed Instance finden Sie in den Beispielen in den folgenden Abschnitten. Verwenden Sie den ODBC-Treiber 11 für SQL Server als ODBC-Treiber für Loopbackverbindungen.

Generieren einer Verbindungszeichenfolge mit revoscalepy für Python

Sie können die API rx_get_sql_loopback_connection_string() in revoscalepy verwenden, um eine entsprechende Verbindungszeichenfolge für eine Loopbackverbindung in einem Python-Skript zu generieren.

Dabei werden die folgenden Argumente akzeptiert:

Argument BESCHREIBUNG
name_of_database Name der Datenbank, mit der die Verbindung hergestellt wird
odbc_driver Name des ODBC-Treibers

Beispiele

Beispiel für SQL Server unter 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

Beispiel für SQL Server unter 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

Beispiel für Azure SQL Managed Instance:

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

Generieren einer Verbindungszeichenfolge mit RevoScaleR für R

Sie können die API rxGetSqlLoopbackConnectionString() in RevoScaleR verwenden, um eine entsprechende Verbindungszeichenfolge für eine Loopbackverbindung in einem R-Skript zu generieren.

Dabei werden die folgenden Argumente akzeptiert:

Argument BESCHREIBUNG
nameOfDatabase Name der Datenbank, mit der die Verbindung hergestellt wird
odbcDriver Name des ODBC-Treibers

Beispiele

Beispiel für SQL Server unter 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

Beispiel für SQL Server unter 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

Beispiel für Azure SQL Managed Instance:

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

Nächste Schritte