SQLite é uma aplicação de banco de dados de pouquíssimo impacto e com um potencial de aplicação bastante amplo. Habitualmente, em ambientes de produção que exijam alta performance ou operações mais complexas, SQLite não é a ferramenta padrão de escolha. Para aplicações de menor porte, o SQLite é uma ferramenta de grande importância, pois adequa-se aos padrões de SQL e é multiplataforma.
Ao fim deste laboratório, você deverá ser capaz de:
readr
para leitura dos dados de vôos;SideEffectChunkCallback$new()
para depositar os dados do arquivo diretamente no banco de dados (sem devolver resultados para o usuário);readr
e RSQLite
, se necessário. A sugestão é empregar install.packages(c("readr", "RSQLite"), dep=TRUE, type='win.binary')
.Crie um arquivo de banco de dados em SQLite chamado voos.sqlite3
. (Dica: o comando dbConnect()
se conecta num banco de dados se o arquivo apontado existir ou cria um novo, caso o arquivo não exista.)
Leia os arquivos airlines.csv
e airports.csv
. Deposite o conteúdo de cada um destes arquivos nas tabelas, respectivamente, airlines
e airports
. Utilize o comando dbWriteTable()
para isso.
Crie uma função chamada lerDados
contendo 2 argumentos, input
e pos
. A função deve apresentar ao usuário uma mensagem de progresso da leitura do arquivo flights.csv
(utilize o comando message()
), aos moldes do apresentado abaixo. A função deve salvar apenas os vôos que partiram ou chegaram aos seguintes aeroportos BWI
, MIA
, SEA
, SFO
e JFK
, numa tabela chamada flights
. Observe que a função não deve retornar nada para o usuário, deve apenas gravar a tabela obtida do chunk no banco de dados. (Dica: utilize o comando dbWriteTable()
e estude como o argumento append
deve ser utilizado para permitir que os chunks intermediários sejam adicionados ao fim da tabela.)
# Simulando um valor para 'pos'
pos = 1000
message("Leitura atingiu a linha ", pos)
Leia o arquivo flights.csv
, restringindo-se às colunas YEAR
, MONTH
, DAY
, AIRLINE
, FLIGHT_NUMBER
, ORIGIN_AIRPORT
, DESTINATION_AIRPORT
e ARRIVAL_DELAY
, e aplique a função lerDados()
criada acima. Observe, novamente, que a função lerDados()
não retorna nada para o usuário. Por isso, a função de callback a ser utilizada é SideEffectChunkCallback$new()
. Leia 100 mil registros por vez.
Acesse o banco de dados e, por meio de uma chamada em SQL, apresente o tempo médio de atraso de chegada por aeroporto de destino, a sigla do aeroporto, o nome completo do aeroporto e o nome completo da companhia aérea. Ordene o resultado (na mesma chamada de SQL) por ordem decrescente deste atraso médio (i.e., o primeiro registro deve ser o aeroporto que tem o maior tempo de atraso na chegada). Atente para o fato de que o mesmo nome de coluna pode acontecer em diferentes tabelas.