Sélection avancée II : le SQL
Comme mentionné précédemment, lorsque vous utilisez l’interface dplyr, sparklyr convertit votre code en SQL avant de l’envoyer à Spark. La plupart du temps, c’est exactement ce que vous voulez. Cependant, vous pouvez aussi écrire du SQL brut pour accomplir la même tâche. La plupart du temps, c’est une mauvaise idée, car le code est plus difficile à écrire et à déboguer. En revanche, si vous voulez que votre code soit portable — c’est‑à‑dire utilisable en dehors de R — cela peut être utile. Par exemple, un flux de travail assez courant consiste à utiliser sparklyr pour expérimenter le traitement des données, puis à passer au SQL brut en production. En écrivant directement du SQL, vous pourrez simplement copier‑coller vos requêtes lors du passage en production.
Les requêtes SQL sont écrites sous forme de chaînes de caractères et passées à dbGetQuery() du package DBI. Le modèle est le suivant.
query <- "SELECT col1, col2 FROM some_data WHERE some_condition"
a_data.frame <- dbGetQuery(spark_conn, query)
Notez que, contrairement au code dplyr que vous avez écrit, dbGetQuery() exécute toujours la requête et renvoie immédiatement les résultats à R. Si vous souhaitez différer le rapatriement des données, vous pouvez utiliser dbSendQuery() pour exécuter la requête, puis dbFetch() pour récupérer les résultats. C’est un usage plus avancé, non couvert ici. Notez aussi que les fonctions DBI renvoient des data.frame plutôt que des tibble, car DBI est un package de plus bas niveau.
Si vous souhaitez en savoir plus sur l’écriture de code SQL, suivez le cours Introduction to SQL.
Cet exercice fait partie du cours
Introduction à Spark avec sparklyr en R
Instructions
Une connexion Spark a été créée pour vous sous le nom spark_conn. Un tibble relié aux métadonnées des morceaux stockées dans Spark a été prédéfini sous track_metadata_tbl, et il est accessible dans les requêtes SQL sous track_metadata.
- Complétez la requête pour sélectionner toutes les colonnes du data frame Spark
track_metadataoùyearest inférieur à 1935 etdurationest supérieure à 300 secondes. - Appelez
dbGetQuery()pour exécuter la requête, assignez les résultats àresults, puis affichez le résultat.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# Write SQL query
query <- "SELECT ___ FROM ___ WHERE ___ AND ___"
# Run the query
(results <- ___(___, ___))