<font size=2 face="sans-serif">Hola:</font>
<br>
<br><font size=2 face="sans-serif">En mi empeño por conseguir que R me
muestre cuantos registros lleva insertados en una megasubida de datos a
un SQL Server, he empezado a mirar algo sobre paralelización de procesos
en R.</font>
<br>
<br><font size=2 face="sans-serif">La idea es:</font>
<br><font size=2 face="sans-serif">1. Lanzar en un hilo o proceso de R,
una función (ya construida), que se encarga de consultar en la tabla de
SQL cuantos registros se han insertado hasta el momento y mostrar una barra
de progreso. El código seria algo como:</font>
<br>
<br><font size=2 face="sans-serif">#Parametros de seguimiento de la operación</font>
<br>
<br><font size=2 face="sans-serif">canal <- channel      
                 
               
               
               
               #Canal
de conexión  RODBC a SQL Server</font>
<br><font size=2 face="sans-serif">tab <- "Pruebas_R"  
               
               
               
               
             #Nombre
de tabla a la que se subirán los datos        </font>
<br><font size=2 face="sans-serif">a.subir <- as.numeric(nrow(datos))
               
               
               
               #Numero
de registros a subir</font>
<br><font size=2 face="sans-serif">en.tabla <- as.numeric(sqlQuery(channel,paste("SELECT
Count(*) ", " FROM ",tab, sep="")))    
   #Numero de registros que (antes de la subida) tiene
la tabla</font>
<br><font size=2 face="sans-serif">frec <- 1        
               
               
               
               
               
       #Frecuencia en segundos de la actualización
de la barra de progreso</font>
<br>
<br>
<br><font size=2 face="sans-serif">#Funcion de seguimiento de la operación</font>
<br><font size=2 face="sans-serif">pb <-        function(
channel, tabla,datos.a.subir,datos.ya.en.tabla,frec.actualiz ){</font>
<br>
<br><font size=2 face="sans-serif">         
              barra
<- winProgressBar(title="Subiendo datos a SQL ", label = "Subido
el:  ", min= 0, max= 1,initial= 0, width = 800)</font>
<br><font size=2 face="sans-serif">         
              total
= 0   #Variable que acumula los registros subidos mas los que ya había</font>
<br><font size=2 face="sans-serif">         
               
               
      </font>
<br><font size=2 face="sans-serif">         
              while
( datos.ya.en.tabla + datos.a.subir > total )</font>
<br><font size=2 face="sans-serif">         
               
              {</font>
<br><font size=2 face="sans-serif">         
               
              total
<- sqlQuery(canal,paste("SELECT Count(*) ", " FROM ",tabla,
sep=""))</font>
<br><font size=2 face="sans-serif">        </font>
<br><font size=2 face="sans-serif">         
               
              porcen
<- as.numeric((total-datos.ya.en.tabla) / datos.a.subir)</font>
<br>
<br><font size=2 face="sans-serif">         
               
              setWinProgressBar(barra,
porcen,title="SUBIENDO DATOS A SQL", label =paste("Subido
el:  ", round(porcen *100,0), "% de los datos. Quedan por
subir                  
               
               
               
              ",total-datos.a.subir,
" registros de ", datos.a.subir, "." , sep=""))</font>
<br><font size=2 face="sans-serif">         
               
              flush.console()</font>
<br><font size=2 face="sans-serif">         
               
              Sys.sleep(frec.actualiz)</font>
<br><font size=2 face="sans-serif">         
               
              }</font>
<br><font size=2 face="sans-serif">         
               
              </font>
<br><font size=2 face="sans-serif">         
              close(barra)</font>
<br><font size=2 face="sans-serif">         
                 
print("SUBIDA DE DATOS TERMINADA")</font>
<br><font size=2 face="sans-serif">         
               
               
               
              }</font>
<br>
<br><font size=2 face="sans-serif">pb(canal,tab,a.subir,en.tabla,frec)
       </font>
<br>
<br>
<br><font size=2 face="sans-serif">2.En el otro hilo o proceso se llevaría
a cabo la inserción de los registros del df datos en la tabla. Este proceso
o hilo seria lanzado después del proceso anterior. El código seria una
sola línea:</font>
<br>
<br><font size=2 face="sans-serif">sqlSave(channel,datos,tablename =tabla,
rownames = FALSE, append=TRUE, fast=TRUE )</font>
<br>
<br>
<br><font size=2 face="sans-serif">He estado intentándolo hacer con los
paquetes snowfall y Rdsm pero no lo he conseguido por mas que leo y releo
la ayuda. :-(</font>
<br>
<br><font size=2 face="sans-serif">Básicamente en lo que fallo es en decirle
a R:</font>
<br>
<br><font size=2 face="sans-serif">Corre por un lado el proceso 1 y luego
por otro lado el proceso 2, pero no hay manera de inicializar los cluster(en
caso de snowfall) y los hilos(en caso de Rdsm). Por cierto trabajo con
Windows XP asi que la opción del paquete multicore no me vale.</font>
<br>
<br><font size=2 face="sans-serif">Os agradecería que me abrierais los
ojos.</font>
<br>
<br><font size=2 face="sans-serif">GRACIAS</font>
<br>
<br><font size=2 face="sans-serif">Un saludo.</font>
<br>
<br>
<br>
<br>
<br>
<br><font size=2 face="Arial"><b>José Luis Gilsanz Gómez</b></font><font size=3><b>
</b></font><font size=1 face="Arial"><br>
Estadística <br>
</font><font size=1 color=#009f82 face="Arial"><b><br>
Tasaciones Hipotecarias </b></font><font size=1 face="Arial"><br>
María de Molina, 54 - 28006 - Madrid<br>
Tel. : 34-914549694<br>
Fax : 34-917822164<br>
Email : </font><a href=mailto:jluis.gilsanz@tasacionesh.com><font size=1 color=blue face="Arial"><u>jluis.gilsanz@tasacionesh.com</u></font></a><font size=1 face="Arial">
<br>
Site web: </font><a href=http://www.tasacionesh.es/><font size=1 color=blue face="Arial"><u>www.tasacionesh.es</u></font></a><font size=1 face="Arial">
<br>
</font><img src=cid:_2_087D3CA0025AC85400346302C1257B50>
<p>
<br><font size=3><br>
<br>
</font>
<div align=center>
<br><font size=1 face="Arial">-- AVISO LEGAL --</font></div>
<br><font size=1 face="Arial">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). <br>
Puede ejercer sus derechos de acceso, rectificación, cancelación y oposición
dirigiéndose a </font><a href=mailto:atencion.clientesth@tasacionesh.com><font size=1 color=blue face="Arial"><u>atencion.clientesth@tasacionesh.com</u></font></a><font size=1 face="Arial">.<br>
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 </font><a href=mailto:atencion.clientesth@tasacionesh.com><font size=1 color=blue face="Arial"><u>atencion.clientesth@tasacionesh.com
</u></font></a><font size=1 face="Arial">.</font><font size=3> </font><p><br>
-- AVISO LEGAL -- </p>

<p>Los datos personales que en esta comunicación aparecen, así como los que nuestra <br>
empresa mantiene de Vd. y de su empresa, son tratados con la finalidad de mantener <br>
el contacto así como realizar las gestiones que en esta aparecen (Ley Orgánica <br>
15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal).   <br>
Puede ejercer sus derechos de acceso, rectificación, cancelación y oposición <br>
dirigiéndose a atencion.clientes@tasacionesh.com <br>
La utilización de su dirección de correo electrónico por parte de nuestra empresa <br>
queda sujeta a las disposiciones de la Ley 34/2002, de Servicios de la Sociedad de <br>
la Información y el Comercio Electrónico. Si Vd. recibe comunicación comercial por <br>
nuestra parte y desea dejar de recibirla, rogamos nos lo comunique por vía electrónica <br>
a través de la dirección atencion.clientes@tasacionesh.com</p>