Selezione avanzata II: SQL
Come accennato in precedenza, quando usi l’interfaccia di dplyr, sparklyr converte il tuo codice in SQL prima di passarlo a Spark. Nella maggior parte dei casi è proprio ciò che vuoi. Tuttavia, puoi anche scrivere SQL “grezzo” per ottenere lo stesso risultato. Il più delle volte non è una buona idea, perché il codice è più difficile da scrivere e da fare debug. Però, se vuoi che il tuo codice sia portabile – cioè utilizzabile anche fuori da R – può tornare utile. Ad esempio, un flusso di lavoro abbastanza comune è usare sparklyr per sperimentare l’elaborazione dei dati, poi passare a SQL grezzo in produzione. Scrivendo subito in SQL, potrai semplicemente copiare e incollare le query quando passerai in produzione.
Le query SQL sono stringhe e vengono passate a dbGetQuery() del pacchetto DBI. Il pattern è il seguente.
query <- "SELECT col1, col2 FROM some_data WHERE some_condition"
a_data.frame <- dbGetQuery(spark_conn, query)
Nota che, a differenza del codice dplyr che hai scritto, dbGetQuery() esegue sempre la query e restituisce immediatamente i risultati a R. Se vuoi rimandare il recupero dei dati, puoi usare dbSendQuery() per eseguire la query e poi dbFetch() per ottenere i risultati. Si tratta di un uso più avanzato, non trattato qui. Nota anche che le funzioni di DBI restituiscono data.frame e non tibble, perché DBI è un pacchetto di livello più basso.
Se vuoi approfondire la scrittura di codice SQL, segui il corso Introduction to SQL.
Questo esercizio fa parte del corso
Introduzione a Spark con sparklyr in R
Istruzioni dell'esercizio
È stata creata per te una connessione a Spark come spark_conn. Una tibble collegata ai metadati delle tracce archiviati in Spark è stata predefinita come track_metadata_tbl e può essere richiamata nelle query SQL come track_metadata.
- Completa la query per selezionare tutte le colonne dal data frame di Spark
track_metadatain cuiyearè minore di 1935 edurationè maggiore di 300 secondi. - Chiama
dbGetQuery()per eseguire la query, assegna i risultati aresults, quindi visualizza l’output.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# Write SQL query
query <- "SELECT ___ FROM ___ WHERE ___ AND ___"
# Run the query
(results <- ___(___, ___))