LoslegenKostenlos loslegen

Erweiterte Auswahl II: SQL

Wie bereits erwähnt, wandelt sparklyr deinen Code in SQL um, wenn du das dplyr-Interface verwendest, und übergibt ihn dann an Spark. Meistens ist das genau das, was du willst. Du kannst aber auch direktes SQL schreiben, um dieselbe Aufgabe zu erledigen. In der Regel ist das keine gute Idee, weil der Code schwieriger zu schreiben und zu debuggen ist. Wenn dein Code jedoch portabel sein soll – also auch außerhalb von R genutzt werden kann –, kann es sinnvoll sein. Ein häufiges Vorgehen ist zum Beispiel, mit sparklyr Datenverarbeitung auszuprobieren und später in einer Produktionsumgebung auf pures SQL umzusteigen. Wenn du von Anfang an reines SQL schreibst, kannst du deine Abfragen beim Umzug in die Produktion einfach kopieren und einfügen.

SQL-Abfragen werden als Strings geschrieben und an dbGetQuery() aus dem DBI-Paket übergeben. Das Muster sieht so aus:

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

Beachte, dass – anders als bei deinem dplyr-Code – dbGetQuery() die Abfrage immer sofort ausführt und die Ergebnisse direkt nach R zurückgibt. Wenn du die Rückgabe der Daten verzögern willst, kannst du dbSendQuery() verwenden, um die Abfrage auszuführen, und anschließend dbFetch(), um die Ergebnisse abzuholen. Das ist eine fortgeschrittene Nutzung und wird hier nicht behandelt. Beachte außerdem, dass DBI-Funktionen data.frames statt tibbles zurückgeben, da DBI ein Low-Level-Paket ist.

Wenn du mehr darüber lernen möchtest, wie man SQL-Code schreibt, mach den Kurs Introduction to SQL.

Diese Übung ist Teil des Kurses

Einführung in Spark mit sparklyr in R

Kurs anzeigen

Anleitung zur Übung

Es wurde bereits eine Spark-Verbindung als spark_conn erstellt. Eine Tibble, die an die in Spark gespeicherten Track-Metadaten angebunden ist, wurde als track_metadata_tbl vordefiniert und kann in SQL-Abfragen als track_metadata verwendet werden.

  • Vervollständige die Abfrage, um alle Spalten aus dem Spark-Data-Frame track_metadata auszuwählen, bei dem year kleiner als 1935 und duration größer als 300 Sekunden ist.
  • Rufe dbGetQuery() auf, um die Abfrage auszuführen, weise die Ergebnisse results zu und sieh dir anschließend die Ausgabe an.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

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

# Run the query
(results <- ___(___, ___))
Code bearbeiten und ausführen