Masalah umum untuk Python dan R di SQL Server Pembelajaran Mesin Services

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru

Penting

Dukungan untuk Pembelajaran Mesin Server (sebelumnya dikenal sebagai R Server) berakhir pada 1 Juli 2022. Untuk informasi selengkapnya, lihat Apa yang terjadi pada server Pembelajaran Mesin?

Artikel ini menjelaskan masalah atau batasan yang diketahui dengan komponen Python dan R yang disediakan di SQL Server Pembelajaran Mesin Services dan SQL Server 2016 R Services.

Masalah penyiapan dan konfigurasi

Untuk deskripsi proses yang terkait dengan penyiapan dan konfigurasi awal, lihat Menginstal SQL Server Pembelajaran Mesin Services. Ini berisi informasi tentang peningkatan, penginstalan berdampingan, dan penginstalan komponen R atau Python baru.

Hasil yang tidak konsisten dalam komputasi MKL karena variabel lingkungan yang hilang

Berlaku untuk: R_SERVER biner 9.0, 9.1, 9.2 atau 9.3.

R_SERVER menggunakan Intel Math Kernel Library (MKL). Untuk komputasi yang melibatkan MKL, hasil yang tidak konsisten dapat terjadi jika sistem Anda kehilangan variabel lingkungan.

Atur variabel 'MKL_CBWR'=AUTO lingkungan untuk memastikan reproduktifitas numerik bersyarat dalam R_SERVER. Untuk informasi selengkapnya, lihat Pengantar Reproduktif Numerik Bersyar (CNR).

Solusi Sementara

  1. Di Panel Kontrol, pilih Sistem Sistem dan Keamanan>>Sistem Tingkat Lanjut Pengaturan> Variabel Pengaktifan.

  2. Buat variabel Pengguna atau Sistem baru.

    • Atur Variabel ke MKL_CBWR.
    • Atur Nilai ke AUTO.
  3. Mulai ulang R_SERVER. Di SQL Server, Anda dapat memulai ulang Layanan Launchpad SQL Server.

Catatan

Jika Anda menjalankan SQL Server 2019 (15.x) di Linux, edit atau buat .bash_profile di direktori beranda pengguna Anda, tambahkan baris export MKL_CBWR="AUTO". Jalankan file ini dengan mengetik source .bash_profile pada prompt perintah bash. Mulai ulang R_SERVER dengan mengetik Sys.getenv() pada prompt perintah R.

Kesalahan runtime skrip R (SQL Server 2017 CU 5 - regresi CU 7)

Untuk SQL Server 2017 (14.x), dalam pembaruan kumulatif 5 hingga 7, ada regresi dalam file rlauncher.config di mana jalur file direktori sementara menyertakan ruang. Regresi ini dikoreksi di CU 8.

Kesalahan yang akan Anda lihat saat menjalankan skrip R menyertakan pesan berikut:

Tidak dapat berkomunikasi dengan runtime untuk skrip 'R'. Silakan periksa persyaratan runtime 'R'.

Pesan STDERR dari skrip eksternal:

Kesalahan fatal: tidak dapat membuat 'R_TempDir'

Solusi Sementara

Terapkan CU 8 saat tersedia. Atau, Anda dapat membuat rlauncher.config ulang dengan menjalankan registerrext dengan hapus instalan/instal pada prompt perintah yang ditinggikan.

<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRExt.exe /uninstall /sqlbinnpath:<SQLInstanceBinnPath> /userpoolsize:0 /instance:<SQLInstanceName>

<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRExt.exe /install /sqlbinnpath:<SQLInstanceBinnPath> /userpoolsize:0 /instance:<SQLInstanceName>

Contoh berikut menunjukkan perintah dengan instans default "MSSQL14. MSSQLSERVER" diinstal ke dalam C:\Program Files\Microsoft SQL Server\:

"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRext.exe" /uninstall /sqlbinnpath:"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn" /userpoolsize:0 /instance:MSSQLSERVER

"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRext.exe" /install /sqlbinnpath:"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn" /userpoolsize:0 /instance:MSSQLSERVER

Tidak dapat menginstal fitur pembelajaran mesin SQL Server pada pengendali domain

Jika Anda mencoba menginstal Layanan R SQL Server 2016 (13.x) atau Layanan Pembelajaran Mesin SQL Server pada pengendali domain, penyetelan gagal, dengan kesalahan ini:

Terjadi kesalahan selama proses penyiapan fitur

Tidak dapat menemukan grup dengan identitas

Kode kesalahan komponen: 0x80131509

Kegagalan terjadi karena, pada pengontrol domain, layanan tidak dapat membuat 20 akun lokal yang diperlukan untuk menjalankan pembelajaran mesin. Secara umum, kami tidak menyarankan untuk menginstal SQL Server pada pengendali domain. Untuk informasi selengkapnya, lihat Buletin dukungan 2032911.

Instal rilis layanan terbaru untuk memastikan kompatibilitas dengan Klien Microsoft R

Jika Anda menginstal versi terbaru Klien Microsoft R dan menggunakannya untuk menjalankan R di SQL Server dalam konteks komputasi jarak jauh, Anda mungkin mendapatkan kesalahan seperti berikut ini:

Anda menjalankan Microsoft R Client versi 9.x.x di komputer Anda, yang tidak kompatibel dengan Microsoft R Server versi 8.x.x. Unduh dan instal versi yang kompatibel.

SQL Server 2016 (13.x) mengharuskan pustaka R pada klien sama persis dengan pustaka R di server. Pembatasan telah dihapus untuk rilis lebih lambat dari R Server 9.0.1. Namun, jika Anda mengalami kesalahan ini, verifikasi versi pustaka R yang digunakan oleh klien Anda dan server dan, jika perlu, perbarui klien agar sesuai dengan versi server.

Versi R yang diinstal dengan SQL Server R Services diperbarui setiap kali rilis layanan SQL Server diinstal. Untuk memastikan bahwa Anda selalu memiliki versi terbaru komponen R, pastikan untuk menginstal semua paket layanan.

Anda mungkin menerima pesan kesalahan saat menjalankan R Server 8.0.3 di SQL Server 2016: You are running version 9.0.0 of Microsoft R client on your computer, which is incompatible with the Microsoft R server version 8.0.3. Download and install a compatible version. Kompatibilitas dengan Klien Microsoft R 9.0.0 di SQL Server 2016 dipastikan dalam patch berikut:

Untuk menghindari masalah dengan paket R, Anda juga dapat meningkatkan versi pustaka R yang diinstal di server, dengan mengubah perjanjian layanan Anda untuk menggunakan kebijakan Dukungan Siklus Hidup Modern, seperti yang dijelaskan di bagian berikutnya. Saat Anda melakukannya, versi R yang diinstal dengan SQL Server diperbarui pada jadwal yang sama yang digunakan untuk pembaruan Pembelajaran Mesin Server (sebelumnya Microsoft R Server).

Berlaku untuk: Layanan R SQL Server 2016 (13.x), dengan R Server versi 9.0.0 atau yang lebih lama

Komponen R hilang dari penyiapan SQL Server 2017 CU 3

Sejumlah terbatas komputer virtual Azure disediakan tanpa file penginstalan R yang harus disertakan dengan SQL Server. Masalah ini berlaku untuk komputer virtual yang disediakan dalam periode 2018-01-05 hingga 2018-01-23. Masalah ini mungkin juga memengaruhi penginstalan lokal, jika Anda menerapkan pembaruan CU 3 untuk SQL Server 2017 (14.x) selama periode dari 2018-01-05 hingga 2018-01-23.

