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

Responder a