Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru
Ini adalah tutorial 12 dari seri tutorial RevoScaleR tentang cara menggunakan fungsi RevoScaleR dengan SQL Server.
Dalam tutorial ini, Anda akan menggunakan fungsi rxDataStep untuk memproses data dalam gugus, daripada mengharuskan seluruh himpunan data dimuat ke dalam memori dan diproses pada satu waktu, seperti dalam R tradisional. Fungsi rxDataStep membaca data dalam gugus, menerapkan fungsi R untuk setiap gugus data secara bergantian, lalu menyimpan hasil ringkasan untuk setiap gugus ke sumber data SQL Server umum. Ketika semua data telah dibaca, hasilnya digabungkan.
Tip
Untuk tutorial ini, Anda menghitung tabel kontingensi dengan menggunakan fungsi tabel di R. Contoh ini dimaksudkan hanya untuk tujuan instruksional.
Jika Anda perlu menabeli himpunan data dunia nyata, kami sarankan Anda menggunakan fungsi rxCrossTabs atau rxCube di RevoScaleR, yang dioptimalkan untuk operasi semacam ini.
Data partisi menurut nilai
Buat fungsi R kustom yang memanggil fungsi tabel R pada setiap potongan data, dan beri nama fungsi baru ProcessChunk.
ProcessChunk <- function( dataList) { # Convert the input list to a data frame and compute contingency table chunkTable <- table(as.data.frame(dataList)) # Convert table output to a data frame with a single row varNames <- names(chunkTable) varValues <- as.vector(chunkTable) dim(varValues) <- c(1, length(varNames)) chunkDF <- as.data.frame(varValues) names(chunkDF) <- varNames # Return the data frame, which has a single row return( chunkDF ) }
Atur konteks komputasi ke server.
rxSetComputeContext(sqlCompute)
Tentukan sumber data SQL Server untuk menyimpan data yang Sedang Anda proses. Mulailah dengan menetapkan kueri SQL ke variabel. Kemudian, gunakan variabel tersebut dalam argumen sqlQuery dari sumber data SQL Server baru.
dayQuery <- "SELECT DayOfWeek FROM AirDemoSmallTest" inDataSource <- RxSqlServerData(sqlQuery = dayQuery, connectionString = sqlConnString, rowsPerRead = 50000, colInfo = list(DayOfWeek = list(type = "factor", levels = as.character(1:7))))
Secara opsional, Anda dapat menjalankan rxGetVarInfo pada sumber data ini. Pada titik ini, kolom berisi satu kolom: Var 1: DayOfWeek, Jenis: faktor, tidak ada tingkat faktor yang tersedia
Sebelum menerapkan variabel faktor ini ke data sumber, buat tabel terpisah untuk menyimpan hasil perantara. Sekali lagi, Anda hanya menggunakan fungsi RxSqlServerData untuk menentukan data, memastikan untuk menghapus tabel yang ada dengan nama yang sama.
iroDataSource = RxSqlServerData(table = "iroResults", connectionString = sqlConnString) # Check whether the table already exists. if (rxSqlServerTableExists(table = "iroResults", connectionString = sqlConnString)) { rxSqlServerDropTable( table = "iroResults", connectionString = sqlConnString) }
Panggil fungsi kustom ProcessChunk untuk mengubah data saat dibaca, dengan menggunakannya sebagai argumen transformFunc ke fungsi rxDataStep.
rxDataStep( inData = inDataSource, outFile = iroDataSource, transformFunc = ProcessChunk, overwrite = TRUE)
Untuk melihat hasil perantara ProcessChunk, tetapkan hasil rxImport ke variabel, lalu keluarkan hasilnya ke konsol.
iroResults <- rxImport(iroDataSource) iroResults
Hasil parsial
Mendayung # 1 2 3 4 5 6 7 1 8228 8924 6916 6932 6944 5602 6454 2 8321 5351 7329 7411 7409 6487 7692 Untuk menghitung hasil akhir di semua gugus, jumlahkan kolom, dan tampilkan hasilnya di konsol.
finalResults <- colSums(iroResults) finalResults
Hasil
1 2 3 4 5 6 7 97975 77725 78875 81304 82987 86159 94975 Untuk menghapus tabel hasil perantara, lakukan panggilan ke rxSqlServerDropTable.
rxSqlServerDropTable( table = "iroResults", connectionString = sqlConnString)