Rilis layanan telah disediakan yang menyertakan versi file penginstalan R yang benar.

Untuk menginstal komponen dan memperbaiki SQL Server 2017 (14.x) CU 3, Anda harus menghapus instalasi CU 3, dan menginstal ulang versi yang diperbarui:

  1. Unduh file penginstalan CU 3 yang diperbarui, yang mencakup penginstal R.
  2. Hapus instalan CU 3. Di Panel Kontrol, cari Hapus instalan pembaruan, lalu pilih "Hotfix 3015 untuk SQL Server 2017 (KB4052987) (64-bit)". Lanjutkan dengan langkah-langkah penghapusan instalasi.
  3. Instal ulang pembaruan CU 3, dengan mengklik dua kali pada pembaruan untuk KB4052987 yang Anda unduh: SQLServer2017-KB4052987-x64.exe. Ikuti petunjuk penginstalan.

Tidak dapat menginstal komponen Python dalam penginstalan offline SQL Server 2017 atau yang lebih baru

Jika Anda menginstal versi pra-rilis SQL Server 2017 (14.x) di komputer tanpa akses internet, penginstal mungkin gagal menampilkan halaman yang meminta lokasi komponen Python yang diunduh. Dalam instans seperti itu, Anda dapat menginstal fitur Pembelajaran Mesin Services, tetapi bukan komponen Python.

Masalah ini diperbaiki dalam versi rilis. Selain itu, batasan ini tidak berlaku untuk komponen R.

Berlaku untuk: SQL Server 2017 (14.x) dengan Python

Peringatkan versi yang tidak kompatibel saat Anda tersambung ke versi SQL Server R Services yang lebih lama dari klien dengan menggunakan SQL Server 2017

Saat Anda menjalankan kode R dalam konteks komputasi SQL Server 2016 (13.x), Anda mungkin melihat kesalahan berikut:

Anda menjalankan Microsoft R Client versi 9.0.0 di komputer Anda, yang tidak kompatibel dengan Microsoft R Server versi 8.0.3. Unduh dan instal versi yang kompatibel.

Pesan ini ditampilkan jika salah satu dari dua pernyataan berikut ini benar:

  • Anda menginstal R Server (Standalone) pada komputer klien dengan menggunakan wizard penyiapan untuk SQL Server 2017 (14.x).
  • Anda menginstal Microsoft R Server dengan menggunakan alat penginstal Windows terpisah.

Untuk memastikan bahwa server dan klien menggunakan versi yang sama yang mungkin perlu Anda gunakan pengikatan, didukung untuk rilis Microsoft R Server 9.0 dan yang lebih baru, untuk meningkatkan komponen R di instans SQL Server 2016 (13.x). Untuk menentukan apakah dukungan untuk peningkatan tersedia untuk versi Layanan R Anda, lihat Meningkatkan instans Layanan R menggunakan SqlBindR.exe.

Berlaku untuk: Layanan R SQL Server 2016 (13.x), dengan R Server versi 9.0.0 atau yang lebih lama

Penyiapan untuk rilis layanan SQL Server 2016 mungkin gagal menginstal versi komponen R yang lebih baru

Saat Anda menginstal pembaruan kumulatif atau menginstal paket layanan untuk SQL Server 2016 (13.x) di komputer yang tidak tersambung ke internet, wizard penyetelan mungkin gagal menampilkan perintah yang memungkinkan Anda memperbarui komponen R dengan menggunakan file CAB yang diunduh. Kegagalan ini biasanya terjadi ketika beberapa komponen dipasang bersama dengan mesin database.

Sebagai solusinya, Anda dapat menginstal rilis layanan dengan menggunakan baris perintah dan menentukan MRCACHEDIRECTORY argumen seperti yang ditunjukkan dalam contoh ini, yang menginstal pembaruan CU 1:

C:\<path to installation media>\SQLServer2016-KB3164674-x64.exe /Action=Patch /IACCEPTROPENLICENSETERMS /MRCACHEDIRECTORY=<path to CU 1 CAB files>

Untuk mendapatkan penginstal terbaru, lihat Menginstal komponen pembelajaran mesin tanpa akses internet.

Berlaku untuk: Layanan R SQL Server 2016 (13.x), dengan R Server versi 9.0.0 atau yang lebih lama

Layanan Launchpad gagal dimulai jika versinya berbeda dari versi R

Jika Anda menginstal SQL Server R Services secara terpisah dari mesin database, dan versi build berbeda, Anda mungkin melihat kesalahan berikut di log Peristiwa Sistem:

Layanan Launchpad SQL Server gagal dimulai karena kesalahan berikut: Layanan tidak merespons permintaan mulai atau kontrol secara tepat waktu.

Misalnya, kesalahan ini mungkin terjadi jika Anda menginstal mesin database dengan menggunakan versi rilis, menerapkan patch untuk meningkatkan mesin database, lalu menambahkan fitur Layanan R dengan menggunakan versi rilis.

Untuk menghindari masalah ini, gunakan utilitas seperti File Manager untuk membandingkan versi Launchpad.exe dengan versi biner SQL, seperti sqldk.dll. Semua komponen harus memiliki nomor versi yang sama. Jika Anda meningkatkan satu komponen, pastikan untuk menerapkan peningkatan yang sama ke semua komponen terinstal lainnya.

Cari Launchpad di Binn folder untuk instans. Misalnya, dalam penginstalan default SQL Server 2016 (13.x), jalurnya mungkin .C:\Program Files\Microsoft SQL Server\MSSQL.13.InstanceNameMSSQL\Binn

Konteks komputasi jarak jauh diblokir oleh firewall di instans SQL Server yang berjalan di komputer virtual Azure

Jika Anda telah menginstal SQL Server pada komputer virtual Azure, Anda mungkin tidak dapat menggunakan konteks komputasi yang memerlukan penggunaan ruang kerja komputer virtual. Alasannya adalah bahwa, secara default, firewall di komputer virtual Azure menyertakan aturan yang memblokir akses jaringan untuk akun pengguna R lokal.

Sebagai solusinya, pada Azure VM, buka Windows Firewall dengan Keamanan Tingkat Lanjut, pilih Aturan Keluar, dan nonaktifkan aturan berikut: Blokir akses jaringan untuk akun pengguna lokal R di instans SQL Server MSSQLSERVER. Anda juga dapat membiarkan aturan diaktifkan, tetapi mengubah properti keamanan menjadi Izinkan jika aman.

Autentikasi tersirat dalam edisi Ekspres SQL Server 2016

Saat Anda menjalankan pekerjaan R dari stasiun kerja ilmu data jarak jauh dengan menggunakan autentikasi Windows Terintegrasi, SQL Server menggunakan autentikasi tersirat untuk menghasilkan panggilan ODBC lokal yang mungkin diperlukan oleh skrip. Namun, fitur ini tidak berfungsi di build RTM edisi Ekspres SQL Server 2016 (13.x).

Untuk memperbaiki masalah ini, kami sarankan Anda meningkatkan ke rilis layanan yang lebih baru. Jika peningkatan tidak memungkinkan, sebagai solusinya, gunakan login SQL untuk menjalankan pekerjaan R jarak jauh yang mungkin memerlukan panggilan ODBC yang disematkan.

Berlaku untuk: Edisi Ekspres Layanan R SQL Server 2016 (13.x)

Batas performa saat pustaka yang digunakan oleh SQL Server dipanggil dari alat lain

