Aracılığıyla paylaş


Hızlı Başlangıç: SQL machine learning ile basit Python betikleri çalıştırma

Şunlar için geçerlidir: SQL Server 2017 (14.x) ve sonraki sürümleri Azure SQL Yönetimli Örnek

Bu hızlı başlangıç kılavuzunda, SQL Server Makine Öğrenimi Hizmetleri, Azure SQL Yönetilen Örnek Makine Öğrenimi Hizmetleri veya SQL Server Büyük Veri Kümeleri kullanarak bir dizi basit Python betiği çalıştıracaksınız. SQL Server örneğinde betiği çalıştırmak için sp_execute_external_script saklı yordamını nasıl kullanacağınızı öğreneceksiniz.

Önkoşullar

Bu hızlı başlangıcı çalıştırmak için aşağıdaki önkoşullara ihtiyacınız vardır.

Basit bir betik çalıştırın

Python betiğini çalıştırmak için bunu sistem saklı yordamına bağımsız değişken olarak geçireceksiniz sp_execute_external_script. Bu sistem saklı yordamı, SQL makine öğrenmesi bağlamında Python çalışma zamanını başlatır, verileri Python'a geçirir, Python kullanıcı oturumlarını güvenli bir şekilde yönetir ve tüm sonuçları istemciye döndürür.

Aşağıdaki adımlarda, bu örnek Python betiğini veritabanınızda çalıştıracaksınız:

a = 1
b = 2
c = a/b
d = a*b
print(c, d)
  1. Azure Data Studio'da SQL örneğine bağlı yeni bir sorgu penceresi açın.

  2. Python betiğinin tamamını saklı yordamına sp_execute_external_script geçirin.

    Betik @script bağımsız değişkeni aracılığıyla iletilir. Bağımsız değişken içindeki @script her şey geçerli Bir Python kodu olmalıdır.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    d = a*b
    print(c, d)
    '
    
  3. Doğru sonuç hesaplanır ve Python print işlevi sonucu İletiler penceresine döndürür.

    Şuna benzer bir şey olmalı.

    Results

    STDOUT message(s) from external script:
    0.5 2
    

Merhaba Dünya betiğini çalıştırın

Tipik bir örnek betik, yalnızca "Hello World" dizesini veren betiktir. Aşağıdaki komutu çalıştırın.

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'OutputDataSet = InputDataSet'
    , @input_data_1 = N'SELECT 1 AS hello'
WITH RESULT SETS(([Hello World] INT));
GO

sp_execute_external_script saklı yordamına girişler şunlardır:

Veri Girişi Description
@language çağrılacak dil uzantısını tanımlar, bu durumda Python
@script Python çalışma zamanına geçirilen komutları tanımlar. Python betiğinizin tamamı, Unicode metin olarak bu argüman içinde çevrelenmelidir. Ayrıca metni nvarchar türünde bir değişkene ekleyebilir ve ardından değişkeni çağırabilirsiniz
@input_data_1 sorgu tarafından döndürülen veriler, verileri veri çerçevesi olarak döndüren Python çalışma zamanına geçirilir
SONUÇ KÜMELERIYLE yan tümcesi, SQL makine öğrenmesi için döndürülen veri tablosunun şemasını tanımlar ve veri türü için sütun adı olan int olarak "Hello World" ekler

Komut aşağıdaki metni verir:

Hello World
1

Girişleri ve çıkışları kullanma

Varsayılan olarak, sp_execute_external_script giriş olarak tek bir veri kümesini kabul eder ve bu veri kümesini genellikle geçerli bir SQL sorgusu biçiminde sağlarsınız. Ardından çıkış olarak tek bir Python veri çerçevesi döndürür.

