#sql #r #shiny #rodbc #rjdbc
#sql #r #блестящий #rodbc #рждбк #rjdbc
Вопрос:
Я работаю над проектом R shiny, в котором мне нужно читать таблицы SQL из моего приложения Shiny. Я пробовал использовать пакеты RODBC и RJDBC для того же и обнаружил, что RJDBC работает быстрее. Но чтение по-прежнему занимает много времени.
Ниже приведен код, который я использовал:
LocationOfJDBC <- "/usr/lib/sqlserver_jdbc/sqljdbc_4.1/enu/jre7/sqljdbc41.jar"
options(java.parameters = "-Xmx8048m")
drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver" , LocationOfJDBC ,identifier.quote="`")
df<-dbGetQuery(mydb, "Select char1,char2,char3,int4,date5 from table1")
Этот приведенный выше запрос занимает около 90 секунд, чтобы прочитать 2,8 миллиона строк и 5 столбцов (3 символа, 1 столбец int и 1 столбец date).
Есть ли более быстрый способ чтения таблицы SQL в R??
Комментарии:
1. Я не думаю, что это хорошая идея — считывать такое количество данных
shiny
. Просто получите то, что вам нужно, используя возможности агрегирования SQL
Ответ №1:
Предполагая, что вы уже пробовали очевидные решения, такие как правильное индексирование, я бы посоветовал сохранить ваши большие таблицы sql в формате быстрой передачи файлов на диске. Используйте package fst, если вам нужны возможности запросов к вашим таблицам, или package feather, если нет. Существуют различные потоки, сравнивающие два пакета. Мой предпочтительный формат — fst, поскольку он позволяет выполнять запросы с диска.
install.packages("fst")
library(fst)
?fst
В идеале, если вашему блестящему серверу действительно не нужны все 2,8 млн строк, я бы также предложил извлекать данные по мере необходимости.