Dimungkinkan untuk memanggil pustaka pembelajaran mesin yang diinstal untuk SQL Server dari aplikasi eksternal, seperti RGui. Melakukannya mungkin cara paling mudah untuk menyelesaikan tugas tertentu, seperti menginstal paket baru, atau menjalankan pengujian ad hoc pada sampel kode yang sangat singkat. Namun, di luar SQL Server, performa mungkin terbatas.

Misalnya, bahkan jika Anda menggunakan SQL Server edisi Enterprise, R berjalan dalam mode utas tunggal saat Anda menjalankan kode R dengan menggunakan alat eksternal. Untuk mendapatkan manfaat performa di SQL Server, mulai koneksi SQL Server dan gunakan sp_execute_external_script untuk memanggil runtime skrip eksternal.

Secara umum, hindari memanggil pustaka pembelajaran mesin yang digunakan oleh SQL Server dari alat eksternal. Jika Anda perlu men-debug kode R atau Python, biasanya lebih mudah untuk melakukannya di luar SQL Server. Untuk mendapatkan pustaka yang sama yang ada di SQL Server, Anda dapat menginstal Klien Microsoft R atau SQL Server 2017 Pembelajaran Mesin Server (Mandiri).

Alat Data SQL Server tidak mendukung izin yang diperlukan oleh skrip eksternal

Saat Anda menggunakan Visual Studio atau SQL Server Data Tools untuk menerbitkan proyek database, jika ada prinsipal yang memiliki izin khusus untuk eksekusi skrip eksternal, Anda mungkin mendapatkan kesalahan seperti ini:

Model TSQL: Kesalahan terdeteksi saat merekayasa balik database. Izin tidak dikenali dan tidak diimpor.

Saat ini model DACPAC tidak mendukung izin yang digunakan oleh Layanan R atau Layanan Pembelajaran Mesin, seperti GRANT ANY EXTERNAL SCRIPT, atau EXECUTE ANY EXTERNAL SCRIPT. Masalah ini akan diperbaiki dalam rilis selanjutnya.

Sebagai solusinya, jalankan pernyataan tambahan GRANT dalam skrip pasca-penyebaran.

Eksekusi skrip eksternal dibatasi karena nilai default tata kelola sumber daya

Di edisi Enterprise, Anda dapat menggunakan kumpulan sumber daya untuk mengelola proses skrip eksternal. Dalam beberapa build rilis awal, memori maksimum yang dapat dialokasikan untuk proses R adalah 20 persen. Oleh karena itu, jika server memiliki RAM 32 GB, R yang dapat dieksekusi (RTerm.exe dan BxlServer.exe) dapat menggunakan maksimum 6,4 GB dalam satu permintaan.

Jika Anda mengalami batasan sumber daya, periksa default saat ini. Jika 20 persen tidak cukup, lihat dokumentasi untuk SQL Server tentang cara mengubah nilai ini.

Berlaku untuk: SQL Server 2016 (13.x) R Services, edisi Enterprise

Kesalahan saat menggunakan sp_execute_external_script tanpa libc++.so di Linux

Pada komputer Linux bersih yang belum libc++.so diinstal, menjalankan sp_execute_external_script kueri (SPEES) dengan Java atau bahasa eksternal gagal karena commonlauncher.so gagal memuat libc++.so.

Misalnya:

EXECUTE sp_execute_external_script @language = N'Java'
    , @script = N'JavaTestPackage.PassThrough'
    , @parallel = 0
    , @input_data_1 = N'select 1'
WITH RESULT SETS((col1 INT NOT NULL));
GO

Ini gagal dengan pesan yang mirip dengan yang berikut ini:

Msg 39012, Level 16, State 14, Line 0

Unable to communicate with the runtime for 'Java' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'Java' runtime.

Log mssql-launchpadd akan menampilkan pesan kesalahan yang mirip dengan yang berikut ini:

Oct 18 14:03:21 sqlextmls launchpadd[57471]: [launchpad] 2019/10/18 14:03:21 WARNING: PopulateLauncher failed: Library /opt/mssql-extensibility/lib/commonlauncher.so not loaded. Error: libc++.so.1: cannot open shared object file: No such file or directory

Solusi Sementara

Anda dapat melakukan salah satu solusi berikut:

  1. Salin libc++* dari /opt/mssql/lib ke jalur sistem default /lib64

  2. Tambahkan entri berikut untuk /var/opt/mssql/mssql.conf mengekspos jalur:

    [extensibility]
    readabledirectories = /opt/mssql
    

Berlaku untuk: SQL Server 2019 (15.x) di Linux

Kesalahan penginstalan atau peningkatan pada server yang diaktifkan FIPS

Jika Anda menginstal SQL Server 2019 (15.x) dengan fitur Pembelajaran Mesin Layanan dan Ekstensi Bahasa atau meningkatkan instans SQL Server pada server yang diaktifkan Federal Information Processing Standard (FIPS), Anda akan menerima kesalahan berikut:

Terjadi kesalahan saat menginstal fitur ekstensibilitas dengan pesan kesalahan: Pembuatan AppContainer Gagal dengan pesan kesalahan NONE, menyatakan Implementasi ini bukan bagian dari algoritma kriptografi yang divalidasi Windows Platform FIPS.

Solusi Sementara

Nonaktifkan FIPS sebelum penginstalan SQL Server 2019 (15.x) dengan fitur Pembelajaran Mesin Layanan dan Ekstensi Bahasa atau peningkatan instans SQL Server. Setelah penginstalan atau peningkatan selesai, Anda dapat mengaktifkan kembali FIPS.

Berlaku untuk: SQL Server 2019 (15.x)

Pustaka R menggunakan algoritma, streaming, atau partisi tertentu

Masalah

Batasan berikut berlaku pada SQL Server 2017 (14.x) dengan peningkatan runtime. Masalah ini berlaku untuk edisi Enterprise.

  • Paralelisme: RevoScaleR dan MicrosoftML paralelisme utas algoritma untuk skenario dibatasi hingga maksimum dua utas.
  • Streaming & partisi: Skenario yang melibatkan @r_rowsPerRead parameter yang diteruskan ke T-SQL sp_execute_external_script tidak diterapkan.
  • Streaming & partisi: RevoScaleR dan MicrosoftML sumber data (yaitu, ODBC, XDF) tidak mendukung baris baca dalam gugus untuk skenario pelatihan atau penilaian. Skenario ini selalu membawa semua data ke memori untuk komputasi dan operasi terikat memori

Solution

Solusi terbaik adalah meningkatkan ke SQL Server 2019 (15.x). Atau Anda dapat terus menggunakan SQL Server 2017 (14.x) dengan peningkatan runtime yang dikonfigurasi menggunakan RegisterRext.exe /configure, setelah Anda menyelesaikan tugas berikut.

  1. Edit registri untuk membuat kunci Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\150 dan menambahkan nilai SharedCode dengan data C:\Program Files\Microsoft SQL Server\150\Shared atau direktori bersama instans, seperti yang dikonfigurasi.
  2. Buat folder C:\Program Files\Microsoft SQL Server\150\Shared and copy instapi140.dll dari folder C:\Program Files\Microsoft SQL Server\140\Shared ke folder yang baru dibuat.
  3. Ganti nama menjadi instapi140.dllinstapi150.dll di folder C:\Program Files\Microsoft SQL Server\150\Sharedbaru .

Penting

Jika Anda melakukan langkah-langkah di atas, Anda harus menghapus kunci yang ditambahkan secara manual sebelum memutakhirkan ke versi SQL Server yang lebih baru.

Masalah performa Pengumpulan Proses di Layanan ML (R dan Python)

Bagian ini berisi masalah dan solusi yang diketahui untuk menggunakan layanan ML (R dan Python) di SQL Server.

