Seleção avançada II: SQL
Como mencionado anteriormente, quando você usa a interface do dplyr, o sparklyr converte seu código em SQL antes de enviá-lo ao Spark. Na maioria das vezes, é isso que você quer. Porém, você também pode escrever SQL puro para realizar a mesma tarefa. Na maioria dos casos, isso não é uma boa ideia, pois o código fica mais difícil de escrever e depurar. Ainda assim, se você quer que seu código seja portátil — isto é, reutilizável fora do R também — pode ser útil. Por exemplo, um fluxo comum é usar o sparklyr para experimentar o processamento de dados e, depois, migrar para SQL puro em produção. Ao escrever SQL desde o início, você pode simplesmente copiar e colar suas consultas quando for para a produção.
Consultas SQL são escritas como strings e passadas para dbGetQuery() do pacote DBI. O padrão é o seguinte.
query <- "SELECT col1, col2 FROM some_data WHERE some_condition"
a_data.frame <- dbGetQuery(spark_conn, query)
Note que, diferentemente do código dplyr que você escreveu, dbGetQuery() sempre executa a consulta e retorna os resultados para o R imediatamente. Se você quiser adiar o retorno dos dados, pode usar dbSendQuery() para executar a consulta e, depois, dbFetch() para trazer os resultados. Esse é um uso mais avançado, não abordado aqui. Observe também que as funções do DBI retornam data.frames, e não tibbles, já que o DBI é um pacote de mais baixo nível.
Se você quiser aprender mais sobre como escrever código SQL, faça o curso Introduction to SQL.
Este exercício faz parte do curso
Introdução ao Spark com sparklyr em R
Instruções do exercício
Uma conexão com o Spark foi criada para você como spark_conn. Um tibble associado aos metadados de faixas armazenados no Spark foi pré-definido como track_metadata_tbl e pode ser acessado em consultas SQL como track_metadata.
- Complete a consulta para selecionar todas as colunas do data frame do Spark
track_metadataem queyearseja menor que 1935 edurationseja maior que 300 segundos. - Chame
dbGetQuery()para executar a consulta, atribuindo os resultados aresults, e depois visualize a saída.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# Write SQL query
query <- "SELECT ___ FROM ___ WHERE ___ AND ___"
# Run the query
(results <- ___(___, ___))