Bắt đầu ngayBắt đầu miễn phí

Lựa chọn nâng cao II: SQL

Như đã đề cập, khi bạn dùng giao diện dplyr, sparklyr sẽ chuyển mã của bạn thành SQL trước khi gửi cho Spark. Hầu hết thời gian, đây là điều bạn muốn. Tuy nhiên, bạn cũng có thể viết SQL thuần để làm cùng một việc. Thường thì đây là một ý tưởng không hay vì mã khó viết và khó gỡ lỗi hơn. Tuy vậy, nếu bạn muốn mã có tính di động – tức có thể dùng ngoài R – thì lại hữu ích. Ví dụ, một quy trình khá phổ biến là dùng sparklyr để thử nghiệm xử lý dữ liệu, sau đó chuyển sang SQL thuần trong môi trường triển khai. Bằng cách viết SQL thuần ngay từ đầu, bạn có thể chỉ việc sao chép và dán các truy vấn khi đưa vào sản xuất.

Câu lệnh SQL được viết dưới dạng chuỗi và truyền vào dbGetQuery() từ gói DBI. Mẫu như sau.

query <- "SELECT col1, col2 FROM some_data WHERE some_condition"
a_data.frame <- dbGetQuery(spark_conn, query)

Lưu ý rằng khác với mã dplyr bạn đã viết, dbGetQuery() sẽ luôn thực thi truy vấn và trả về kết quả cho R ngay lập tức. Nếu bạn muốn trì hoãn việc trả dữ liệu, bạn có thể dùng dbSendQuery() để thực thi truy vấn, rồi dbFetch() để lấy kết quả. Đó là cách dùng nâng cao, không đề cập chi tiết ở đây. Cũng lưu ý rằng các hàm DBI trả về data.frame thay vì tibble, vì DBI là một gói cấp thấp hơn.

Nếu bạn muốn học thêm về viết SQL, hãy tham gia khóa Introduction to SQL.

Bài tập này là một phần của khóa học

Nhập môn Spark với sparklyr trong R

Xem khóa học

Hướng dẫn bài tập

Kết nối Spark đã được tạo sẵn cho bạn dưới tên spark_conn. Một tibble gắn với track metadata được lưu trong Spark đã được định nghĩa sẵn là track_metadata_tbl, và có thể truy cập trong truy vấn SQL với tên track_metadata.

  • Hoàn thành truy vấn để chọn tất cả các cột từ data frame Spark track_metadata nơi year nhỏ hơn 1935 và duration lớn hơn 300 giây.
  • Gọi dbGetQuery() để thực thi truy vấn, gán kết quả vào results, rồi xem đầu ra.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# Write SQL query
query <- "SELECT ___ FROM ___ WHERE ___ AND ___"

# Run the query
(results <- ___(___, ___))
Chỉnh sửa và Chạy Mã