Kinerja Awal Dingin Pengumpulan Proses di Layanan ML

Setelah eksekusi sp_execute_external_script, layanan launchpad meluncurkan proses satelit yang memulai runtime eksternal seperti R dan Python. Untuk mengamortisasi biaya startup, kumpulan proses dibuat yang dapat digunakan dalam eksekusi berikutnya dari sp_execute_external_script. Kumpulan proses ini khusus untuk pengguna ini, database, dan bahasa yang digunakan (R atau Python dalam Layanan ML).

Eksekusi kueri pertama

Proses satelit perlu dihangatkan ketika sp_execute_external_script dijalankan untuk pertama kalinya atau setelah periode waktu diam (proses dihentikan melalui tugas pembersihan jika tidak digunakan untuk sementara waktu). Awal dingin dari proses terkumpulan tersebut mungkin lambat (misalnya, karena kendala sumber daya).

Solusi Sementara

Jika performa panggilan pertama penting, disarankan untuk menjaga kueri tetap hangat. Misalnya, tugas latar belakang dapat dijalankan yang mengaktifkan kueri sederhana sp_execute_external_script sebelum proses kedaluwarsa. Misalnya, untuk menjaga kueri R tetap hangat, Anda dapat menjalankan kueri berikut secara berkala.

EXECUTE sp_execute_external_script @language = N'R', @script = N'';
GO

Jumlah kueri bersamaan yang tinggi

Jika jumlah eksekusi bersamaan sp_execute_external_script lebih tinggi dari proses R/Python aktif di kumpulan, awal dingin menambahkan proses tambahan ke kumpulan mungkin lambat (misalnya, karena kendala sumber daya).

Solusi Sementara

Untuk mengatasi masalah performa penskalaan, beberapa permintaan dapat di-batch (misalnya, melalui koneksi loopback atau menulis ulang skrip untuk menangani beberapa permintaan). Selain itu, untuk skenario real time SQL PREDICT dapat digunakan.

Masalah eksekusi skrip R

Bagian ini berisi masalah umum yang khusus untuk menjalankan R di SQL Server, serta beberapa masalah yang terkait dengan pustaka R dan alat yang diterbitkan oleh Microsoft, termasuk RevoScaleR.

Untuk masalah tambahan yang diketahui yang mungkin memengaruhi solusi R, lihat situs server Pembelajaran Mesin.

Peringatan akses ditolak saat menjalankan skrip R di SQL Server di lokasi non default

Jika instans SQL Server telah diinstal ke lokasi non-default, seperti di luar Program Files folder, ACCESS_DENIED peringatan dimunculkan saat Anda mencoba menjalankan skrip yang menginstal paket. Misalnya:

Di normalizePath(path.expand(path), winslash, mustWork) : path[2]="~ExternalLibraries/R/8/1": Akses ditolak

Alasannya adalah bahwa fungsi R mencoba membaca jalur, dan gagal jika grup pengguna bawaan SQLRUserGroup, tidak memiliki akses baca. Peringatan yang dimunculkan tidak memblokir eksekusi skrip R saat ini, tetapi peringatan mungkin berulang kali setiap kali pengguna menjalankan skrip R lainnya.

Jika Anda telah menginstal SQL Server ke lokasi default, kesalahan ini tidak terjadi, karena semua pengguna Windows memiliki izin baca pada Program Files folder.

Masalah ini ditangani dalam rilis layanan yang akan datang. Sebagai solusinya, berikan grup, SQLRUserGroup, dengan akses baca untuk semua folder ExternalLibrariesinduk .

Kesalahan serialisasi antara versi lama dan baru RevoScaleR

Saat Anda meneruskan model menggunakan format serial ke instans SQL Server jarak jauh, Anda mungkin mendapatkan kesalahan:

Kesalahan dalam memDecompress(data, type = decompress) kesalahan internal -3 di memDecompress(2).

Kesalahan ini muncul jika Anda menyimpan model menggunakan versi terbaru dari fungsi serialisasi, rxSerializeModel, tetapi instans SQL Server tempat Anda mendeserialisasi model memiliki versi API RevoScaleR yang lebih lama, dari SQL Server 2017 (14.x) CU 2 atau yang lebih lama.

Sebagai solusinya, Anda dapat meningkatkan instans SQL Server 2017 (14.x) ke CU 3 atau yang lebih baru.

Kesalahan tidak muncul jika versi API sama, atau jika Anda memindahkan model yang disimpan dengan fungsi serialisasi yang lebih lama ke server yang menggunakan versi API serialisasi yang lebih baru.

Dengan kata lain, gunakan versi RevoScaleR yang sama untuk operasi serialisasi dan deserialisasi.

Penilaian real-time tidak menangani parameter learningRate dengan benar dalam model pohon dan forest

Jika Anda membuat model menggunakan pohon keputusan atau metode hutan keputusan dan menentukan tingkat pembelajaran, Anda mungkin melihat hasil yang tidak konsisten saat menggunakan sp_rxpredict atau fungsi SQL PREDICT , dibandingkan dengan menggunakan rxPredict.

Penyebabnya adalah kesalahan dalam API yang memproses model berseri, dan terbatas pada learningRate parameter: misalnya, di rxBTrees, atau

Masalah ini ditangani dalam rilis layanan yang akan datang.

Batasan afinitas prosesor untuk pekerjaan R

Dalam build rilis awal SQL Server 2016 (13.x), Anda dapat mengatur afinitas prosesor hanya untuk CPU di k-group pertama. Misalnya, jika server adalah komputer 2 soket dengan dua k-grup, hanya prosesor dari k-group pertama yang digunakan untuk proses R. Batasan yang sama berlaku saat Anda mengonfigurasi tata kelola sumber daya untuk pekerjaan skrip R.

Masalah ini diperbaiki di Paket Layanan SQL Server 2016 (13.x) 1. Kami menyarankan agar Anda meningkatkan ke rilis layanan terbaru.

Berlaku untuk: Layanan R SQL Server 2016 (13.x) (versi RTM)

Perubahan pada jenis kolom tidak dapat dilakukan saat membaca data dalam konteks komputasi SQL Server

Jika konteks komputasi Anda diatur ke instans SQL Server, Anda tidak dapat menggunakan argumen colClasses (atau argumen serupa lainnya) untuk mengubah jenis data kolom dalam kode R Anda.

Misalnya, pernyataan berikut akan mengakibatkan kesalahan jika kolom CRSDepTimeStr belum menjadi bilangan bulat:

data <- RxSqlServerData(
  sqlQuery = "SELECT CRSDepTimeStr, ArrDelay FROM AirlineDemoSmall",
  connectionString = connectionString,
  colClasses = c(CRSDepTimeStr = "integer"))

Sebagai solusinya, Anda dapat menulis ulang kueri SQL untuk menggunakan CAST atau CONVERT dan menyajikan data ke R dengan menggunakan tipe data yang benar. Secara umum, performa lebih baik ketika Anda bekerja dengan data dengan menggunakan SQL daripada dengan mengubah data dalam kode R.

Berlaku untuk: Layanan R SQL Server 2016 (13.x)

Batasan ukuran model berseri

Saat menyimpan model ke tabel SQL Server, Anda harus membuat serialisasi model dan menyimpannya dalam format biner. Secara teoritis ukuran maksimum model yang dapat disimpan dengan metode ini adalah 2 GB, yang merupakan ukuran maksimum kolom varbinary di SQL Server.