Şimdilik şunun varsayılan giriş ve çıkış değişkenlerini sp_execute_external_scriptkullanalım: InputDataSet ve OutputDataSet.

  1. Test verilerinden oluşan küçük bir tablo oluşturun.

    CREATE TABLE PythonTestData (col1 INT NOT NULL)
    
    INSERT INTO PythonTestData
    VALUES (1);
    
    INSERT INTO PythonTestData
    VALUES (10);
    
    INSERT INTO PythonTestData
    VALUES (100);
    GO
    
  2. SELECT Tabloyu sorgulamak için deyimini kullanın.

    SELECT *
    FROM PythonTestData
    

    Results

    PythonTestData tablosunun içeriği

  3. Aşağıdaki Python betiğini çalıştırın. deyimini kullanarak SELECT tablodan verileri alır, Python çalışma zamanından geçirir ve verileri bir veri çerçevesi olarak döndürür. WITH RESULT SETS yan tümcesi, NewColName sütun adını ekleyerek SQL için döndürülen veri tablosunun şemasını tanımlar.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'OutputDataSet = InputDataSet;'
        , @input_data_1 = N'SELECT * FROM PythonTestData;'
    WITH RESULT SETS(([NewColName] INT NOT NULL));
    

    Results

    Tablodan veri döndüren Python betiğinden çıktı

  4. Şimdi giriş ve çıkış değişkenlerinin adlarını değiştirin. Varsayılan giriş ve çıkış değişkeni adları InputDataSet ve OutputDataSet'dir; aşağıdaki betik adları SQL_in ve SQL_out olarak değiştirir:

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'SQL_out = SQL_in;'
        , @input_data_1 = N'SELECT 12 as Col;'
        , @input_data_1_name  = N'SQL_in'
        , @output_data_1_name = N'SQL_out'
    WITH RESULT SETS(([NewColName] INT NOT NULL));
    

    Python'ın büyük/küçük harfe duyarlı olduğunu unutmayın. Python betiğinde kullanılan giriş ve çıkış değişkenlerinin (SQL_out, SQL_in) @input_data_1_name ve @output_data_1_name ile tanımlanan adlarla, harf büyüklüğü dahil, uyum sağlaması gerekir.

    Tavsiye

    Parametre olarak yalnızca bir giriş veri kümesi geçirilebilir ve yalnızca bir veri kümesi döndürebilirsiniz. Ancak Python kodunuzun içinden diğer veri kümelerini çağırabilir ve veri kümesine ek olarak diğer türlerin çıkışlarını döndürebilirsiniz. Output anahtar sözcüğünü sonuçlarla birlikte döndürmek için herhangi bir parametreye de ekleyebilirsiniz.

  5. Giriş verileri olmadan (@input_data_1 boş olarak ayarlanmış) Python betiğini kullanarak da değerler oluşturabilirsiniz.

    Aşağıdaki betikte "hello" ve "world" metinleri görüntülenir.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    import pandas as pd
    mytextvariable = pandas.Series(["hello", " ", "world"]);
    OutputDataSet = pd.DataFrame(mytextvariable);
    '
        , @input_data_1 = N''
    WITH RESULT SETS(([Col1] CHAR(20) NOT NULL));
    

    Results

    @script girişi kullanarak sorgu sonuçlarını elde edin" />

Tavsiye

Python, deyimleri gruplandırmak için öndeki boşlukları kullanır. Bu nedenle, yerleşik Python betiği önceki betikte olduğu gibi birden çok satıra yayıldığında, Python komutlarını SQL komutlarıyla uyumlu olacak şekilde girintili hale getirmeye çalışmayın. Örneğin, bu betik bir hata verecektir:

EXECUTE sp_execute_external_script @language = N'Python'
      , @script = N'
      import pandas as pd
      mytextvariable = pandas.Series(["hello", " ", "world"]);
      OutputDataSet = pd.DataFrame(mytextvariable);
      '
      , @input_data_1 = N''
WITH RESULT SETS(([Col1] CHAR(20) NOT NULL));

Python sürümünü denetleme

Sunucunuzda hangi Python sürümünün yüklü olduğunu görmek istiyorsanız aşağıdaki betiği çalıştırın.

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import sys
print(sys.version)
'
GO

Python print işlevi sürümü İletiler penceresine döndürür. Aşağıdaki örnek çıktıda, bu örnekte Python sürüm 3.5.2'nin yüklü olduğunu görebilirsiniz.

Results

STDOUT message(s) from external script:
3.5.2 |Continuum Analytics, Inc.| (default, Jul  5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]

Python paketlerini listeleme

Microsoft, SQL Server 2016 (13.x), SQL Server 2017 (14.x) ve SQL Server 2019 (15.x) içinde Machine Learning Services ile önceden yüklenmiş bir dizi Python paketi sağlar. SQL Server 2022'de (16.x), istediğiniz özel Python çalışma zamanlarını ve paketlerini indirip yükleyebilirsiniz.

Sürüm dahil olmak üzere hangi Python paketlerinin yüklendiğinin listesini görmek için aşağıdaki betiği çalıştırın.

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import pkg_resources
import pandas
dists = [str(d) for d in pkg_resources.working_set]
OutputDataSet = pandas.DataFrame(dists)
'
WITH RESULT SETS(([Package] NVARCHAR(max)))
GO

Liste Python'dandır pkg_resources.working_set ve veri çerçevesi olarak SQL'e döndürülür.

Sonraki Adımlar

SQL makine öğrenmesinde Python kullanırken veri yapılarını kullanmayı öğrenmek için şu hızlı başlangıcı izleyin: