Selecție avansată II: SQL-ul
Așa cum am menționat anterior, atunci când folosești interfața dplyr, sparklyr îți convertește codul în SQL înainte de a-l trimite către Spark. În cele mai multe cazuri, acesta este exact comportamentul dorit. Totuși, poți scrie și SQL direct pentru a obține același rezultat. De cele mai multe ori, aceasta nu este cea mai bună idee, deoarece codul devine mai greu de scris și de depanat. Dacă însă vrei ca codul tău să fie portabil – adică să poată fi folosit și în afara R – atunci poate fi util. De exemplu, un flux de lucru destul de comun este să folosești sparklyr pentru a experimenta procesarea datelor, iar apoi să treci la SQL direct în mediul de producție. Scriind SQL de la bun început, poți pur și simplu să copiezi și să lipești interogările când faci tranziția la producție.
Interogările SQL sunt scrise ca șiruri de caractere și transmise funcției dbGetQuery() din pachetul DBI. Tiparul este următorul:
query <- "SELECT col1, col2 FROM some_data WHERE some_condition"
a_data.frame <- dbGetQuery(spark_conn, query)
Spredeosebire de codul dplyr pe care l-ai scris, dbGetQuery() va executa întotdeauna interogarea și va returna rezultatele în R imediat. Dacă vrei să amâni returnarea datelor, poți folosi dbSendQuery() pentru a executa interogarea, apoi dbFetch() pentru a recupera rezultatele. Acesta este un mod de utilizare mai avansat, care nu este acoperit aici. Reține, de asemenea, că funcțiile din DBI returnează obiecte de tip data.frame, nu tibble, deoarece DBI este un pachet de nivel mai jos.
Dacă vrei să afli mai multe despre scrierea codului SQL, urmează cursul Introduction to SQL.
Acest exercițiu face parte din cursul
Introducere în Spark cu sparklyr în R
Instrucțiuni pentru exercițiu
O conexiune Spark a fost creată pentru tine sub numele spark_conn. Un tibble atașat la metadatele pistelor stocate în Spark a fost predefinit ca track_metadata_tbl și poate fi accesat în interogări SQL prin track_metadata.
- Completează interogarea pentru a selecta toate coloanele din cadrul de date Spark
track_metadataundeyeareste mai mic decât 1935 șidurationeste mai mare de 300 de secunde. - Apelează
dbGetQuery()pentru a executa interogarea, atribuind rezultatele variabileiresults, apoi vizualizează rezultatul.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# Write SQL query
query <- "SELECT ___ FROM ___ WHERE ___ AND ___"
# Run the query
(results <- ___(___, ___))