Jika Anda perlu menggunakan model yang lebih besar, solusi berikut tersedia:

  • Ambil langkah-langkah untuk mengurangi ukuran model Anda. Beberapa paket R sumber terbuka mencakup banyak informasi dalam objek model, dan banyak informasi ini dapat dihapus untuk penyebaran.

  • Gunakan pilihan fitur untuk menghapus kolom yang tidak perlu.

  • Jika Anda menggunakan algoritma sumber terbuka, pertimbangkan implementasi serupa menggunakan algoritma yang sesuai di MicrosoftML atau RevoScaleR. Paket ini telah dioptimalkan untuk skenario penyebaran.

  • Setelah model dirasinalisasi dan ukurannya berkurang menggunakan langkah-langkah sebelumnya, lihat apakah fungsi memCompress di dasar R dapat digunakan untuk mengurangi ukuran model sebelum meneruskannya ke SQL Server. Opsi ini paling baik ketika model mendekati batas 2 GB.

  • Untuk model yang lebih besar, Anda dapat menggunakan fitur FileTable SQL Server untuk menyimpan model, daripada menggunakan kolom varbinary.

    Untuk menggunakan FileTables, Anda harus menambahkan pengecualian firewall, karena data yang disimpan dalam FileTables dikelola oleh driver sistem file Filestream di SQL Server, dan aturan firewall default memblokir akses file jaringan. Untuk informasi selengkapnya, lihat Mengaktifkan Prasyarat untuk FileTable.

    Setelah mengaktifkan FileTable, untuk menulis model, Anda mendapatkan jalur dari SQL menggunakan API FileTable, lalu menulis model ke lokasi tersebut dari kode Anda. Ketika Anda perlu membaca model, Anda mendapatkan jalur dari SQL Server, lalu memanggil model menggunakan jalur dari skrip Anda. Untuk informasi selengkapnya, lihat Mengakses FileTables dengan API Input-Output File.

Hindari menghapus ruang kerja saat Anda menjalankan kode R dalam konteks komputasi SQL Server

Jika Anda menggunakan perintah R untuk menghapus ruang kerja objek saat menjalankan kode R dalam konteks komputasi SQL Server, atau jika Anda menghapus ruang kerja sebagai bagian dari skrip R yang disebut dengan menggunakan sp_execute_external_script, Anda mungkin mendapatkan kesalahan ini: revoScript objek ruang kerja Koneksi ion tidak ditemukan

revoScriptConnection adalah objek di ruang kerja R yang berisi informasi tentang sesi R yang dipanggil dari SQL Server. Namun, jika kode R Anda menyertakan perintah untuk menghapus ruang kerja (seperti rm(list=ls())), semua informasi tentang sesi dan objek lain di ruang kerja R juga dihapus.

Sebagai solusinya, hindari penghapusan variabel dan objek lain yang tidak sembarangan saat Anda menjalankan R di SQL Server. Meskipun membersihkan ruang kerja adalah hal umum saat bekerja di konsol R, itu dapat memiliki konsekuensi yang tidak diinginkan.

  • Untuk menghapus variabel tertentu, gunakan fungsi R remove : misalnya, remove('name1', 'name2', ...)
  • Jika ada beberapa variabel yang akan dihapus, simpan nama variabel sementara ke daftar dan lakukan pengumpulan sampah berkala.

Pembatasan data yang dapat disediakan sebagai input ke skrip R

Anda tidak dapat menggunakan dalam skrip R jenis hasil kueri berikut:

  • Data dari kueri Transact-SQL yang mereferensikan kolom AlwaysEncrypted.

  • Data dari kueri Transact-SQL yang mereferensikan kolom bertopeng.

    Jika Anda perlu menggunakan data bertopeng dalam skrip R, solusi yang mungkin adalah membuat salinan data dalam tabel sementara dan menggunakan data tersebut sebagai gantinya.

Penggunaan string sebagai faktor dapat menyebabkan penurunan performa

Menggunakan variabel jenis string sebagai faktor dapat sangat meningkatkan jumlah memori yang digunakan untuk operasi R. Ini adalah masalah yang diketahui dengan R secara umum, dan ada banyak artikel tentang subjek. Misalnya, lihat Faktor bukan warga negara kelas satu di R, oleh John Mount, di R-blogger) atau stringsAsFactors: Biografi yang tidak sah, oleh Roger Peng.

Meskipun masalah ini tidak spesifik untuk SQL Server, masalah ini dapat sangat memengaruhi performa eksekusi kode R di SQL Server. String biasanya disimpan sebagai varchar atau nvarchar, dan jika kolom data string memiliki banyak nilai unik, proses mengonversinya secara internal menjadi bilangan bulat dan kembali ke string oleh R bahkan dapat menyebabkan kesalahan alokasi memori.

Jika Anda tidak benar-benar memerlukan jenis data string untuk operasi lain, memetakan nilai string ke jenis data numerik (bilangan bulat) sebagai bagian dari persiapan data akan bermanfaat dari perspektif performa dan skala.

Untuk diskusi tentang masalah ini, dan tips lainnya, lihat Performa untuk Layanan R - pengoptimalan data.

Argumen varsToKeep dan varsToDrop tidak didukung untuk sumber data SQL Server

Saat Anda menggunakan fungsi rxDataStep untuk menulis hasil ke tabel, menggunakan varsToKeep dan varsToDrop adalah cara yang berguna untuk menentukan kolom yang akan disertakan atau dikecualikan sebagai bagian dari operasi. Namun, argumen ini tidak didukung untuk sumber data SQL Server.

Dukungan terbatas untuk jenis data SQL di sp_execute_external_script

Tidak semua jenis data yang didukung di SQL dapat digunakan dalam R. Sebagai solusinya, pertimbangkan untuk mentransmisikan jenis data yang tidak didukung ke jenis data yang didukung sebelum meneruskan data ke sp_execute_external_script.

Untuk informasi selengkapnya, lihat Pustaka R dan jenis data.

Kemungkinan kerusakan string menggunakan string Unicode di kolom varchar

Meneruskan data Unicode dalam kolom varchar dari SQL Server ke R/Python dapat mengakibatkan kerusakan string. Ini karena pengodean untuk string Unicode ini dalam kolase SQL Server mungkin tidak cocok dengan pengodean UTF-8 default yang digunakan dalam R/Python.

Untuk mengirim data string non-ASCII dari SQL Server ke R/Python, gunakan pengodean UTF-8 (tersedia di SQL Server 2019 (15.x)) atau gunakan jenis nvarchar untuk hal yang sama.

Hanya satu nilai jenis raw yang dapat dikembalikan dari sp_execute_external_script

Ketika jenis data biner (jenis data mentah R) dikembalikan dari R, nilai harus dikirim dalam bingkai data output.

Dengan jenis data selain mentah, Anda dapat mengembalikan nilai parameter bersama dengan hasil prosedur tersimpan dengan menambahkan kata kunci OUTPUT. Untuk informasi selengkapnya, lihat Parameter.

Jika Anda ingin menggunakan beberapa set output yang menyertakan nilai jenis mentah, salah satu solusi yang mungkin adalah melakukan beberapa panggilan prosedur tersimpan, atau untuk mengirim kumpulan hasil kembali ke SQL Server dengan menggunakan ODBC.

Hilangnya presisi

Karena Transact-SQL dan R mendukung berbagai jenis data, jenis data numerik dapat mengalami hilangnya presisi selama konversi.

Untuk informasi selengkapnya tentang konversi jenis data implisit, lihat Pustaka R dan jenis data.

Kesalahan cakupan variabel saat Anda menggunakan parameter transformFunc

