Selección avanzada II: SQL
Como se mencionó antes, cuando usas la interfaz de dplyr, sparklyr convierte tu código a SQL antes de enviarlo a Spark. La mayoría de las veces, esto es justo lo que quieres. Aun así, también puedes escribir SQL «en bruto» para lograr lo mismo. En general, no es recomendable, porque el código es más difícil de escribir y depurar. Sin embargo, si quieres que tu código sea portátil —es decir, que pueda usarse también fuera de R—, puede ser útil. Por ejemplo, un flujo de trabajo bastante común es usar sparklyr para experimentar con el procesamiento de datos y, después, cambiar a SQL en bruto en un entorno de producción. Si escribes SQL desde el principio, podrás copiar y pegar tus consultas cuando pases a producción.
Las consultas SQL se escriben como cadenas y se pasan a dbGetQuery() del paquete DBI. El patrón es el siguiente.
query <- "SELECT col1, col2 FROM some_data WHERE some_condition"
a_data.frame <- dbGetQuery(spark_conn, query)
Ten en cuenta que, a diferencia del código de dplyr que has escrito, dbGetQuery() siempre ejecuta la consulta y devuelve los resultados a R de inmediato. Si quieres retrasar la devolución de los datos, puedes usar dbSendQuery() para ejecutar la consulta y luego dbFetch() para recuperar los resultados. Eso es un uso más avanzado que no se cubre aquí. También fíjate en que las funciones de DBI devuelven data.frames en lugar de tibbles, ya que DBI es un paquete de nivel más bajo.
Si quieres aprender más sobre cómo escribir código SQL, realiza el curso Introduction to SQL.
Este ejercicio forma parte del curso
Introducción a Spark con sparklyr en R
Instrucciones del ejercicio
Ya tienes creada una conexión a Spark como spark_conn. Se ha predefinido un tibble asociado a los metadatos de pistas almacenados en Spark como track_metadata_tbl, y puedes acceder a él en consultas SQL como track_metadata.
- Completa la consulta para seleccionar todas las columnas del data frame de Spark
track_metadatadondeyearsea menor que 1935 ydurationsea mayor que 300 segundos. - Llama a
dbGetQuery()para ejecutar la consulta, asigna los resultados aresultsy luego visualiza la salida.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# Write SQL query
query <- "SELECT ___ FROM ___ WHERE ___ AND ___"
# Run the query
(results <- ___(___, ___))