ComeçarComece de graça

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

Ver curso

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_metadata em que year seja menor que 1935 e duration seja maior que 300 segundos.
  • Chame dbGetQuery() para executar a consulta, atribuindo os resultados a results, 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 <- ___(___, ___))
Editar e executar o código