Untuk mengubah data saat Anda memodelkan, Anda dapat meneruskan argumen transformFunc dalam fungsi seperti rxLinmod atau rxLogit. Namun, panggilan fungsi berlapis dapat menyebabkan kesalahan cakupan dalam konteks komputasi SQL Server, bahkan jika panggilan berfungsi dengan benar dalam konteks komputasi lokal.

Himpunan data sampel untuk analisis tidak memiliki variabel

Misalnya, asumsikan bahwa Anda telah menentukan dua fungsi, f dan g, di lingkungan global lokal Anda, dan g memanggil f. Dalam panggilan terdistribusi atau jarak jauh yang melibatkan g, panggilan ke g mungkin gagal dengan kesalahan ini, karena f tidak dapat ditemukan, bahkan jika Anda telah melewati dan fg ke panggilan jarak jauh.

Jika Anda mengalami masalah ini, Anda dapat mengatasi masalah dengan menyematkan definisi f di dalam definisi Anda , gdi mana saja sebelum g biasanya memanggil f.

Misalnya:

f <- function(x) { 2*x * 3 }
g <- function(y) {
              a <- 10 * y
               f(a)
}

Untuk menghindari kesalahan, tulis ulang definisi sebagai berikut:

g <- function(y){
              f <- function(x) { 2*x +3}
              a <- 10 * y
              f(a)
}

Impor dan manipulasi data menggunakan RevoScaleR

Saat kolom varchar dibaca dari database, spasi kosong dipangkas. Untuk mencegah hal ini, sertakan string dalam karakter spasi non-putih.

Ketika fungsi seperti rxDataStep digunakan untuk membuat tabel database yang memiliki kolom varchar , lebar kolom diperkirakan berdasarkan sampel data. Jika lebar dapat bervariasi, mungkin perlu untuk mengayuh semua string ke panjang yang sama.

Menggunakan transformasi untuk mengubah jenis data variabel tidak didukung saat panggilan berulang ke rxImport atau rxTextToXdf digunakan untuk mengimpor dan menambahkan baris, menggabungkan beberapa file input ke dalam satu file .xdf.

Dukungan terbatas untuk rxExec

Dalam SQL Server 2016 (13.x), rxExec fungsi yang disediakan oleh paket RevoScaleR hanya dapat digunakan dalam mode utas tunggal.

Tingkatkan ukuran parameter maksimum untuk mendukung rxGetVarInfo

Jika Anda menggunakan himpunan data dengan jumlah variabel yang sangat besar (misalnya, lebih dari 40.000), atur max-ppsize bendera saat Anda memulai R untuk menggunakan fungsi seperti rxGetVarInfo. Bendera max-ppsize menentukan ukuran maksimum tumpukan perlindungan pointer.

Jika Anda menggunakan konsol R (misalnya, RGui.exe atau RTerm.exe), Anda dapat mengatur nilai max-ppsize ke 500000 dengan mengetik:

R --max-ppsize=500000

Masalah dengan fungsi rxDTree

Fungsi rxDTree saat ini tidak mendukung transformasi dalam rumus. Secara khusus, menggunakan F() sintaks untuk membuat faktor dengan cepat tidak didukung. Namun, data numerik secara otomatis diikat.

Faktor yang diurutkan diperlakukan sama dengan faktor-faktor dalam semua fungsi analisis RevoScaleR kecuali rxDTree.

data.table sebagai OutputDataSet dalam R

Penggunaan data.table sebagai OutputDataSet dalam R tidak didukung di SQL Server 2017 (14.x) Pembaruan Kumulatif 13 (CU 13) dan yang lebih lama. Pesan berikut mungkin muncul:

Msg 39004, Level 16, State 20, Line 2
A 'R' script error occurred during execution of
'sp_execute_external_script' with HRESULT 0x80004004.
Msg 39019, Level 16, State 2, Line 2
An external script error occurred:
Error in alloc.col(newx) :
  Internal error: length of names (0) is not length of dt (11)
Calls: data.frame ... as.data.frame -> as.data.frame.data.table -> copy -> alloc.col

Error in execution.  Check the output for more information.
Error in eval(expr, envir, enclos) :
  Error in execution.  Check the output for more information.
Calls: source -> withVisible -> eval -> eval -> .Call
Execution halted

data.tableOutputDataSet sebagai dalam R didukung di SQL Server 2017 (14.x) Pembaruan Kumulatif 14 (CU 14) dan yang lebih baru.

Menjalankan skrip panjang gagal saat menginstal pustaka

Menjalankan sesi skrip eksternal yang berjalan lama dan meminta dbo secara paralel mencoba menginstal pustaka pada database yang berbeda dapat mengakhiri skrip.

Misalnya, menjalankan skrip eksternal ini terhadap master database:

USE MASTER
DECLARE @language nvarchar(1) = N'R'
DECLARE @script nvarchar(max) = N'Sys.sleep(100)'
DECLARE @input_data_1 nvarchar(max) = N'select 1'
EXEC sp_execute_external_script @language = @language, @script = @script, @input_data_1 = @input_data_1 with result sets none
go

Sementara dbo secara paralel menginstal pustaka di LibraryManagementFunctional:

USE [LibraryManagementFunctional]
go

CREATE EXTERNAL LIBRARY [RODBC] FROM (CONTENT = N'/home/ani/var/opt/mssql/data/RODBC_1.3-16.tar.gz') WITH (LANGUAGE = 'R')
go

DECLARE @language nvarchar(1) = N'R'
DECLARE @script nvarchar(14) = N'library(RODBC)'
DECLARE @input_data_1 nvarchar(8) = N'select 1'
EXEC sp_execute_external_script @language = @language, @script = @script, @input_data_1 = @input_data_1
go

Skrip eksternal yang berjalan lama sebelumnya terhadap master database akan berakhir dengan pesan kesalahan berikut:

Kesalahan skrip 'R' terjadi selama eksekusi 'sp_execute_external_script' dengan 0x800704d4 HRESULT.

Solusi Sementara

Jangan jalankan penginstalan pustaka secara paralel dengan kueri yang berjalan lama. Atau jalankan ulang kueri yang berjalan lama setelah penginstalan selesai.

Berlaku untuk: SQL Server 2019 (15.x) di Linux &Kluster Big Data saja.

SQL Server berhenti merespons saat menjalankan skrip R yang berisi eksekusi paralel

SQL Server 2019 (15.x) berisi regresi yang memengaruhi skrip R yang menggunakan eksekusi paralel. Contohnya termasuk menggunakan rxExec dengan RxLocalPar konteks komputasi dan skrip yang menggunakan paket paralel. Masalah ini disebabkan oleh kesalahan yang ditemui paket paralel saat menulis ke perangkat null saat menjalankan di SQL Server.

Berlaku untuk: SQL Server 2019 (15.x).

Kerugian presisi untuk jenis data uang/numerik/desimal/bigint

Menjalankan skrip R dengan sp_execute_external_script memungkinkan jenis data uang, numerik, desimal, dan bigint sebagai data input. Namun, karena dikonversi ke jenis numerik R, mereka mengalami kerugian presisi dengan nilai yang sangat tinggi atau memiliki nilai titik desimal.

  • uang: Terkadang nilai sen tidak tepat dan peringatan akan dikeluarkan: Peringatan: tidak dapat secara tepat mewakili nilai sen.
  • numerik/desimal: sp_execute_external_script dengan skrip R tidak mendukung rentang lengkap jenis data tersebut dan akan mengubah beberapa digit desimal terakhir terutama yang memiliki pecahan.
  • bigint: R hanya mendukung hingga bilangan bulat 53-bit dan kemudian akan mulai mengalami kehilangan presisi.

