Geavanceerde selectie II: de SQL
Zoals eerder genoemd zet sparklyr je code om naar SQL voordat het naar Spark wordt gestuurd wanneer je de dplyr-interface gebruikt. Meestal is dat precies wat je wilt. Je kunt echter ook ruwe SQL schrijven om hetzelfde te bereiken. Vaak is dat niet handig, omdat de code lastiger te schrijven en te debuggen is. Maar als je wilt dat je code draagbaar is – dus ook buiten R gebruikt kan worden – kan het nuttig zijn. Een veelvoorkomende werkwijze is bijvoorbeeld om met sparklyr te experimenteren met dataverwerking en vervolgens in een productie-omgeving over te stappen op ruwe SQL. Door vanaf het begin ruwe SQL te schrijven, kun je je queries simpelweg kopiëren en plakken wanneer je naar productie gaat.
SQL-queries worden als strings geschreven en doorgegeven aan dbGetQuery() uit het DBI-pakket. Het patroon is als volgt.
query <- "SELECT col1, col2 FROM some_data WHERE some_condition"
a_data.frame <- dbGetQuery(spark_conn, query)
Let op: in tegenstelling tot de dplyr-code die je schreef, zal dbGetQuery() de query altijd uitvoeren en de resultaten direct naar R teruggeven. Als je het ophalen van de data wilt uitstellen, kun je dbSendQuery() gebruiken om de query uit te voeren en vervolgens dbFetch() om de resultaten op te halen. Dat is geavanceerder gebruik en valt hier buiten scope. Merk ook op dat DBI-functies data.frames teruggeven in plaats van tibbles, omdat DBI een lager-niveaupakket is.
Wil je meer leren over het schrijven van SQL-code? Volg dan de cursus Introduction to SQL.
Deze oefening maakt deel uit van de cursus
Introductie tot Spark met sparklyr in R
Oefeninstructies
Er is al een Spark-verbinding voor je aangemaakt als spark_conn. Een tibble die is gekoppeld aan de trackmetadata die in Spark is opgeslagen, is vooraf gedefinieerd als track_metadata_tbl, en is in SQL-queries toegankelijk als track_metadata.
- Maak de query af om alle kolommen te selecteren uit de Spark-dataframe
track_metadatawaaryearkleiner is dan 1935 endurationgroter is dan 300 seconden. - Roep
dbGetQuery()aan om de query uit te voeren, wijs de resultaten toe aanresultsen bekijk vervolgens de output.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# Write SQL query
query <- "SELECT ___ FROM ___ WHERE ___ AND ___"
# Run the query
(results <- ___(___, ___))