Inizia subitoInizia gratis

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

Visualizza corso

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_metadata in cui year è minore di 1935 e duration è maggiore di 300 secondi.
  • Chiama dbGetQuery() per eseguire la query, assegna i risultati a results, 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 <- ___(___, ___))
Modifica ed esegui il codice