Koneksi loopback ke SQL Server dari skrip Python atau R

Berlaku untuk:Azure SQL Managed Instance SQL Server 2019 (15.x)

Pelajari cara menggunakan koneksi loopback dengan Layanan Pembelajaran Mesin untuk terhubung kembali ke SQL Server melalui ODBC untuk membaca atau menulis data dari skrip Python atau R yang dijalankan dari sp_execute_external_script. Anda dapat menggunakan ini saat menggunakan argumen sp_execute_external_scriptInputDataSet dan OutputDataSet tidak dimungkinkan.

String koneksi

Untuk membuat koneksi loopback, Anda perlu menggunakan string koneksi yang benar. Argumen wajib umum adalah nama driver ODBC, alamat server, dan nama database.

String koneksi di Windows

Untuk autentikasi pada SQL Server di Windows, skrip Python atau R dapat menggunakan atribut string koneksi Trusted_Connection untuk mengautentikasi sebagai pengguna yang sama yang menjalankan sp_execute_external_script.

Berikut adalah contoh string koneksi loopback di Windows:

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

String koneksi di Linux

Untuk autentikasi pada SQL Server di Linux, skrip Python atau R perlu menggunakan atribut ClientCertificate dan ClientKey dari driver ODBC untuk mengautentikasi sebagai pengguna yang sama yang menjalankan sp_execute_external_script. Ini memerlukan penggunaan driver ODBC terbaru versi 17.4.1.1.

Berikut adalah contoh string koneksi loopback di 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"

Alamat server, lokasi file sertifikat klien, dan lokasi file kunci klien unik untuk setiap sp_execute_external_script dan dapat diperoleh dengan menggunakan API rx_get_sql_loopback_connection_string() untuk Python atau rxGetSqlLoopbackConnectionString() untuk R.

Untuk informasi selengkapnya tentang atribut string koneksi, lihat DSN dan Kata Kunci String Koneksi dan Atribut untuk Driver ODBC Microsoft untuk SQL Server.

String koneksi pada Azure SQL Managed Instance

Untuk menghasilkan string koneksi untuk Azure SQL Managed Instance, lihat contoh di bagian berikutnya. Gunakan ODBC Driver 11 untuk SQL Server sebagai driver ODBC untuk koneksi loopback.

Membuat string koneksi dengan revoscalepy untuk Python

Anda dapat menggunakan API rx_get_sql_loopback_connection_string() dalam revoscalepy untuk menghasilkan string koneksi yang benar untuk koneksi loopback dalam skrip Python.

Ini menerima argumen berikut:

Argumen Deskripsi
name_of_database Nama database tempat koneksi akan dibuat
odbc_driver Nama driver odbc

Contoh

Contoh untuk SQL Server di 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

Contoh untuk SQL Server di 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

Contoh untuk 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

Hasilkan string koneksi dengan RevoScaleR untuk R

Anda dapat menggunakan API rxGetSqlLoopbackConnectionString() di RevoScaleR untuk menghasilkan string koneksi yang benar untuk koneksi loopback dalam skrip R.

Ini menerima argumen berikut:

Argumen Deskripsi
nameOfDatabase Nama database tempat koneksi akan dibuat
odbcDriver Nama driver odbc

Contoh

Contoh untuk SQL Server di 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

Contoh untuk SQL Server di 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

Contoh untuk 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

Langkah berikutnya