Masalah dengan fungsi rxExecBy - fungsi rxExecBy tidak dapat menemukan paket yang diinstal

Ketika fungsi dipanggil rxExecBy , proses runtime R baru dimulai. Proses baru ini tidak memiliki jalur pustaka yang diperbarui, oleh karena itu, paket yang diinstal di lokasi selain jalur pustaka default tidak ditemukan selama eksekusi.

Solusi Sementara

Jalur ke paket R perlu diperbarui secara eksplisit. Misalkan paket diinstal di jalur pustaka eksternal, skrip R berikut dapat digunakan untuk memperbarui jalur pustaka: .libPaths(c(Sys.getenv("MRS_EXTLIB_USER_PATH"), Sys.getenv("MRS_EXTLIB_SHARED_PATH"), .libPaths()))

Masalah eksekusi skrip Python

Bagian ini berisi masalah umum yang khusus untuk menjalankan Python di SQL Server, serta masalah yang terkait dengan paket Python yang diterbitkan oleh Microsoft, termasuk revoscalepy dan microsoftml.

Panggilan ke model yang telah dilatih sebelumnya gagal jika jalur ke model terlalu panjang

Jika Anda menginstal model yang telah dilatih sebelumnya dalam rilis awal SQL Server 2017 (14.x), jalur lengkap ke file model terlatih mungkin terlalu lama untuk dibaca Python. Batasan ini diperbaiki dalam rilis layanan selanjutnya.

Ada beberapa solusi potensial:

  • Saat Anda menginstal model yang telah dilatih sebelumnya, pilih lokasi kustom.
  • Jika memungkinkan, instal instans SQL Server di bawah jalur penginstalan kustom dengan jalur yang lebih pendek, seperti C:\SQL\MSSQL14.MSSQLSERVER.
  • Gunakan Fsutil utilitas Windows untuk membuat tautan keras yang memetakan file model ke jalur yang lebih pendek.
  • Perbarui ke rilis layanan terbaru.

Kesalahan saat menyimpan model serial ke SQL Server

Ketika Anda meneruskan model ke instans SQL Server jarak jauh, dan mencoba membaca model biner menggunakan rx_unserialize fungsi dalam revoscalepy, Anda mungkin mendapatkan kesalahan:

NameError: nama 'rx_unserialize_model' tidak ditentukan

Kesalahan ini muncul jika Anda menyimpan model menggunakan versi terbaru dari fungsi serialisasi, tetapi instans SQL Server tempat Anda mendeserialisasi model tidak mengenali API serialisasi.

Untuk mengatasi masalah ini, tingkatkan instans SQL Server 2017 (14.x) ke CU 3 atau yang lebih baru.

Kegagalan untuk menginisialisasi variabel varbinary menyebabkan kesalahan dalam BxlServer

Jika Anda menjalankan kode Python di SQL Server menggunakan sp_execute_external_script, dan kode memiliki variabel output jenis varbinary(max), varchar(max) atau jenis serupa, variabel harus diinisialisasi atau diatur sebagai bagian dari skrip Anda. Jika tidak, komponen pertukaran data, BxlServer, menimbulkan kesalahan dan berhenti bekerja.

Batasan ini akan diperbaiki dalam rilis layanan mendatang. Sebagai solusinya, pastikan variabel diinisialisasi dalam skrip Python. Nilai valid apa pun dapat digunakan, seperti dalam contoh berikut:

declare @b varbinary(max);
exec sp_execute_external_script
  @language = N'Python'
  , @script = N'b = 0x0'
  , @params = N'@b varbinary(max) OUTPUT'
  , @b = @b OUTPUT;
go
declare @b varchar(30);
exec sp_execute_external_script
  @language = N'Python'
  , @script = N' b = ""  '
  , @params = N'@b varchar(30) OUTPUT'
  , @b = @b OUTPUT;
go

Peringatan telemetri tentang keberhasilan eksekusi kode Python

Dimulai dengan SQL Server 2017 (14.x) CU 2, pesan berikut mungkin muncul bahkan jika kode Python berhasil dijalankan:

Pesan STDERR dari skrip eksternal:~PYTHON_SERVICES\lib\site-packages\revoscalepy\utils\RxTelemetryLoggerSintaksWarning: telemetry_state digunakan sebelum deklarasi global

Masalah ini telah diperbaiki di SQL Server 2017 (14.x) Pembaruan Kumulatif 3 (CU 3).

Jenis data numerik, desimal, dan uang tidak didukung

Dimulai dengan SQL Server 2017 (14.x) Pembaruan Kumulatif 12 (CU 12), jenis data numerik, desimal, dan uang di WITH RESULT SETS tidak didukung saat menggunakan Python dengan sp_execute_external_script. Pesan berikut mungkin muncul:

[Kode: 39004, Status SQL: S1000] Kesalahan skrip 'Python' terjadi selama eksekusi 'sp_execute_external_script' dengan 0x80004004 HRESULT.

[Kode: 39019, Status SQL: S1000] Terjadi kesalahan skrip eksternal:

Kesalahan SqlSatelliteCall: Jenis yang tidak didukung dalam skema output. Jenis yang didukung: bit, smallint, int, datetime, smallmoney, real dan float. char, varchar didukung sebagian.

Ini telah diperbaiki di SQL Server 2017 (14.x) Pembaruan Kumulatif 14 (CU 14).

Kesalahan penerjemah buruk saat menginstal paket Python dengan pip di Linux

Pada SQL Server 2019 (15.x), jika Anda mencoba menggunakan pip. Misalnya:

/opt/mssql/mlservices/runtime/python/bin/pip -h

Anda kemudian akan mendapatkan kesalahan ini:

bash: /opt/mssql/mlservices/runtime/python/bin/pip: /opt/microsoft/mlserver/9.4.7/bin/python/python: penerjemah buruk: Tidak ada file atau direktori seperti itu

Solusi Sementara

Instal pip dari Python Package Authority (PyPA):

wget 'https://bootstrap.pypa.io/get-pip.py'
/opt/mssql/mlservices/bin/python/python ./get-pip.py

Rekomendasi

Lihat Menginstal paket Python dengan sqlmlutils.

Berlaku untuk: SQL Server 2019 (15.x) di Linux

Tidak dapat menginstal paket Python menggunakan pip setelah menginstal SQL Server 2019 di Windows

Setelah menginstal SQL Server 2019 (15.x) di Windows, mencoba menginstal paket python melalui pip dari baris perintah DOS akan gagal. Misalnya:

pip install quantfolio

Ini akan mengembalikan kesalahan berikut:

pip dikonfigurasi dengan lokasi yang memerlukan TLS/SSL, namun modul ssl di Python tidak tersedia.

Ini adalah masalah khusus untuk paket Anaconda. Ini akan diperbaiki dalam rilis layanan mendatang.

Solusi Sementara

Salin file berikut:

  • libssl-1_1-x64.dll
  • libcrypto-1_1-x64.dll

dari folder
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\Library\bin

ke folder
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\DLLs

Kemudian buka prompt shell perintah DOS baru.

Berlaku untuk: SQL Server 2019 (15.x) di Windows

Kesalahan saat menggunakan sp_execute_external_script tanpa libc++abo.so di Linux

Pada komputer Linux bersih yang belum libc++abi.so diinstal, menjalankan sp_execute_external_script kueri (SPEES) gagal dengan kesalahan "Tidak ada file atau direktori seperti itu".

Misalnya:

EXEC sp_execute_external_script
    @language = N'Python'
    , @script = N'
