Hola, ¿qué tal? Si la base de datos de destino es SQL Server, ¿por qué no pruebas con la función dbBulkCopy del paquete https://github.com/agstudy/rsqlserver? Debería poder cargar millones de registros en segundos. Al menos, en una única transacción en lugar de múltiples como con sqlSave.
Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El día 12 de abril de 2016, 11:55, <[email protected]> escribió: > Hola José Luis. > > Te da algún error? o simplemente no aparece la barra de progreso? > > ... y si, en vez de usar winProgressBar(), pruebas con la función > tkProgressBar() del paquete tcltk ¿? > > Un saludo, > Miguel. > > > > El 12/04/2016 a las 11:04, Gilsanz, Jose Luis escribió: > > Hola: > > Vuelvo a la carga con algo que resolv� hace a�os y que ahora me ha dejado de > funcionar y no consigo arreglar. A ver si alguien me sugiere alg�n enfoque o > directamente la solucion. > > Utilizo R en muchos procesos ETL y la cuesti�n es que me encuentro con que > tengo que hacer inserts en un BBDD de SQL Server de varios miles (a veces > millones de registros) que mientras R las realiza parece que no est� haciendo > nada. > > La soluci�n que consegu� hacer en su momento fue paralelizar el proceso de > inserci�n en dos procesos distintos usando el paquete snowfall. > -Un proceso se encargaba de la propia inserci�n de los datos. > -El otro proceso mostraba una barra de progreso que se constru�a consultando > la tabla (tab) donde se insertaban los registros (datos) para monitorizar su > proceso. > > La subida al servidor es esta funci�n: > > subida <- function( datos, tab) > { > flush.console() > canal2 <- odbcDriverConnect( > "case=nochange; Driver=xxx; Server=xxx; Database=xxx; uid=xxx; pwd=xxx; > wsid=xxx;") > > sqlSave(canal2,datos,tablename= tab, rownames = FALSE, append=TRUE, fast=TRUE > ) > close(canal2) > rm(canal2) > } > > La barra de progreso se toma de esta funci�n: > pb <-function( datos,tab){ > ##Creamos canal de conexion a BBDD > canal1 <- odbcDriverConnect( "case=nochange; Driver=SQL > Server; Server=xxx; Database=xxx; uid=xxx; pwd=xx; wsid=ESMADN1003;;") > > ##Obtenemos conteos de registros################## > #Numero de registro que se van a cargar > asubir <- as.numeric(nrow(datos)) > > #Numero de registro que ya hay en la tabla > entabla <- as.numeric(sqlQuery(canal1,paste("SELECT Count(*) > ", " FROM ",tab, sep=""))) > > #Numero de registros cargados en el momento n > total <- as.numeric(0) > > #Frecuenca de actualizacion de la barra > frec <- 0.1 > > ##Creamos barra de progreso > barra <- winProgressBar(title="Subiendo datos a SQL ", label = "Subido el: > ", min= 0, max= 1,initial= 0, width = 800) > > ##Mientras los registros que quedan por subir sean inferiores > a los que actualmente hay en la tabla se muestra la barra > while ( entabla + asubir > total ) > { > #Reconectamos > canal1 <- odbcReConnect(canal1) > > #Obtenemos registros actuales > en la tabla (los que habia + los que han subido hasta el momento) > total <- > as.numeric(sqlQuery(canal1,paste("SELECT Count(*) FROM ",tab, sep=""))) > > #Calculamos porcentaje de > registros subidos en el momento > porcen <- as.numeric((total - > entabla) / asubir) > > #Actualizamos barra de progreso > setWinProgressBar(barra, > porcen,title="SUBIENDO DATOS A SQL", label =paste("Subido el: ", > round(porcen *100,0), "% de los datos. Quedan por subir ",(entabla + > asubir)-total, " registros de ", asubir, "." , sep="")) > > #Actualizamos consola > flush.console() > Sys.sleep(frec) > } > close(barra) > } > > Ahora estoy intentando usar el paquete parallel (en lugar de snowfall que ya > no me funciona) haciendo esto. > library(parallel) > library(RODBC) > > ##Creo un cluster con dos nodos > cl <-makeCluster(2) > > ##Exporto datos y funciones a los dos cluster > clusterExport(cl,varlist=c("pb","subida","datos","tab")) > > ##En el primer cluster hago la inserci�n en el segundo la barra de progreso > clusterApply(cl,subida(datos,tab),pb(datos,tab) ) > > > La inserci�n la realiza correctamente pero la barra de progreso no aparece > por ning�n lado :( y en el monitor de procesos aparecen dos Rscript.exe > corriendo (uso Windows 7) > > Si alguien quiere que le proporcione la funci�n que constru� usando snowfall > (y que ahora tampoco muestra la barra) se la puedo enviar para destriparla. > > Muchas gracias > > Un saludo > > > Jos� Luis Gilsanz G�mez > Estad�stica > Departamento T�cnico Entidades Financieras > JLL Valoraciones S.A. (Jones Lang LaSalle Espa�a S.A.) > Paseo de la Castellana 130 - 1�; 28046 Madrid > Tel: +34 91 454 96 94 > Fax +34 91 541 42 64 > jll.es > > S�guenos en: > Twitter<https://twitter.com/JLLSpain><https://twitter.com/JLLSpain> I > Linkedin<https://www.linkedin.com/profile/view?id=173156047&trk=nav_responsive_tab_profile><https://www.linkedin.com/profile/view?id=173156047&trk=nav_responsive_tab_profile> > I > Youtube<https://www.youtube.com/user/joneslanglasallesp><https://www.youtube.com/user/joneslanglasallesp> > I > Blog<http://www.jllinmuebles.es/elblogdelosanillos/><http://www.jllinmuebles.es/elblogdelosanillos/> > PPiense en el medio ambiente antes de imprimir este e-mail > > Los datos personales que en esta comunicaci�n aparecen, as� como los que > nuestra empresa mantiene de Vd. y de su empresa, son tratados con la > finalidad de mantener el contacto as� como realizar las gestiones que en esta > aparecen (Ley Org�nica 15/1999, de 13 de diciembre, de Protecci�n de Datos de > Car�cter Personal). > Puede ejercer sus derechos de acceso, rectificaci�n, cancelaci�n y oposici�n > dirigi�ndose a > [email protected]<mailto:[email protected]><mailto:[email protected]><mailto:[email protected]>. > La utilizaci�n de su direcci�n de correo electr�nico por parte de nuestra > empresa queda sujeta a las disposiciones de la Ley 34/2002, de Servicios de > la Sociedad de la Informaci�n y el Comercio Electr�nico. Si Vd. recibe > comunicaci�n comercial por nuestra parte y desea dejar de recibirla, rogamos > nos lo comunique por v�a electr�nica a trav�s de la direcci�n > [email protected]<mailto:[email protected]> > > <mailto:[email protected]><mailto:[email protected]> > . > > > JLL Valoraciones > Registration number: A-28/806222. > Registered Office: P� de la Castellana, 130 - 1� ; 28046 Madrid > > This e-mail is for the use of the intended recipient(s) only. If you have > received this e-mail in error, please notify the sender immediately and then > delete it. If you are not the intended recipient, you must not use, disclose > or distribute this e-mail without the author's prior permission. We have > taken precautions to minimise the risk of transmitting software viruses, but > we advise you to carry out your own virus checks on any attachment to this > message. We cannot accept liability for any loss or damage caused by software > viruses. If you are the intended recipient and you do not wish to receive > similar electronic messages from us in future then please respond to the > sender to this effect > > [[alternative HTML version deleted]] > > > > > > _______________________________________________ > R-help-es mailing list > [email protected]<mailto:[email protected]> > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > -- > Miguel Ángel Rodríguez Muíños > Asesoramento en Informática > Dirección Xeral de Saúde Pública > Consellería de Sanidade > Xunta de Galicia > http://dxsp.sergas.es > > > > > > > ________________________________ > > Nota: A información contida nesta mensaxe e os seus posibles documentos > adxuntos é privada e confidencial e está dirixida únicamente ó seu > destinatario/a. Se vostede non é o/a destinatario/a orixinal desta mensaxe, > por favor elimínea. A distribución ou copia desta mensaxe non está autorizada. > > Nota: La información contenida en este mensaje y sus posibles documentos > adjuntos es privada y confidencial y está dirigida únicamente a su > destinatario/a. Si usted no es el/la destinatario/a original de este mensaje, > por favor elimínelo. La distribución o copia de este mensaje no está > autorizada. > > See more languages: http://www.sergas.es/aviso-confidencialidad > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > [email protected] > https://stat.ethz.ch/mailman/listinfo/r-help-es _______________________________________________ R-help-es mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-help-es
