Zaawansowane wybieranie danych II: SQL
Jak już wspomniano, gdy korzystasz z interfejsu dplyr, sparklyr automatycznie przekształca twój kod na SQL przed przekazaniem go do Sparka. W większości przypadków jest to dokładnie to, czego potrzebujesz. Możesz jednak również pisać SQL bezpośrednio, aby osiągnąć ten sam efekt. Zazwyczaj nie jest to najlepszy pomysł – taki kod jest trudniejszy do napisania i do debugowania. Jeśli jednak zależy ci na przenośności kodu – czyli możliwości użycia go poza R – może to być przydatne podejście. Na przykład popularnym schematem pracy jest używanie sparklyr do eksperymentowania z przetwarzaniem danych, a następnie przejście na surowy SQL w środowisku produkcyjnym. Pisząc zapytania SQL od razu, możesz po prostu skopiować je i wkleić przy przejściu do produkcji.
Zapytania SQL zapisuje się jako ciągi znaków i przekazuje do funkcji dbGetQuery() z pakietu DBI. Wzorzec wygląda następująco.
query <- "SELECT col1, col2 FROM some_data WHERE some_condition"
a_data.frame <- dbGetQuery(spark_conn, query)
Zwróć uwagę, że w odróżnieniu od kodu dplyr, który do tej pory pisałeś, funkcja dbGetQuery() zawsze od razu wykonuje zapytanie i zwraca wyniki do R. Jeśli chcesz opóźnić zwrócenie danych, możesz użyć dbSendQuery() do wykonania zapytania, a następnie dbFetch() do pobrania wyników. To bardziej zaawansowane podejście, które nie jest omawiane w tym kursie. Warto też wiedzieć, że funkcje z pakietu DBI zwracają obiekty data.frame, a nie tibble – DBI to pakiet niższego poziomu.
Jeśli chcesz dowiedzieć się więcej o pisaniu kodu SQL, zapoznaj się z kursem Introduction to SQL.
To ćwiczenie jest częścią kursu
Wprowadzenie do Spark z pakietem sparklyr w R
Instrukcje do ćwiczenia
Połączenie ze Sparkiem zostało już utworzone jako spark_conn. Tibble powiązany z metadanymi utworów przechowywanymi w Sparku jest wstępnie zdefiniowany jako track_metadata_tbl i można się do niego odwoływać w zapytaniach SQL pod nazwą track_metadata.
- Uzupełnij zapytanie, aby wybrać wszystkie kolumny z ramki danych Spark
track_metadata, gdzieyearjest mniejszy niż 1935, adurationjest większa niż 300 sekund. - Wywołaj
dbGetQuery(), aby wykonać zapytanie – przypisz wyniki do zmiennejresults, a następnie wyświetl dane wyjściowe.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# Write SQL query
query <- "SELECT ___ FROM ___ WHERE ___ AND ___"
# Run the query
(results <- ___(___, ___))