Bagikan melalui


Menyiapkan klien ilmu data untuk pengembangan Python di SQL Server Pembelajaran Mesin Services

Berlaku untuk: SQL Server 2016 (13.x), SQL Server 2017 (14.x), dan SQL Server 2019 (15.x), SQL Server 2019 (15.x) - Linux

Integrasi Python tersedia di SQL Server 2017 dan yang lebih baru, saat Anda menyertakan opsi Python dalam penginstalan Pembelajaran Mesin Services (In-Database).

Catatan

Saat ini artikel ini berlaku untuk SQL Server 2016 (13.x), SQL Server 2017 (14.x), SQL Server 2019 (15.x), dan SQL Server 2019 (15.x) hanya untuk Linux.

Untuk mengembangkan dan menyebarkan solusi Python untuk SQL Server, instal revoscalepy Microsoft dan pustaka Python lainnya di stasiun kerja pengembangan Anda. Pustaka revoscalepy, yang juga ada pada instans SQL Server jarak jauh, mengoordinasikan permintaan komputasi antara kedua sistem.

Dalam artikel ini, pelajari cara mengonfigurasi stasiun kerja pengembangan Python sehingga Anda dapat berinteraksi dengan SQL Server jarak jauh yang diaktifkan untuk pembelajaran mesin dan integrasi Python. Setelah menyelesaikan langkah-langkah dalam artikel ini, Anda akan memiliki pustaka Python yang sama dengan yang ada di SQL Server. Anda juga akan tahu cara mendorong komputasi dari sesi Python lokal ke sesi Python jarak jauh di SQL Server.

Diagram komponen klien-server.

Untuk memvalidasi penginstalan, Anda dapat menggunakan Jupyter Notebooks bawaan seperti yang dijelaskan dalam artikel ini, atau menautkan pustaka ke PyCharm atau IDE lain yang biasanya Anda gunakan.

Alat yang umum digunakan

Baik Anda adalah pengembang Python yang baru menggunakan SQL, atau pengembang SQL yang baru menggunakan Python dan analitik dalam database, Anda akan memerlukan alat pengembangan Python dan editor kueri T-SQL seperti SQL Server Management Studio (SSMS) untuk menjalankan semua kemampuan analitik dalam database.

Untuk pengembangan Python, Anda dapat menggunakan Jupyter Notebooks, yang dibundel dalam distribusi Anaconda yang diinstal oleh SQL Server. Artikel ini menjelaskan cara memulai Jupyter Notebooks sehingga Anda dapat menjalankan kode Python secara lokal dan jarak jauh di SQL Server.

SSMS adalah unduhan terpisah, berguna untuk membuat dan menjalankan prosedur tersimpan di SQL Server, termasuk yang berisi kode Python. Hampir semua kode Python yang Anda tulis di Jupyter Notebooks dapat disematkan dalam prosedur tersimpan. Anda dapat menelusuri mulai cepat lainnya untuk mempelajari tentang SSMS dan Python yang disematkan.

1 - Menginstal paket Python

Stasiun kerja lokal harus memiliki versi paket Python yang sama dengan yang ada di SQL Server, termasuk Anaconda dasar 4.2.0 dengan distribusi Python 3.5.2, dan paket khusus Microsoft.

Skrip penginstalan menambahkan tiga pustaka khusus Microsoft ke klien Python. Skrip diinstal:

  • revoscalepy digunakan untuk menentukan objek sumber data dan konteks komputasi.
  • microsoftml menyediakan algoritma pembelajaran mesin.
  • azureml berlaku untuk tugas operasionalisasi yang terkait dengan konteks server mandiri dan mungkin penggunaan terbatas untuk analitik dalam database.
  1. Unduh skrip penginstalan. Pada halaman GitHub berikut yang sesuai, pilih Unduh file mentah.

  2. Buka jendela PowerShell dengan izin administrator yang ditinggikan (klik kanan Jalankan sebagai administrator).

  3. Buka folder tempat Anda mengunduh alat penginstal dan jalankan skrip. -InstallFolder Tambahkan argumen baris perintah untuk menentukan lokasi folder untuk pustaka. Contohnya:

    cd {{download-directory}}
    .\Install-PyForMLS.ps1 -InstallFolder "C:\path-to-python-for-mls"
    

Jika Anda menghilangkan folder penginstalan, defaultnya adalah %ProgramFiles%\Microsoft\PyForMLS.

Penginstalan membutuhkan waktu untuk menyelesaikannya. Anda dapat memantau kemajuan di jendela PowerShell. Setelah penyiapan selesai, Anda memiliki sekumpulan paket lengkap.

Tip

