Kesalahan skrip R umum di SQL Server Pembelajaran Mesin Services

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

Artikel ini mendanai beberapa kesalahan skrip umum saat menjalankan skrip R di SQL Server Pembelajaran Mesin Services. Daftar ini tidak komprehensif. Ada banyak paket dan kesalahan dapat bervariasi di antara versi paket yang sama.

Skrip yang valid gagal dalam T-SQL atau dalam prosedur tersimpan

Sebelum membungkus kode R Anda dalam prosedur tersimpan, ada baiknya untuk menjalankan kode R Anda dalam IDE eksternal, atau di salah satu alat R seperti RTerm atau RGui. Dengan menggunakan metode ini, Anda dapat menguji dan men-debug kode dengan menggunakan pesan kesalahan rinci yang dikembalikan oleh R.

Namun, terkadang kode yang berfungsi dengan sempurna dalam IDE atau utilitas eksternal mungkin gagal berjalan dalam prosedur tersimpan atau dalam konteks komputasi SQL Server. Jika ini terjadi, ada berbagai masalah yang harus dicari sebelum Anda dapat berasumsi bahwa paket tidak berfungsi di SQL Server.

  1. Periksa untuk melihat apakah Launchpad sedang berjalan.

  2. Tinjau pesan untuk melihat apakah data input atau data output berisi kolom dengan jenis data yang tidak kompatibel atau tidak didukung. Misalnya, kueri pada database SQL sering mengembalikan GUID atau RowGUIDs, keduanya tidak didukung. Untuk informasi selengkapnya, lihat Pustaka R dan jenis data.

  3. Tinjau halaman bantuan untuk fungsi R individual untuk menentukan apakah semua parameter didukung untuk konteks komputasi SQL Server. Untuk bantuan ScaleR, gunakan perintah bantuan inline R, atau lihat Referensi Paket.

Jika runtime R berfungsi tetapi skrip Anda mengembalikan kesalahan, kami sarankan Anda mencoba men-debug skrip di lingkungan pengembangan R khusus, seperti R Tools for Visual Studio.

Kami juga menyarankan agar Anda meninjau dan sedikit menulis ulang skrip untuk memperbaiki masalah dengan jenis data yang mungkin muncul saat Anda memindahkan data antara R dan mesin database. Untuk informasi selengkapnya, lihat Pustaka R dan jenis data.

Selain itu, Anda dapat menggunakan paket sqlrutils untuk membundel skrip R Anda dalam format yang lebih mudah digunakan sebagai prosedur tersimpan. Untuk informasi selengkapnya, lihat:

Skrip mengembalikan hasil yang tidak konsisten

Skrip R dapat mengembalikan nilai yang berbeda dalam konteks SQL Server, karena beberapa alasan:

  • Konversi jenis implisit secara otomatis dilakukan pada beberapa jenis data, ketika data diteruskan antara SQL Server dan R. Untuk informasi selengkapnya, lihat Pustaka R dan jenis data.

  • Tentukan apakah bitness adalah faktor. Misalnya, sering ada perbedaan dalam hasil operasi matematika untuk pustaka floating point 32-bit dan 64-bit.

  • Tentukan apakah NaN diproduksi dalam operasi apa pun. Ini dapat membatalkan hasil.

  • Perbedaan kecil dapat diperkuat ketika Anda mengambil timbal balik dari angka mendekati nol.

  • Akumulasi kesalahan pembulatan dapat menyebabkan hal-hal seperti nilai yang kurang dari nol, bukan nol.

Autentikasi tersirat untuk eksekusi jarak jauh melalui ODBC

Jika Anda tersambung ke komputer SQL Server untuk menjalankan perintah R dengan menggunakan fungsi RevoScaleR , Anda mungkin mendapatkan kesalahan saat menggunakan panggilan ODBC yang menulis data ke server. Kesalahan ini terjadi hanya ketika Anda menggunakan autentikasi Windows.

Alasannya adalah bahwa akun pekerja yang dibuat untuk Layanan R tidak memiliki izin untuk menyambungkan ke server. Oleh karena itu, panggilan ODBC tidak dapat dijalankan atas nama Anda. Masalah tidak terjadi dengan login SQL karena, dengan login SQL, kredensial diteruskan secara eksplisit dari klien R ke instans SQL Server dan kemudian ke ODBC. Namun, menggunakan login SQL juga kurang aman daripada menggunakan autentikasi Windows.

Untuk memungkinkan kredensial Windows Anda diteruskan dengan aman dari skrip yang dimulai dari jarak jauh, SQL Server harus meniru kredensial Anda. Proses ini disebut autentikasi tersirat. Untuk membuat ini berfungsi, akun pekerja yang menjalankan skrip R atau Python pada komputer SQL Server harus memiliki izin yang benar.

  1. Buka SQL Server Management Studio sebagai administrator pada instans tempat Anda ingin menjalankan kode R.

  2. Jalankan skrip berikut. Pastikan untuk mengedit nama grup pengguna, jika Anda mengubah default, dan nama komputer dan instans.

    USE [master]
    GO
    
    CREATE LOGIN [computername\\SQLRUserGroup] FROM WINDOWS WITH
    DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[language]
    GO
    

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

Meskipun membersihkan ruang kerja adalah hal umum saat Anda bekerja di konsol R, hal ini dapat memiliki konsekuensi yang tidak diinginkan dalam konteks komputasi SQL.

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. Anda dapat menghapus variabel tertentu dengan menggunakan fungsi hapus :

remove('name1', 'name2', ...)

Jika ada beberapa variabel untuk dihapus, kami sarankan Anda menyimpan nama variabel sementara ke daftar lalu melakukan pengumpulan sampah berkala dalam daftar.

Langkah berikutnya

Pengumpulan data untuk pemecahan masalah SQL Server Pembelajaran Mesin Services

Menginstal Layanan Pembelajaran Mesin SQL Server

Memecahkan masalah koneksi mesin database