Bagikan melalui


Membuat objek data SQL Server menggunakan RxSqlServerData (tutorial SQL Server dan RevoScaleR)

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

Ini adalah tutorial 2 dari seri tutorial RevoScaleR tentang cara menggunakan fungsi RevoScaleR dengan SQL Server.

Tutorial ini adalah kelanjutan pembuatan database: menambahkan tabel dan memuat data. Jika DBA membuat database dan masuk dalam tutorial dua, Anda dapat menambahkan tabel menggunakan IDE R seperti RStudio atau alat bawaan seperti Rgui.

Dari R, sambungkan ke SQL Server dan gunakan fungsi RevoScaleR untuk melakukan tugas berikut:

  • Membuat tabel untuk data pelatihan dan prediksi
  • Memuat tabel dengan data dari file .csv lokal

Data sampel disimulasikan data penipuan kartu kredit (himpunan data ccFraud), yang dipartisi ke dalam himpunan data pelatihan dan penilaian. File data disertakan dalam RevoScaleR.

Gunakan R IDE atau Rgui untuk menyelesaikan tugas-tugas ini. Pastikan untuk menggunakan executable R yang ditemukan di lokasi ini: C:\Program Files\Microsoft\R Client\R_SERVER\bin\x64 (baik Rgui.exe jika Anda menggunakan alat tersebut, atau IDE R yang menunjuk ke C:\Program Files\Microsoft\R Client\R_SERVER). Memiliki stasiun kerja klien R dengan executable ini dianggap sebagai prasyarat tutorial ini.

Membuat tabel data pelatihan

  1. Simpan string koneksi database dalam variabel R. Di bawah ini adalah dua contoh string koneksi ODBC yang valid untuk SQL Server: satu menggunakan login SQL, dan satu untuk autentikasi terintegrasi Windows.

    Pastikan untuk mengubah nama server, nama pengguna, dan kata sandi yang sesuai.

    Masuk SQL

    sqlConnString <- "Driver=SQL Server;Server=<server-name>; Database=RevoDeepDive;Uid=<user_name>;Pwd=<password>"
    

    Autentikasi Windows

    sqlConnString <- "Driver=SQL Server;Server=<server-name>;Database=RevoDeepDive;Trusted_Connection=True"
    
  2. Tentukan nama tabel yang ingin Anda buat, dan simpan dalam variabel R.

    sqlFraudTable <- "ccFraudSmall"
    

    Karena instans server dan nama database sudah ditentukan sebagai bagian dari string koneksi, ketika Anda menggabungkan dua variabel, nama tabel baru yang sepenuhnya memenuhi syarat menjadi instance.database.schema.ccFraudSmall.

  3. Secara opsional, tentukan rowsPerRead untuk mengontrol berapa banyak baris data yang dibaca di setiap batch.

    sqlRowsPerRead = 5000
    

    Meskipun parameter ini bersifat opsional, pengaturan dapat menghasilkan komputasi yang lebih efisien. Sebagian besar fungsi analitik yang disempurnakan dalam data proses RevoScaleR dan MicrosoftML dalam gugus. Parameter rowsPerRead menentukan jumlah baris di setiap gugus.

    Anda mungkin perlu bereksperimen dengan pengaturan ini untuk menemukan keseimbangan yang tepat. Jika nilai terlalu besar, akses data mungkin lambat jika tidak ada cukup memori untuk memproses data dalam potongan ukuran tersebut. Sebaliknya, pada beberapa sistem, jika nilai rowsPerRead terlalu kecil, performa juga dapat melambat.

    Sebagai nilai awal, gunakan ukuran proses batch default yang ditentukan oleh instans mesin database untuk mengontrol jumlah baris di setiap gugus (5.000 baris). Simpan nilai tersebut dalam variabel sqlRowsPerRead.

  4. Tentukan variabel untuk objek sumber data baru, dan teruskan argumen yang sebelumnya ditentukan ke konstruktor RxSqlServerData . Perhatikan bahwa ini hanya membuat objek sumber data dan tidak mengisinya. Memuat data adalah langkah terpisah.

    sqlFraudDS <- RxSqlServerData(connectionString = sqlConnString,
       table = sqlFraudTable,
       rowsPerRead = sqlRowsPerRead)
    

Membuat tabel data penilaian

Dengan menggunakan langkah yang sama, buat tabel yang menyimpan data penilaian menggunakan proses yang sama.

  1. Buat variabel R baru, sqlScoreTable, untuk menyimpan nama tabel yang digunakan untuk penilaian.

    sqlScoreTable <- "ccFraudScoreSmall"
    
  2. Berikan variabel tersebut sebagai argumen ke fungsi RxSqlServerData untuk menentukan objek sumber data kedua, sqlScoreDS.

    sqlScoreDS <- RxSqlServerData(connectionString = sqlConnString,
       table = sqlScoreTable, rowsPerRead = sqlRowsPerRead)
    

Karena Anda telah menentukan string koneksi dan parameter lain sebagai variabel di ruang kerja R, Anda dapat menggunakannya kembali untuk sumber data baru yang mewakili tabel, tampilan, atau kueri yang berbeda.

Catatan

Fungsi ini menggunakan argumen yang berbeda untuk menentukan sumber data berdasarkan seluruh tabel daripada untuk sumber data berdasarkan kueri. Ini karena mesin database SQL Server harus menyiapkan kueri secara berbeda. Nanti dalam tutorial ini, Anda mempelajari cara membuat objek sumber data berdasarkan kueri SQL.

Memuat data ke dalam tabel SQL menggunakan R

Sekarang setelah Anda membuat tabel SQL Server, Anda dapat memuat data ke dalamnya menggunakan fungsi Rx yang sesuai.

