-----Mensaje original-----
De: gilbellosta en gmail.com [mailto:gilbellosta en gmail.com] En nombre de
Enviado el: martes, 12 de abril de 2016 14:37
Para: Miguel Angel Rodriguez Muiños
CC: Gilsanz, Jose Luis; r-help-es
Asunto: Re: [R-es] Procesos paralelos
Si la base de datos de destino es SQL Server, ¿por qué no pruebas con la
DeberÃa poder cargar millones de registros en segundos. Al menos, en una
única transacción en lugar de múltiples como con sqlSave.
El dÃa 12 de abril de 2016, 11:55,
<miguel.angel.rodriguez.muinos en sergas.es<mailto:miguel.angel.rodriguez.muinos en sergas.es>> escribió:
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 ¿?
El 12/04/2016 a las 11:04, Gilsanz, Jose Luis escribió:
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
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
La subida al servidor es esta funci n:
subida <- function( datos, tab)
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 )
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;
##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
#Frecuenca de actualizacion de la barra
##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 )
#Obtenemos registros actuales en la tabla (los que
habia + los que han subido hasta el momento)
as.numeric(sqlQuery(canal1,paste("SELECT Count(*) FROM ",tab,
#Calculamos porcentaje de registros subidos en el
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, "." ,
Ahora estoy intentando usar el paquete parallel (en lugar de snowfall que
ya no me funciona) haciendo esto.
##Creo un cluster con dos nodos
##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
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.
Departamento T cnico Entidades Financieras JLL Valoraciones S.A.
(Jones Lang LaSalle Espa a S.A.) Paseo de la Castellana 130 - 1 ;
47&trk=nav_responsive_tab_profile> I
outube.com/user/joneslanglasallesp> I
uebles.es/elblogdelosanillos/> PPiense en el medio ambiente antes de
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
Puede ejercer sus derechos de acceso, rectificaci n, cancelaci n y oposici n
atencion.clientesth en tasacionesh.com<mailto:atencion.clientesth en tasacione<mailto:atencion.clientesth en tasacionesh.com%3cmailto:atencion.clientesth en tasacionesh.com%3e%3cmailto:atencion.clientesth en tasacionesh.com%3e%3cmailto:atencion.clientesth en tasacionesh.com>
sh.com><mailto:atencion.clientesth en tasacionesh.com><mailto:atencion.clie<mailto:atencion.clientesth en tasacionesh.com%3cmailto:atencion.clientesth en tasacionesh.com%3e%3cmailto:atencion.clientesth en tasacionesh.com%3e%3cmailto:atencion.clientesth en tasacionesh.com>
ntesth en tasacionesh.com<mailto:atencion.clientesth en tasacionesh.com%3cmailto:atencion.clientesth en tasacionesh.com%3e%3cmailto:atencion.clientesth en tasacionesh.com%3e%3cmailto:atencion.clientesth en tasacionesh.com>>.
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
atencion.clientesth en tasacionesh.com<mailto:atencion.clientesth en tasacione<mailto:atencion.clientesth en tasacionesh.com%3cmailto:atencion.clientesth en tasacionesh.com>
sh.com<mailto:atencion.clientesth en tasacionesh.com%3cmailto:atencion.clientesth en tasacionesh.com>>
<mailto:atencion.clientesth en tasacionesh.com><mailto:atencion.clientesth@<mailto:atencion.clientesth en tasacionesh.com>
tasacionesh.com<mailto:atencion.clientesth en tasacionesh.com>> .
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
[[alternative HTML version deleted]]