Kami merekomendasikan FAQ Python untuk Windows untuk tujuan umum informasi tentang menjalankan program Python di Windows.

2 - Temukan executable

Masih di PowerShell, cantumkan konten folder penginstalan untuk mengonfirmasi bahwa Python.exe, skrip, dan paket lainnya diinstal.

  1. Masukkan cd \ untuk masuk ke drive akar, lalu masukkan jalur yang Anda tentukan -InstallFolder di langkah sebelumnya. Jika Anda menghilangkan parameter ini selama penginstalan, defaultnya adalah cd %ProgramFiles%\Microsoft\PyForMLS.

  2. Masukkan dir *.exe untuk mencantumkan executable. Anda akan melihat python.exe, pythonw.exe, dan uninstall-anaconda.exe.

    Cuplikan layar dari terminal PowerShell memperlihatkan daftar executable Python yang dihasilkan dari menjalankan dir *.exe.

Pada sistem yang memiliki beberapa versi Python, ingatlah untuk menggunakan Python.exe khusus ini jika Anda ingin memuat revoscalepy dan paket Microsoft lainnya.

Catatan

Skrip penginstalan tidak mengubah variabel lingkungan PATH di komputer Anda, yang berarti bahwa penerjemah dan modul python baru yang baru saja Anda instal tidak tersedia secara otomatis untuk alat lain yang mungkin Anda miliki. Untuk bantuan dalam menautkan penerjemah dan pustaka Python ke alat, lihat Menginstal IDE.

3 - Buka Jupyter Notebooks

Anaconda menyertakan Jupyter Notebooks. Sebagai langkah berikutnya, buat buku catatan dan jalankan beberapa kode Python yang berisi pustaka yang baru saja Anda instal.

  1. Pada perintah PowerShell, masih di %ProgramFiles%\Microsoft\PyForMLS direktori, buka Jupyter Notebooks dari folder Skrip:

    .\Scripts\jupyter-notebook
    

    Notebook harus terbuka di browser default Anda di https://localhost:8889/tree.

    Cara lain untuk memulai adalah klik dua kali jupyter-notebook.exe.

  2. Pilih Baru lalu pilih Python 3.

    Cuplikan layar dari notebook Jupyter dengan pilihan New Python 3.

  3. Masukkan import revoscalepy dan jalankan perintah untuk memuat salah satu pustaka khusus Microsoft.

  4. Masukkan dan jalankan print(revoscalepy.__version__) untuk mengembalikan informasi versi. Anda akan melihat 9.2.1 atau 9.3.0. Anda dapat menggunakan salah satu versi ini dengan revoscalepy di server.

  5. Masukkan serangkaian pernyataan yang lebih kompleks. Contoh ini menghasilkan statistik ringkasan menggunakan rx_summary melalui himpunan data lokal. Fungsi lain mendapatkan lokasi data sampel dan membuat objek sumber data untuk file .xdf lokal.

    import os
    from revoscalepy import rx_summary
    from revoscalepy import RxXdfData
    from revoscalepy import RxOptions
    sample_data_path = RxOptions.get_option("sampleDataDir")
    print(sample_data_path)
    ds = RxXdfData(os.path.join(sample_data_path, "AirlineDemoSmall.xdf"))
    summary = rx_summary("ArrDelay+DayOfWeek", ds)
    print(summary)
    

Cuplikan layar berikut menunjukkan input dan sebagian output, dipangkas untuk brevity.

Cuplikan layar dari notebook Jupyter memperlihatkan input dan output pencabutan skala.

4 - Mendapatkan izin SQL

Untuk menyambungkan ke instans SQL Server untuk menjalankan skrip dan mengunggah data, Anda harus memiliki login yang valid di server database. Anda dapat menggunakan login SQL atau autentikasi Windows terintegrasi. Kami umumnya menyarankan Agar Anda menggunakan autentikasi terintegrasi Windows, tetapi menggunakan login SQL lebih sederhana untuk beberapa skenario, terutama ketika skrip Anda berisi string koneksi ke data eksternal.

Minimal, akun yang digunakan untuk menjalankan kode harus memiliki izin untuk membaca dari database yang sedang Anda kerjakan, ditambah izin khusus JALANKAN SKRIP EKSTERNAL APA PUN. Sebagian besar pengembang juga memerlukan izin untuk membuat prosedur tersimpan, dan menulis data ke dalam tabel yang berisi data pelatihan atau data yang dinilai.