Paket RevoScaleR berisi fungsi khusus untuk jenis sumber data. Untuk data teks, gunakan RxTextData untuk menghasilkan objek sumber data. Ada fungsi tambahan untuk membuat objek sumber data dari data Hadoop, data ODBC, dan sebagainya.

Catatan

Untuk bagian ini, Anda harus memiliki izin Jalankan DDL pada database.

Memuat data ke dalam tabel pelatihan

  1. Buat variabel R, ccFraudCsv, dan tetapkan ke variabel jalur file untuk file CSV yang berisi data sampel. Himpunan data ini disediakan di RevoScaleR. "sampleDataDir" adalah kata kunci pada fungsi rxGetOption .

    ccFraudCsv <- file.path(rxGetOption("sampleDataDir"), "ccFraudSmall.csv")
    

    Perhatikan panggilan ke rxGetOption, yang merupakan metode GET yang terkait dengan rxOptions di RevoScaleR. Gunakan utilitas ini untuk mengatur dan mencantumkan opsi yang terkait dengan konteks komputasi lokal dan jarak jauh, seperti direktori bersama default, atau jumlah prosesor (inti) yang akan digunakan dalam komputasi.

    Panggilan khusus ini mendapatkan sampel dari pustaka yang benar, terlepas dari di mana Anda menjalankan kode Anda. Misalnya, coba jalankan fungsi di SQL Server, dan di komputer pengembangan Anda, dan lihat perbedaan jalurnya.

  2. Tentukan variabel untuk menyimpan data baru, dan gunakan fungsi RxTextData untuk menentukan sumber data teks.

    inTextData <- RxTextData(file = ccFraudCsv,      colClasses = c(
        "custID" = "integer", "gender" = "integer", "state" = "integer",
        "cardholder" = "integer", "balance" = "integer",
        "numTrans" = "integer",
        "numIntlTrans" = "integer", "creditLine" = "integer",
        "fraudRisk" = "integer"))
    

    Argumen colClasses penting. Anda menggunakannya untuk menunjukkan jenis data yang akan ditetapkan ke setiap kolom data yang dimuat dari file teks. Dalam contoh ini, semua kolom ditangani sebagai teks, kecuali untuk kolom bernama, yang ditangani sebagai bilangan bulat.

  3. Pada titik ini, Anda mungkin ingin menjeda sejenak, dan menampilkan database Anda di SQL Server Management Studio. Refresh daftar tabel dalam database.

    Anda dapat melihat bahwa, meskipun objek data R telah dibuat di ruang kerja lokal Anda, tabel belum dibuat di database SQL Server. Selain itu, tidak ada data yang dimuat dari file teks ke dalam variabel R.

  4. Sisipkan data dengan memanggil fungsi fungsi rxDataStep .

    rxDataStep(inData = inTextData, outFile = sqlFraudDS, overwrite = TRUE)
    

    Dengan asumsi tidak ada masalah dengan string koneksi Anda, setelah jeda singkat, Anda akan melihat hasil seperti ini:

    Total Baris yang ditulis: 10000, Total waktu: 0,466Baris Dibaca: 10000, Total Baris Yang Diproses: 10000, Total Waktu Gugus: 0,577 detik

  5. Refresh daftar tabel. Untuk memverifikasi bahwa setiap variabel memiliki jenis data yang benar dan berhasil diimpor, Anda juga dapat mengklik kanan tabel di SQL Server Management Studio dan memilih Pilih 1000 Baris Teratas.

Memuat data ke dalam tabel penilaian

  1. Ulangi langkah-langkah untuk memuat himpunan data yang digunakan untuk menilai ke dalam database.

    Mulailah dengan menyediakan jalur ke file sumber.

    ccScoreCsv <- file.path(rxGetOption("sampleDataDir"), "ccFraudScoreSmall.csv")
    
  2. Gunakan fungsi RxTextData untuk mendapatkan data dan menyimpannya dalam variabel, inTextData.

    inTextData <- RxTextData(file = ccScoreCsv,      colClasses = c(
        "custID" = "integer", "gender" = "integer", "state" = "integer",
        "cardholder" = "integer", "balance" = "integer",
        "numTrans" = "integer",
        "numIntlTrans" = "integer", "creditLine" = "integer"))
    
  3. Panggil fungsi rxDataStep untuk menimpa tabel saat ini dengan skema dan data baru.

    rxDataStep(inData = inTextData, sqlScoreDS, overwrite = TRUE)
    
    • Argumen inData menentukan sumber data yang akan digunakan.

    • Argumen outFile menentukan tabel di SQL Server tempat Anda ingin menyimpan data.

    • Jika tabel sudah ada dan Anda tidak menggunakan opsi timpa , hasil disisipkan tanpa pemotongan.

Sekali lagi, jika koneksi berhasil, Anda akan melihat pesan yang menunjukkan penyelesaian dan waktu yang diperlukan untuk menulis data ke dalam tabel:

Total Baris yang ditulis: 10000, Total waktu: 0,384Baris Baca: 10000, Total Baris Yang Diproses: 10000, Total Waktu Gugus: 0,456 detik

Lebih lanjut tentang rxDataStep

rxDataStep adalah fungsi canggih yang dapat melakukan beberapa transformasi pada bingkai data R. Anda juga dapat menggunakan rxDataStep untuk mengonversi data menjadi representasi yang diperlukan oleh tujuan: dalam hal ini, SQL Server.

Secara opsional, Anda dapat menentukan transformasi pada data, dengan menggunakan fungsi R dalam argumen ke rxDataStep. Contoh operasi ini disediakan nanti dalam tutorial ini.

Langkah berikutnya