Seperti disebutkan di akhir tutorial sebelumnya, Panduan Pemula untuk SQLite, basis data SQLite paling kuat saat digunakan bersama R dan Python. Sejauh ini di DataCamp, Anda telah diperkenalkan cara beroperasi dengan basis data SQLite dari Python (lihat tutorial SQLite di Python oleh Sayak Paul untuk mempelajari cara memanipulasi basis data SQLite melalui paket sqlite3 di Python). Namun, dalam tutorial ini, kita akan berfokus pada cara menggunakan basis data SQLite di R dengan paket RSQLite.
Kita akan membahas dasar-dasar cara melakukan tugas penting seperti mengirim kueri ke basis data SQLite atau membuat tabel menggunakan RSQLite. Selain itu, saya akan membahas cara menggunakan kueri berparameter serta operasi seperti INSERT atau DELETE yang tidak mengembalikan hasil berbentuk tabel.
Membuat Basis Data dan Tabel
Langkah pertama, seperti yang mungkin Anda tebak, adalah membuat basis data. RSQLite dapat membuat basis data SQLite sementara di memori yang bersifat transien, seperti saat Anda membuka baris perintah SQLite. Namun, ini biasanya bukan yang Anda inginkan, jadi mari kita buat basis data yang layak untuk dataset mtcars menggunakan fungsi dbConnect(), yang menerima argumen berikut:
drv: Pengandar basis data
path: Jalur ke basis data SQLite. Jika Anda membuat yang baru, cukup beri nama sesuai pilihan Anda seperti yang saya lakukan di bawah. Jika Anda ingin bekerja dengan basis data sementara di memori, Anda dapat mengabaikan argumen path atau mengetik ":memory:").
# Load the RSQLite Library
library(RSQLite)# Load the mtcars as an R data frame put the row names as a column, and print the header.
data("mtcars")
mtcars$car_names <- rownames(mtcars)
rownames(mtcars)<- c()
head(mtcars)# Create a connection to our new database, CarsDB.db# you can check that the .db file has been created on your working directory
conn <- dbConnect(RSQLite::SQLite(),"CarsDB.db")Didukung oleh
mpg
cyl
disp
hp
drat
wt
qsec
vs
am
gear
carb
car_names
21.0
6
160
110
3.90
2.620
16.46
0
1
4
4
Mazda RX4
21.0
6
160
110
3.90
2.875
17.02
0
1
4
4
Mazda RX4 Wag
22.8
4
108
93
3.85
2.320
18.61
1
1
4
1
Datsun 710
21.4
6
258
110
3.08
3.215
19.44
1
0
3
1
Hornet 4 Drive
18.7
8
360
175
3.15
3.440
17.02
0
0
3
2
Hornet Sportabout
18.1
6
225
105
2.76
3.460
20.22
1
0
3
1
Valiant
Setelah basis data dibuat dan data Anda dalam bentuk yang tepat, Anda dapat langsung membuat tabel di dalam basis data menggunakan fungsi dbWriteTable(). Fungsi ini dapat menerima banyak argumen, tetapi untuk saat ini mari fokus pada yang berikut:
conn: Koneksi ke basis data SQLite Anda
name: Nama yang ingin Anda gunakan untuk tabel Anda
value: Data yang ingin Anda masukkan. Harus berupa data frame R atau objek yang dapat dikonversi menjadi data frame R.
Setelah itu, Anda dapat menggunakan fungsi dbListTables() dengan argumen koneksi basis data SQLite untuk memeriksa bahwa Anda telah berhasil membuat tabel.
# Write the mtcars dataset into a table names mtcars_data
dbWriteTable(conn,"cars_data", mtcars)# List all the tables available in the database
dbListTables(conn)Didukung oleh
'cars_data'
Fitur yang sangat berguna saat membuat tabel menggunakan RSQLite adalah Anda dapat menambahkan lebih banyak data ke tabel yang sudah ada menggunakan loop jika Anda memiliki beberapa data frame dengan menetapkan argumen opsional append = TRUE di dalam dbWriteTable(). Misalnya, mari kita buat tabel contoh baru berisi beberapa mobil dan pabrikannya dengan menambahkan dua data frame berbeda:
# Create toy data frames
car <- c('Camaro','California','Mustang','Explorer')
make <- c('Chevrolet','Ferrari','Ford','Ford')
df1 <- data.frame(car,make)
car <- c('Corolla','Lancer','Sportage','XE')
make <- c('Toyota','Mitsubishi','Kia','Jaguar')
df2 <- data.frame(car,make)# Add them to a list
dfList <- list(df1,df2)# Write a table by appending the data frames inside the listfor(k in1:length(dfList)){
dbWriteTable(conn,"Cars_and_Makes", dfList[[k]], append =TRUE)}# List all the Tables
dbListTables(conn)Didukung oleh
'Cars_and_Makes'
'cars_data'
Sekarang mari pastikan semua data ada di tabel baru:
dbGetQuery(conn,"SELECT * FROM Cars_and_Makes")Didukung oleh
car
make
Camaro
Chevrolet
California
Ferrari
Mustang
Ford
Explorer
Ford
Corolla
Toyota
Lancer
Mitsubishi
Sportage
Kia
XE
Jaguar
Menjalankan Kueri SQL
Seperti yang Anda lihat di atas, memungkinkan untuk menjalankan kueri SQL yang valid melalui RSQLite menggunakan fungsi dbGetQuery(), yang memiliki argumen berikut:
conn: Koneksi ke Basis Data SQLite
query: Kueri SQL yang ingin Anda jalankan sebagai string
Untuk lebih menunjukkan kemampuan menjalankan kueri SQL dengan RSQLite, mari kita bahas beberapa contoh kueri lagi pada tabel cars_data:
Catatan: Penting untuk diingat bahwa melalui RSQLite, Anda dapat menjalankan kueri apa pun yang valid untuk basis data SQLite, mulai dari pernyataan SELECT sederhana hingga JOIN (Kecuali RIGHT OUTER JOIN dan FULL OUTER JOIN, yang tidak diizinkan di SQLite).
# Gather the first 10 rows in the cars_data table
dbGetQuery(conn,"SELECT * FROM cars_data LIMIT 10")Didukung oleh
mpg
cyl
disp
hp
drat
wt
qsec
vs
am
gear
carb
car_names
21.0
6
160.0
110
3.90
2.620
16.46
0
1
4
4
Mazda RX4
21.0
6
160.0
110
3.90
2.875
17.02
0
1
4
4
Mazda RX4 Wag
22.8
4
108.0
93
3.85
2.320
18.61
1
1
4
1
Datsun 710
21.4
6
258.0
110
3.08
3.215
19.44
1
0
3
1
Hornet 4 Drive
18.7
8
360.0
175
3.15
3.440
17.02
0
0
3
2
Hornet Sportabout
18.1
6
225.0
105
2.76
3.460
20.22
1
0
3
1
Valiant
14.3
8
360.0
245
3.21
3.570
15.84
0
0
3
4
Duster 360
24.4
4
146.7
62
3.69
3.190
20.00
1
0
4
2
Merc 240D
22.8
4
140.8
95
3.92
3.150
22.90
1
0
4
2
Merc 230
19.2
6
167.6
123
3.92
3.440
18.30
1
0
4
4
Merc 280
# Get the car names and horsepower of the cars with 8 cylinders
dbGetQuery(conn,"SELECT car_names, hp, cyl FROM cars_data
WHERE cyl =8")Didukung oleh
car_names
hp
cyl
Hornet Sportabout
175
8
Duster 360
245
8
Merc 450SE
180
8
Merc 450SL
180
8
Merc 450SLC
180
8
Cadillac Fleetwood
205
8
Lincoln Continental
215
8
Chrysler Imperial
230
8
Dodge Challenger
150
8
AMC Javelin
150
8
Camaro Z28
245
8
Pontiac Firebird
175
8
Ford Pantera L
264
8
Maserati Bora
335
8
# Get the car names and horsepower starting with M that have 6 or 8 cylinders
dbGetQuery(conn,"SELECT car_names, hp, cyl FROM cars_data
WHERE car_names LIKE 'M%' AND cyl IN (6,8)")Didukung oleh
car_names
hp
cyl
Mazda RX4
110
6
Mazda RX4 Wag
110
6
Merc 280
123
6
Merc 280C
123
6
Merc 450SE
180
8
Merc 450SL
180
8
Merc 450SLC
180
8
Maserati Bora
335
8
# Get the average horsepower and mpg by number of cylinder groups
dbGetQuery(conn,"SELECT cyl, AVG(hp) AS 'average_hp', AVG(mpg) AS 'average_mpg' FROM cars_data
GROUP BY cyl
ORDER BY average_hp")Didukung oleh
cyl
average_hp
average_mpg
4
82.63636
26.66364
6
122.28571
19.74286
8
209.21429
15.10000
Untuk menyimpan hasil kueri Anda agar dapat melakukan operasi lebih lanjut di R sebagai data frame, caranya sesederhana menetapkan hasil kueri Anda ke sebuah variabel.
avg_HpCyl <- dbGetQuery(conn,"SELECT cyl, AVG(hp) AS 'average_hp'FROM cars_data
GROUP BY cyl
ORDER BY average_hp")
avg_HpCyl
class(avg_HpCyl)Didukung oleh
cyl
average_hp
4
82.63636
6
122.28571
8
209.21429
'data.frame'
Menyisipkan Variabel ke dalam Kueri (Kueri Berparameter)
Salah satu keunggulan terbesar bekerja dengan basis data SQLite dari R adalah kemampuan menggunakan kueri berparameter. Artinya, kemampuan untuk mengambil variabel yang tersedia di ruang kerja R Anda dan menggunakannya untuk mengkueri basis data SQLite Anda. Berikut contoh cara menggunakan variabel di dalam kueri SQLite:
# Lets assume that there is some user input that asks us to look only into cars that have over 18 miles per gallon (mpg)# and more than 6 cylinders
mpg <-18
cyl <-6
Result <- dbGetQuery(conn,'SELECT car_names, mpg, cyl FROM cars_data WHERE mpg >= ? AND cyl >= ?', params = c(mpg,cyl))
Result
Didukung oleh
car_names
mpg
cyl
Mazda RX4
21.0
6
Mazda RX4 Wag
21.0
6
Hornet 4 Drive
21.4
6
Hornet Sportabout
18.7
8
Valiant
18.1
6
Merc 280
19.2
6
Pontiac Firebird
19.2
8
Ferrari Dino
19.7
6
Seperti yang Anda lihat, satu-satunya perbedaan antara mengirim kueri biasa dan kueri berparameter terletak pada nilai placeholder di dalam kueri (>= ?) dan argumen params dari dbGetQuery(), yang menerima list atau vektor berisi nilai yang ingin Anda tetapkan ke placeholder (dalam hal ini kita memiliki vektor yang berisi variabel mpg dan cyl).
Sekarang, bagaimana jika Anda ingin menjalankan kueri yang berbeda? Pada contoh di atas, seperti yang Anda lihat, saya cukup menyusun kueri secara manual. Kueri itu hanya memungkinkan masukan nilai mpg dan cyl, dan kueri hanya akan mengambil mobil dengan mpg dan cyl yang lebih tinggi atau sama. Namun, mungkin ada situasi ketika Anda ingin lebih fleksibel. Bagaimana jika seorang pengguna ingin melihat mobil dengan tenaga kuda dan bobot yang lebih tinggi atau sama dari nilai tertentu juga? Dengan kueri di atas, Anda harus kembali dan menulis ulang, tetapi Anda dapat menulis fungsi yang membuat langkah itu tidak diperlukan. Mari kita lihat salah satunya:
# Assemble an example function that takes the SQLite database connection, a base query,# and the parameters you want to use in the WHERE clause as a list
assembleQuery <-function(conn, base, search_parameters){
parameter_names <- names(search_parameters)
partial_queries <-""# Iterate over all the parameters to assemble the queryfor(k in1:length(parameter_names)){
filter_k <- paste(parameter_names[k]," >= ? ")# If there is more than 1 parameter, add an AND statement before the parameter name and placeholderif(k >1){
filter_k <- paste("AND ", parameter_names[k]," >= ?")}
partial_queries <- paste(partial_queries, filter_k)}# Paste all together into a single query using a WHERE statement
final_paste <- paste(base," WHERE", partial_queries)# Print the assembled query to show how it looks like
print(final_paste)# Run the final query. I unlist the values from the search_parameters list into a vector since it is needed# when using various anonymous placeholders (i.e. >= ?)
values <- unlist(search_parameters, use.names =FALSE)
result <- dbGetQuery(conn, final_paste, params = values)# return the executed query
return(result)}
base <-"SELECT car_names, mpg, hp, wt FROM cars_data"
search_parameters <- list("mpg"=16,"hp"=150,"wt"=2.1)
result <- assembleQuery(conn, base, search_parameters)
result
Didukung oleh
[1]"SELECT car_names, mpg, hp, wt FROM cars_data WHERE mpg >= ? AND hp >= ? AND wt >= ?"Didukung oleh
car_names
mpg
hp
wt
Hornet Sportabout
18.7
175
3.440
Merc 450SE
16.4
180
4.070
Merc 450SL
17.3
180
3.730
Pontiac Firebird
19.2
175
3.845
Ferrari Dino
19.7
175
2.770
Fungsi di atas mungkin sederhana, tetapi mengilustrasikan bagaimana memungkinkan menulis kode R yang menghasilkan kueri SQL yang dapat dijalankan pada basis data SQLite. Saya mendorong Anda untuk terus mengeksplorasi jika Anda tertarik pada kasus penggunaan ini. Fungsi di atas dapat ditingkatkan dalam beberapa cara, dimulai dengan menghilangkan asumsi bahwa pengguna yang memberikan parameter pasti ingin melihat nilai yang lebih tinggi atau sama dari yang dimasukkan.
Pernyataan yang Tidak Mengembalikan Hasil Berbentuk Tabel
Terkadang, Anda mungkin ingin menjalankan kueri SQL yang tidak selalu mengembalikan data berbentuk tabel. Contoh operasi ini adalah menyisipkan, memperbarui, atau menghapus rekaman tabel. Untuk ini, kita dapat menggunakan fungsi dbExecute(), yang menerima argumen koneksi basis data SQLite dan kueri SQL. Beberapa contoh dapat dilihat di bawah:
# Visualize the table before deletion
dbGetQuery(conn,"SELECT * FROM cars_data LIMIT 10")# Delete the column belonging to the Mazda RX4. You will see a 1 as the output.
dbExecute(conn,"DELETE FROM cars_data WHERE car_names = 'Mazda RX4'")# Visualize the new table after deletion
dbGetQuery(conn,"SELECT * FROM cars_data LIMIT 10")Didukung oleh
mpg
cyl
disp
hp
drat
wt
qsec
vs
am
gear
carb
car_names
21.0
6
160.0
110
3.90
2.620
16.46
0
1
4
4
Mazda RX4
21.0
6
160.0
110
3.90
2.875
17.02
0
1
4
4
Mazda RX4 Wag
22.8
4
108.0
93
3.85
2.320
18.61
1
1
4
1
Datsun 710
21.4
6
258.0
110
3.08
3.215
19.44
1
0
3
1
Hornet 4 Drive
18.7
8
360.0
175
3.15
3.440
17.02
0
0
3
2
Hornet Sportabout
18.1
6
225.0
105
2.76
3.460
20.22
1
0
3
1
Valiant
14.3
8
360.0
245
3.21
3.570
15.84
0
0
3
4
Duster 360
24.4
4
146.7
62
3.69
3.190
20.00
1
0
4
2
Merc 240D
22.8
4
140.8
95
3.92
3.150
22.90
1
0
4
2
Merc 230
19.2
6
167.6
123
3.92
3.440
18.30
1
0
4
4
Merc 280
1
mpg
cyl
disp
hp
drat
wt
qsec
vs
am
gear
carb
car_names
21.0
6
160.0
110
3.90
2.875
17.02
0
1
4
4
Mazda RX4 Wag
22.8
4
108.0
93
3.85
2.320
18.61
1
1
4
1
Datsun 710
21.4
6
258.0
110
3.08
3.215
19.44
1
0
3
1
Hornet 4 Drive
18.7
8
360.0
175
3.15
3.440
17.02
0
0
3
2
Hornet Sportabout
18.1
6
225.0
105
2.76
3.460
20.22
1
0
3
1
Valiant
14.3
8
360.0
245
3.21
3.570
15.84
0
0
3
4
Duster 360
24.4
4
146.7
62
3.69
3.190
20.00
1
0
4
2
Merc 240D
22.8
4
140.8
95
3.92
3.150
22.90
1
0
4
2
Merc 230
19.2
6
167.6
123
3.92
3.440
18.30
1
0
4
4
Merc 280
17.8
6
167.6
123
3.92
3.440
18.90
1
0
4
4
Merc 280C
Sekarang mari coba menyisipkan kembali data Mazda RX4:
# Insert the data for the Mazda RX4. This will also ouput a 1
dbExecute(conn,"INSERT INTO cars_data VALUES (21.0,6,160.0,110,3.90,2.620,16.46,0,1,4,4,'Mazda RX4')")# See that we re-introduced the Mazda RX4 succesfully at the end
dbGetQuery(conn,"SELECT * FROM cars_data")Didukung oleh
1
mpg
cyl
disp
hp
drat
wt
qsec
vs
am
gear
carb
car_names
21.0
6
160.0
110
3.90
2.875
17.02
0
1
4
4
Mazda RX4 Wag
22.8
4
108.0
93
3.85
2.320
18.61
1
1
4
1
Datsun 710
21.4
6
258.0
110
3.08
3.215
19.44
1
0
3
1
Hornet 4 Drive
18.7
8
360.0
175
3.15
3.440
17.02
0
0
3
2
Hornet Sportabout
18.1
6
225.0
105
2.76
3.460
20.22
1
0
3
1
Valiant
14.3
8
360.0
245
3.21
3.570
15.84
0
0
3
4
Duster 360
24.4
4
146.7
62
3.69
3.190
20.00
1
0
4
2
Merc 240D
22.8
4
140.8
95
3.92
3.150
22.90
1
0
4
2
Merc 230
19.2
6
167.6
123
3.92
3.440
18.30
1
0
4
4
Merc 280
17.8
6
167.6
123
3.92
3.440
18.90
1
0
4
4
Merc 280C
16.4
8
275.8
180
3.07
4.070
17.40
0
0
3
3
Merc 450SE
17.3
8
275.8
180
3.07
3.730
17.60
0
0
3
3
Merc 450SL
15.2
8
275.8
180
3.07
3.780
18.00
0
0
3
3
Merc 450SLC
10.4
8
472.0
205
2.93
5.250
17.98
0
0
3
4
Cadillac Fleetwood
10.4
8
460.0
215
3.00
5.424
17.82
0
0
3
4
Lincoln Continental
14.7
8
440.0
230
3.23
5.345
17.42
0
0
3
4
Chrysler Imperial
32.4
4
78.7
66
4.08
2.200
19.47
1
1
4
1
Fiat 128
30.4
4
75.7
52
4.93
1.615
18.52
1
1
4
2
Honda Civic
33.9
4
71.1
65
4.22
1.835
19.90
1
1
4
1
Toyota Corolla
21.5
4
120.1
97
3.70
2.465
20.01
1
0
3
1
Toyota Corona
15.5
8
318.0
150
2.76
3.520
16.87
0
0
3
2
Dodge Challenger
15.2
8
304.0
150
3.15
3.435
17.30
0
0
3
2
AMC Javelin
13.3
8
350.0
245
3.73
3.840
15.41
0
0
3
4
Camaro Z28
19.2
8
400.0
175
3.08
3.845
17.05
0
0
3
2
Pontiac Firebird
27.3
4
79.0
66
4.08
1.935
18.90
1
1
4
1
Fiat X1-9
26.0
4
120.3
91
4.43
2.140
16.70
0
1
5
2
Porsche 914-2
30.4
4
95.1
113
3.77
1.513
16.90
1
1
5
2
Lotus Europa
15.8
8
351.0
264
4.22
3.170
14.50
0
1
5
4
Ford Pantera L
19.7
6
145.0
175
3.62
2.770
15.50
0
1
5
6
Ferrari Dino
15.0
8
301.0
335
3.54
3.570
14.60
0
1
5
8
Maserati Bora
21.4
4
121.0
109
4.11
2.780
18.60
1
1
4
2
Volvo 142E
21.0
6
160.0
110
3.90
2.620
16.46
0
1
4
4
Mazda RX4
Seperti yang Anda lihat, baris kode terakhir menambahkan Mazda RX4 ke akhir tabel. Setelah Anda selesai bekerja dengan basis data SQLite dalam R, penting untuk memanggil fungsi dbDisconnect(). Ini memastikan kita melepaskan sumber daya apa pun yang digunakan oleh koneksi basis data, yang selalu merupakan praktik yang baik.
# Close the database connection to CarsDB
dbDisconnect(conn)Didukung oleh
Kesimpulan
Dalam tutorial ini, kita telah membahas fungsi-fungsi penting yang diperlukan untuk memanipulasi basis data SQLite di R menggunakan RSQLite. Basis data SQLite, jika digunakan dengan tepat, adalah alat yang sangat bermanfaat saat digabungkan di dalam skrip R Anda. Contoh kekuatan persilangan antara R dan SQLite dapat dilihat pada kueri berparameter, yang dapat digunakan jika Anda perlu mengkueri basis data untuk menampilkan informasi berdasarkan masukan pengguna di aplikasi R Shiny. Contoh kasus penggunaan lain untuk kueri berparameter bisa berupa asisten virtual atau chatbot. Jika Anda ingin mempelajari lebih lanjut tentang ini, saya mendorong Anda untuk melihat kursus DataCamp Building Chatbots with Python.
Menulis tabel SQLite dengan menambahkan data frame juga bisa sangat kuat. Seperti yang saya catat dalam tutorial Panduan Pemula untuk SQLite, kemampuan ini memungkinkan saya menyelesaikan proyek analisis jaringan sosial dengan menambahkan pengikut dari beberapa pengguna Twitter yang diminati ke sebuah tabel seiring saya mengumpulkannya. Saya menggunakan basis data SQLite untuk ini, guna menghemat waktu dengan menghindari kebutuhan untuk memulai dari awal jika terjadi pemadaman listrik atau pembaruan Windows, yang dapat memaksa komputer saya mati. Jika hal seperti itu terjadi, yang perlu saya lakukan hanyalah melanjutkan mengumpulkan pengikut dari pengguna yang posisinya setelah yang terakhir saya miliki di basis data. Untuk memberi gambaran, waktu komputasi untuk mengumpulkan pengikut semua pengguna Twitter yang diminati memakan waktu hampir 4 minggu karena batas laju API Twitter. Oleh karena itu, memulai dari nol akibat pemadaman listrik atau pembaruan Windows akan sangat tidak diinginkan.
Seperti biasa, saya mendorong Anda untuk terus belajar tentang basis data SQLite dan cara berinteraksi dengannya melalui R. Saya sangat mendorong Anda untuk menyelami lebih dalam dan memeriksa tutorial sebelumnya yang membahas penggunaannya dengan Python dan baris perintah, yang dapat semakin membantu Anda menjadi ahli SQLite. Terus belajar; langit adalah batasnya!
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Seperti disebutkan di akhir tutorial sebelumnya, Panduan Pemula untuk SQLite, basis data SQLite paling kuat saat digunakan bersama R dan Python. Sejauh ini di DataCamp, Anda telah diperkenalkan cara beroperasi dengan basis data SQLite dari Python (lihat tutorial SQLite di Python oleh Sayak Paul untuk mempelajari cara memanipulasi basis data SQLite melalui paket sqlite3 di Python). Namun, dalam tutorial ini, kita akan berfokus pada cara menggunakan basis data SQLite di R dengan paket RSQLite.
Kita akan membahas dasar-dasar cara melakukan tugas penting seperti mengirim kueri ke basis data SQLite atau membuat tabel menggunakan RSQLite. Selain itu, saya akan membahas cara menggunakan kueri berparameter serta operasi seperti INSERT atau DELETE yang tidak mengembalikan hasil berbentuk tabel.
Membuat Basis Data dan Tabel
Langkah pertama, seperti yang mungkin Anda tebak, adalah membuat basis data. RSQLite dapat membuat basis data SQLite sementara di memori yang bersifat transien, seperti saat Anda membuka baris perintah SQLite. Namun, ini biasanya bukan yang Anda inginkan, jadi mari kita buat basis data yang layak untuk dataset mtcars menggunakan fungsi dbConnect(), yang menerima argumen berikut:
Setelah basis data dibuat dan data Anda dalam bentuk yang tepat, Anda dapat langsung membuat tabel di dalam basis data menggunakan fungsi dbWriteTable(). Fungsi ini dapat menerima banyak argumen, tetapi untuk saat ini mari fokus pada yang berikut:
Setelah itu, Anda dapat menggunakan fungsi dbListTables() dengan argumen koneksi basis data SQLite untuk memeriksa bahwa Anda telah berhasil membuat tabel.
'cars_data'
Fitur yang sangat berguna saat membuat tabel menggunakan RSQLite adalah Anda dapat menambahkan lebih banyak data ke tabel yang sudah ada menggunakan loop jika Anda memiliki beberapa data frame dengan menetapkan argumen opsional append = TRUE di dalam dbWriteTable(). Misalnya, mari kita buat tabel contoh baru berisi beberapa mobil dan pabrikannya dengan menambahkan dua data frame berbeda:
Sekarang mari pastikan semua data ada di tabel baru:
Menjalankan Kueri SQL
Seperti yang Anda lihat di atas, memungkinkan untuk menjalankan kueri SQL yang valid melalui RSQLite menggunakan fungsi dbGetQuery(), yang memiliki argumen berikut:
Untuk lebih menunjukkan kemampuan menjalankan kueri SQL dengan RSQLite, mari kita bahas beberapa contoh kueri lagi pada tabel cars_data:
Catatan: Penting untuk diingat bahwa melalui RSQLite, Anda dapat menjalankan kueri apa pun yang valid untuk basis data SQLite, mulai dari pernyataan SELECT sederhana hingga JOIN (Kecuali RIGHT OUTER JOIN dan FULL OUTER JOIN, yang tidak diizinkan di SQLite).
Untuk menyimpan hasil kueri Anda agar dapat melakukan operasi lebih lanjut di R sebagai data frame, caranya sesederhana menetapkan hasil kueri Anda ke sebuah variabel.
'data.frame'
Menyisipkan Variabel ke dalam Kueri (Kueri Berparameter)
Salah satu keunggulan terbesar bekerja dengan basis data SQLite dari R adalah kemampuan menggunakan kueri berparameter. Artinya, kemampuan untuk mengambil variabel yang tersedia di ruang kerja R Anda dan menggunakannya untuk mengkueri basis data SQLite Anda. Berikut contoh cara menggunakan variabel di dalam kueri SQLite:
Seperti yang Anda lihat, satu-satunya perbedaan antara mengirim kueri biasa dan kueri berparameter terletak pada nilai placeholder di dalam kueri (>= ?) dan argumen params dari dbGetQuery(), yang menerima list atau vektor berisi nilai yang ingin Anda tetapkan ke placeholder (dalam hal ini kita memiliki vektor yang berisi variabel mpg dan cyl).
Sekarang, bagaimana jika Anda ingin menjalankan kueri yang berbeda? Pada contoh di atas, seperti yang Anda lihat, saya cukup menyusun kueri secara manual. Kueri itu hanya memungkinkan masukan nilai mpg dan cyl, dan kueri hanya akan mengambil mobil dengan mpg dan cyl yang lebih tinggi atau sama. Namun, mungkin ada situasi ketika Anda ingin lebih fleksibel. Bagaimana jika seorang pengguna ingin melihat mobil dengan tenaga kuda dan bobot yang lebih tinggi atau sama dari nilai tertentu juga? Dengan kueri di atas, Anda harus kembali dan menulis ulang, tetapi Anda dapat menulis fungsi yang membuat langkah itu tidak diperlukan. Mari kita lihat salah satunya:
Fungsi di atas mungkin sederhana, tetapi mengilustrasikan bagaimana memungkinkan menulis kode R yang menghasilkan kueri SQL yang dapat dijalankan pada basis data SQLite. Saya mendorong Anda untuk terus mengeksplorasi jika Anda tertarik pada kasus penggunaan ini. Fungsi di atas dapat ditingkatkan dalam beberapa cara, dimulai dengan menghilangkan asumsi bahwa pengguna yang memberikan parameter pasti ingin melihat nilai yang lebih tinggi atau sama dari yang dimasukkan.
Pernyataan yang Tidak Mengembalikan Hasil Berbentuk Tabel
Terkadang, Anda mungkin ingin menjalankan kueri SQL yang tidak selalu mengembalikan data berbentuk tabel. Contoh operasi ini adalah menyisipkan, memperbarui, atau menghapus rekaman tabel. Untuk ini, kita dapat menggunakan fungsi dbExecute(), yang menerima argumen koneksi basis data SQLite dan kueri SQL. Beberapa contoh dapat dilihat di bawah:
1
Sekarang mari coba menyisipkan kembali data Mazda RX4:
1
Seperti yang Anda lihat, baris kode terakhir menambahkan Mazda RX4 ke akhir tabel. Setelah Anda selesai bekerja dengan basis data SQLite dalam R, penting untuk memanggil fungsi dbDisconnect(). Ini memastikan kita melepaskan sumber daya apa pun yang digunakan oleh koneksi basis data, yang selalu merupakan praktik yang baik.
Kesimpulan
Dalam tutorial ini, kita telah membahas fungsi-fungsi penting yang diperlukan untuk memanipulasi basis data SQLite di R menggunakan RSQLite. Basis data SQLite, jika digunakan dengan tepat, adalah alat yang sangat bermanfaat saat digabungkan di dalam skrip R Anda. Contoh kekuatan persilangan antara R dan SQLite dapat dilihat pada kueri berparameter, yang dapat digunakan jika Anda perlu mengkueri basis data untuk menampilkan informasi berdasarkan masukan pengguna di aplikasi R Shiny. Contoh kasus penggunaan lain untuk kueri berparameter bisa berupa asisten virtual atau chatbot. Jika Anda ingin mempelajari lebih lanjut tentang ini, saya mendorong Anda untuk melihat kursus DataCamp Building Chatbots with Python.
Menulis tabel SQLite dengan menambahkan data frame juga bisa sangat kuat. Seperti yang saya catat dalam tutorial Panduan Pemula untuk SQLite, kemampuan ini memungkinkan saya menyelesaikan proyek analisis jaringan sosial dengan menambahkan pengikut dari beberapa pengguna Twitter yang diminati ke sebuah tabel seiring saya mengumpulkannya. Saya menggunakan basis data SQLite untuk ini, guna menghemat waktu dengan menghindari kebutuhan untuk memulai dari awal jika terjadi pemadaman listrik atau pembaruan Windows, yang dapat memaksa komputer saya mati. Jika hal seperti itu terjadi, yang perlu saya lakukan hanyalah melanjutkan mengumpulkan pengikut dari pengguna yang posisinya setelah yang terakhir saya miliki di basis data. Untuk memberi gambaran, waktu komputasi untuk mengumpulkan pengikut semua pengguna Twitter yang diminati memakan waktu hampir 4 minggu karena batas laju API Twitter. Oleh karena itu, memulai dari nol akibat pemadaman listrik atau pembaruan Windows akan sangat tidak diinginkan.
Seperti biasa, saya mendorong Anda untuk terus belajar tentang basis data SQLite dan cara berinteraksi dengannya melalui R. Saya sangat mendorong Anda untuk menyelami lebih dalam dan memeriksa tutorial sebelumnya yang membahas penggunaannya dengan Python dan baris perintah, yang dapat semakin membantu Anda menjadi ahli SQLite. Terus belajar; langit adalah batasnya!