Aan de slagBegin gratis

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

Bekijk cursus

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_metadata waar year kleiner is dan 1935 en duration groter is dan 300 seconden.
  • Roep dbGetQuery() aan om de query uit te voeren, wijs de resultaten toe aan results en 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 <- ___(___, ___))
Code bewerken en uitvoeren