Menyiapkan klien ilmu data untuk pengembangan Python di SQL Server Machine Learning 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 Layanan Pembelajaran Mesin (Dalam 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.

Komponen server klien

Untuk memvalidasi penginstalan, Anda dapat menggunakan Jupyter Notebook 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 pada 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 4.2.0 dasar dengan distribusi Python 3.5.2, dan paket khusus Microsoft.

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

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

  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 informasi tujuan umum 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.

    Daftar executable Python

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 memodifikasi variabel lingkungan PATH di komputer Anda, yang berarti bahwa interpreter dan modul python baru yang baru saja Anda instal tidak tersedia secara otomatis untuk alat lain yang mungkin Anda miliki. Untuk bantuan tentang 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
    

    Buku catatan 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.

    jupyter notebook 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 keringkasan.

jupyter notebook memperlihatkan input dan output revoscalepy

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 EXECUTE ANY EXTERNAL SCRIPT. Sebagian besar pengembang juga memerlukan izin untuk membuat prosedur tersimpan, dan menulis data ke dalam tabel yang berisi data pelatihan atau data skor.

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 untuk menulis data pelatihan atau data skor.
  • db_owner untuk membuat objek seperti prosedur tersimpan, tabel, fungsi. Anda juga memerlukan db_owner untuk membuat database sampel dan pengujian.

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 dengan cermat implikasi keamanan 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. Ketika 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 output plot input dan sebar.

jupyter notebook 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 eksekusi Python 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\PyForMLSPython.exe.
  2. Buka bantuan interaktif: help().
  3. Ketik nama modul pada prompt bantuan: help> revoscalepy. Bantuan mengembalikan nama, konten paket, versi, dan lokasi file.
  4. Kembalikan informasi versi dan paket pada permintaan bantuan> : revoscalepy. Tekan Enter beberapa kali untuk keluar dari bantuan.
  5. Mengimpor modul: import revoscalepy.

Jupyter Notebooks

Artikel ini menggunakan Jupyter Notebook bawaan untuk menunjukkan panggilan fungsi untuk mencabut skala. Jika Anda baru menggunakan alat ini, cuplikan layar berikut menggambarkan bagaimana potongan-potongan tersebut 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 didaftarkan secara 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.

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 nilai
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 diinstal.

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

  2. Masukkan %ProgramFiles%\Microsoft\PyForMLS\.

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

Langkah berikutnya

Sekarang setelah Anda memiliki alat dan koneksi kerja untuk SQL Server, perluas keterampilan Anda dengan menjalankan mulai cepat Python menggunakan SQL Server Management Studio (SSMS).