OutputDataSet = InputDataSet'
    , @input_data_1 = N'select 1'
    , @input_data_1_name = N'InputDataSet'
    , @output_data_1_name = N'OutputDataSet'
    WITH RESULT SETS (([output] int not null));
Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'Python' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'Python' runtime.
STDERR message(s) from external script:

Failed to load library /opt/mssql-extensibility/lib/sqlsatellite.so with error libc++abi.so.1: cannot open shared object file: No such file or directory.

SqlSatelliteCall error: Failed to load library /opt/mssql-extensibility/lib/sqlsatellite.so with error libc++abi.so.1: cannot open shared object file: No such file or directory.
STDOUT message(s) from external script:
SqlSatelliteCall function failed. Please see the console output for more information.
Traceback (most recent call last):
  File "/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/computecontext/RxInSqlServer.py", line 605, in rx_sql_satellite_call
    rx_native_call("SqlSatelliteCall", params)
  File "/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/RxSerializable.py", line 375, in rx_native_call
    ret = px_call(functionname, params)
RuntimeError: revoscalepy function failed.
Total execution time: 00:01:00.387

Solusi Sementara

Jalankan perintah berikut:

sudo cp /opt/mssql/lib/libc++abi.so.1 /opt/mssql-extensibility/lib/

Berlaku untuk: SQL Server 2019 (15.x) di Linux

Kesalahan umum saat berjalan sp_execute_external_script di Ubuntu 20.04 dengan SQL Server 2022 CU6 di Linux

Menginstal SQL Server 2022 CU6 untuk Linux di Ubuntu 20.04 dapat mengakibatkan kesalahan berikut saat menjalankan sp_execute_external_script skrip R dan Python:

Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'R' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'R' runtime.

STDERR message(s) from external script: 
/usr/lib/R/library/RevoScaleR/rxLibs/x64/libExaCore.so.2(_Z21CriticalSignalHandleri+0x29)[0x7f2568289d89]
/usr/lib/x86_64-linux-gnu/libc.so.6(+0x43090)[0x7f2568d66090]

Solusi Sementara

Jalankan perintah berikut untuk menginstal dependensi libssl-devpaket , yang memungkinkan SQL Server untuk menyelesaikan pustaka libssl bersama yang disediakan sistem dan libcrypto.

sudo apt-get update
sudo apt-get install libssl-dev

Kesalahan pembuatan aturan firewall saat modprobe berjalan mssql-launchpadd di Linux

Saat melihat log penggunaan mssql-launchpaddsudo journalctl -a -u mssql-launchpadd, Anda mungkin melihat kesalahan pembuatan aturan firewall yang mirip dengan output berikut.

-- Logs begin at Sun 2021-03-28 12:03:30 PDT, end at Wed 2022-10-12 13:20:17 PDT. --
Mar 22 16:57:51 sqlVm systemd[1]: Started Microsoft SQL Server Extensibility Launchpad Daemon.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: Extensibility Log Header: <timestamp> <process> <sandboxId> <sessionId> <message>
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: No extensibility section in /var/opt/mssql/mssql.conf file. Using default settings.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: DataDirectories =  /bin:/etc:/lib:/lib32:/lib64:/sbin:/usr/bin:/usr/include:/usr/lib:/usr/lib32:/usr/lib64:/usr/libexec/gcc:/usr/sbin:/usr/share:/var/lib:/opt/microsoft:/opt/mssql-extensibility:/opt/mssql/mlservices:/opt/mssql/lib/zulu-jre-11:/opt/mssql-tools
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: [RG] SQL Extensibility Cgroup initialization is done.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: Found 1 IP address(es) from the bridge.
Mar 22 16:57:51 sqlVm launchpadd[195676]: modprobe: ERROR: could not insert 'ip6_tables': Operation not permitted
Mar 22 16:57:51 sqlVm launchpadd[195673]: ip6tables v1.8.4 (legacy): can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)
Mar 22 16:57:51 sqlVm launchpadd[195673]: Perhaps ip6tables or your kernel needs to be upgraded.
Mar 22 16:57:51 sqlVm launchpadd[195678]: modprobe: ERROR: could not insert 'ip6_tables': Operation not permitted
Mar 22 16:57:51 sqlVm launchpadd[195677]: ip6tables v1.8.4 (legacy): can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)
Mar 22 16:57:51 sqlVm launchpadd[195677]: Perhaps ip6tables or your kernel needs to be upgraded.
Mar 22 16:57:51 sqlVm launchpadd[195670]: 2022/03/22 16:57:51 [setnetbr] ERROR: Failed to set firewall rules: exit status 3

Solusi Sementara

Jalankan perintah berikut untuk mengonfigurasi modprobe, dan mulai ulang layanan Launchpad SQL Server:

sudo modprobe ip6_tables
sudo systemctl restart mssql-launchpadd

Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru di Linux

Tidak dapat menginstal tensorflow paket menggunakan sqlmlutils

Paket sqlmlutils digunakan untuk menginstal paket Python di SQL Server 2019 (15.x). Anda perlu mengunduh, menginstal, dan memperbarui Microsoft Visual C++ 2015-2019 Redistributable (x64). Namun, tensorflow paket tidak dapat diinstal menggunakan sqlmlutils. Paket tensorflow tergantung pada versi yang lebih baru dari numpy versi yang diinstal di SQL Server. Namun, numpy adalah paket sistem yang telah diinstal sebelumnya yang sqlmlutils tidak dapat diperbarui saat mencoba menginstal tensorflow.

Solusi Sementara

Dengan menggunakan perintah dalam mode administrator, jalankan perintah berikut, ganti "MSSQLSERVER" dengan nama instans SQL Anda:

"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\python.exe" -m pip install --upgrade tensorflow

Jika Anda mendapatkan kesalahan "TLS/SSL", lihat 7. Tidak dapat menginstal paket Python menggunakan pip sebelumnya di artikel ini.

Berlaku untuk: SQL Server 2019 (15.x) di Windows

Revolusi R Enterprise dan Microsoft R Open

Bagian ini mencantumkan masalah khusus untuk konektivitas R, pengembangan, dan alat performa yang disediakan oleh Analitik Revolusi. Alat-alat ini disediakan di versi pra-rilis SQL Server sebelumnya.

Secara umum, kami sarankan Anda menghapus instalan versi sebelumnya ini dan menginstal versi terbaru SQL Server atau Microsoft R Server.

Revolusi R Enterprise tidak didukung

Menginstal Revolution R Enterprise berdampingan dengan versi R Services (In-Database) apa pun tidak didukung.

Jika Anda memiliki lisensi yang ada untuk Revolution R Enterprise, Anda harus meletakkannya di komputer terpisah dari instans SQL Server dan stasiun kerja apa pun yang ingin Anda gunakan untuk menyambungkan ke instans SQL Server.

Beberapa versi pra-rilis R Services (In-Database) menyertakan lingkungan pengembangan R untuk Windows yang dibuat oleh Revolution Analytics. Alat ini tidak lagi disediakan, dan tidak didukung.

Untuk kompatibilitas dengan R Services (In-Database), kami sarankan Anda menginstal Klien Microsoft R sebagai gantinya. R Tools for Visual Studio dan Visual Studio Code juga mendukung solusi Microsoft R.

Masalah kompatibilitas dengan driver ODBC SQLite dan RevoScaleR

Revisi 0.92 driver ODBC SQLite tidak kompatibel dengan RevoScaleR. Revisi 0.88-0.91 dan 0.93 dan yang lebih baru diketahui kompatibel.

Langkah berikutnya