Minta administrator database untuk mengonfigurasi izin berikut untuk akun Anda, di database tempat Anda menggunakan Python:

  • JALANKAN SKRIP EKSTERNAL APA PUN untuk menjalankan Python di server.
  • db_datareader hak istimewa untuk menjalankan kueri yang digunakan untuk melatih model.
  • db_datawriter menulis data pelatihan atau data yang dinilai.
  • db_owner untuk membuat objek seperti prosedur tersimpan, tabel, fungsi. Anda juga perlu db_owner untuk membuat sampel dan menguji database.

Jika kode Anda memerlukan paket yang tidak diinstal secara default dengan SQL Server, atur dengan administrator database agar paket diinstal dengan instans. SQL Server adalah lingkungan yang aman dan ada batasan di mana paket dapat diinstal. Penginstalan paket ad hoc sebagai bagian dari kode Anda tidak disarankan, bahkan jika Anda memiliki hak. Selain itu, selalu pertimbangkan implikasi keamanan dengan hati-hati sebelum menginstal paket baru di pustaka server.

5 - Membuat data pengujian

Jika Anda memiliki izin untuk membuat database di server jarak jauh, Anda bisa menjalankan kode berikut untuk membuat database demo Iris yang digunakan untuk langkah-langkah yang tersisa dalam artikel ini.

5-1 - Membuat database irissql dari jarak jauh

import pyodbc

# creating a new db to load Iris sample in
new_db_name = "irissql"
connection_string = "Driver=SQL Server;Server=localhost;Database={0};Trusted_Connection=Yes;" 
                        # you can also swap Trusted_Connection for UID={your username};PWD={your password}
cnxn = pyodbc.connect(connection_string.format("master"), autocommit=True)
cnxn.cursor().execute("IF EXISTS(SELECT * FROM sys.databases WHERE [name] = '{0}') DROP DATABASE {0}".format(new_db_name))
cnxn.cursor().execute("CREATE DATABASE " + new_db_name)
cnxn.close()

print("Database created")

5-2 - Mengimpor sampel Iris dari SkLearn

from sklearn import datasets
import pandas as pd

# SkLearn has the Iris sample dataset built in to the package
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)

5-3 - Gunakan API Revoscalepy untuk membuat tabel dan memuat data Iris

from revoscalepy import RxSqlServerData, rx_data_step

# Example of using RX APIs to load data into SQL table. You can also do this with pyodbc
table_ref = RxSqlServerData(connection_string=connection_string.format(new_db_name), table="iris_data")
rx_data_step(input_data = df, output_file = table_ref, overwrite = True)

print("New Table Created: Iris")
print("Sklearn Iris sample loaded into Iris table")

6 - Uji koneksi jarak jauh

Sebelum mencoba langkah berikutnya, pastikan Anda memiliki izin pada instans SQL Server dan string koneksi ke database sampel Iris. Jika database tidak ada dan Anda memiliki izin yang memadai, Anda bisa membuat database menggunakan instruksi sebaris ini.

Ganti string koneksi dengan nilai yang valid. Kode sampel menggunakan "Driver=SQL Server;Server=localhost;Database=irissql;Trusted_Connection=Yes;" tetapi kode Anda harus menentukan server jarak jauh, mungkin dengan nama instans, dan opsi kredensial yang memetakan ke login database.

6-1 Tentukan fungsi

Kode berikut menentukan fungsi yang akan Anda kirim ke SQL Server di langkah selanjutnya. Saat dijalankan, ia menggunakan data dan pustaka (revoscalepy, pandas, matplotlib) di server jarak jauh untuk membuat plot sebar dari himpunan data iris. Ini mengembalikan bytestream .png kembali ke Jupyter Notebooks untuk dirender di browser.

def send_this_func_to_sql():
    from revoscalepy import RxSqlServerData, rx_import
    from pandas.tools.plotting import scatter_matrix
    import matplotlib.pyplot as plt
    import io
    
    # remember the scope of the variables in this func are within our SQL Server Python Runtime
    connection_string = "Driver=SQL Server;Server=localhost;Database=irissql;Trusted_Connection=Yes;"
    
    # specify a query and load into pandas dataframe df
    sql_query = RxSqlServerData(connection_string=connection_string, sql_query = "select * from iris_data")
    df = rx_import(sql_query)
    
    scatter_matrix(df)
    
    # return bytestream of image created by scatter_matrix
    buf = io.BytesIO()
    plt.savefig(buf, format="png")
    buf.seek(0)
    
    return buf.getvalue()

6-2 Kirim fungsi ke SQL Server

Dalam contoh ini, buat konteks komputasi jarak jauh lalu kirim eksekusi fungsi ke SQL Server dengan rx_exec. Fungsi rx_exec berguna karena menerima konteks komputasi sebagai argumen. Fungsi apa pun yang ingin Anda jalankan dari jarak jauh harus memiliki argumen konteks komputasi. Beberapa fungsi, seperti rx_lin_mod mendukung argumen ini secara langsung. Untuk operasi yang tidak, Anda dapat menggunakan rx_exec untuk mengirimkan kode Anda dalam konteks komputasi jarak jauh.

Dalam contoh ini, tidak ada data mentah yang harus ditransfer dari SQL Server ke Jupyter Notebook. Semua komputasi terjadi dalam database Iris dan hanya file gambar yang dikembalikan ke klien.

from IPython import display
import matplotlib.pyplot as plt 
from revoscalepy import RxInSqlServer, rx_exec

# create a remote compute context with connection to SQL Server
sql_compute_context = RxInSqlServer(connection_string=connection_string.format(new_db_name))

# use rx_exec to send the function execution to SQL Server
image = rx_exec(send_this_func_to_sql, compute_context=sql_compute_context)[0]

# only an image was returned to my jupyter client. All data remained secure and was manipulated in my db.
display.Image(data=image)

Cuplikan layar berikut menunjukkan input dan output plot sebar.

Cuplikan layar dari notebook Jupyter memperlihatkan output plot sebar.

7 - Mulai Python dari alat

Karena pengembang sering bekerja dengan beberapa versi Python, penyiapan tidak menambahkan Python ke PATH Anda. Untuk menggunakan Python executable dan pustaka yang diinstal oleh penyiapan, tautkan IDE Anda ke Python.exe di jalur yang juga menyediakan revoscalepy dan microsoftml.

Baris perintah

Saat Anda menjalankan Python.exe dari %ProgramFiles%\Microsoft\PyForMLS (atau lokasi apa pun yang Anda tentukan untuk penginstalan pustaka klien Python), Anda memiliki akses ke distribusi Anaconda lengkap ditambah modul Microsoft Python, revoscalepy, dan microsoftml.

  1. Buka dan jalankan %ProgramFiles%\Microsoft\PyForMLS Python.exe.
  2. Buka bantuan interaktif: help().
  3. Ketik nama modul pada perintah bantuan: help> revoscalepy. Bantuan mengembalikan nama, konten paket, versi, dan lokasi file.
  4. Kembalikan informasi versi dan paket pada prompt bantuan> : revoscalepy. Tekan Enter beberapa kali untuk keluar dari bantuan.
  5. Impor modul: import revoscalepy.

Jupyter Notebooks

Artikel ini menggunakan Jupyter Notebooks bawaan untuk menunjukkan panggilan fungsi untuk mencabut skala. Jika Anda baru menggunakan alat ini, cuplikan layar berikut menggambarkan bagaimana potongan-potongan cocok bersama dan mengapa semuanya "hanya berfungsi".

Folder %ProgramFiles%\Microsoft\PyForMLS induk berisi Anaconda ditambah paket Microsoft. Jupyter Notebooks disertakan dalam Anaconda, di bawah folder Skrip, dan executable Python terdaftar otomatis dengan Jupyter Notebooks. Paket yang ditemukan di bawah paket situs dapat diimpor ke dalam buku catatan, termasuk tiga paket Microsoft yang digunakan untuk ilmu data dan pembelajaran mesin.

Cuplikan layar dari penjelajah Windows memperlihatkan folder yang dapat dieksekusi dan pustaka.

Jika Anda menggunakan IDE lain, Anda harus menautkan executable Python dan pustaka fungsi ke alat Anda. Bagian berikut ini menyediakan instruksi untuk alat yang umum digunakan.

Visual Studio

Jika Anda memiliki Python di Visual Studio, gunakan opsi konfigurasi berikut untuk membuat lingkungan Python yang menyertakan paket Microsoft Python.

Pengaturan Konfigurasi value
Jalur prefiks %ProgramFiles%\Microsoft\PyForMLS
Jalur Interpreter %ProgramFiles%\Microsoft\PyForMLS\python.exe
Interpreter berjendela %ProgramFiles%\Microsoft\PyForMLS\pythonw.exe

Untuk bantuan dalam mengonfigurasi lingkungan Python, lihat Mengelola lingkungan Python di Visual Studio.

PyCharm

Di PyCharm, atur interpreter ke Python executable yang terinstal.

  1. Di proyek baru, di Pengaturan, pilih Tambahkan Lokal.

  2. Memasuki %ProgramFiles%\Microsoft\PyForMLS\.

Anda sekarang dapat mengimpor modul revoscalepy, microsoftml, atau azureml . Anda juga dapat memilih Alat>Python Console untuk membuka jendela interaktif.