julio 06, 2012

Cuando SAP HANA conocio a R - Trae tus graficos a casa

by Alvaro "Blag" Tejada Galindo

Hace unos días, comencé a pensar sobre SAP HANA y R en Amazon Web Services...hasta donde yo se, los gráficos no pueden ser generados utilizando este tipo de integración porque el gráfico se genera en el servidor y no puede hacer el viaje de regreso hacia HANA Studio...así que seguí pensando y me dije a mi mismo..."No seria una buena idea utilizar comando de Linux para enviarme por email los gráficos generados en el servidor de R?"...Tenia listo un trato...

Invertí un par de día tratando de instalar X11 en mi SUSE...hasta que descubrí...que es un servidor "sin cabeza" y no provee ningún soporte para X11...eso realmente me deprimió puesto que trate y trate...de todos modos...puesto que nada puede detener a mis ideas de volverse reales...Pensé en utilizar la generación de PDF puesto que no necesita para nada al X11...pero...hoy día...luego de hacer mas investigación...descubrí que la librería Cairo provee generación de imágenes sin necesidad de utilizar X11...

Si no has instalado SAP HANA y R en Amazon Web Services, lee esto... Cuando SAP HANA conocio a R - El primer beso.



Veamos que es lo que tenemos que hacer:

Instalar Cairo

zypper install cairo-devel

Instalar la libreria Cairo en R

>R
>install.packages("Cairo")


Iniciar el servidor de Reserve

R CMD Rserve --RS-port 6311 --no-save --RS-encoding "utf8"

Utilizando el mismo usuario que utilizaste para el servidor Rserver, crea una carpeta y cambia sus permisos...

Cambia los permisos

>chmod 777 Blag

Ahora, podemos regresar a HANA Studio.
Primero debemos crear una tabla llamada TICKETS_BY_YEAR_MONTH.



Crear y enviar los graficos

drop procedure GetTicketsByYearMonth;
drop procedure Generate_Graphic;
drop procedure Get_Tickets;

CREATE PROCEDURE GetTicketsByYearMonth(IN var_year NVARCHAR(4),IN var_month NVARCHAR(2))
LANGUAGE SQLSCRIPT AS BEGIN
select count(bookid), carrid from sflight.snvoice
where year(fldate) = VAR_YEAR
and month(fldate) = VAR_MONTH
group by carrid
into TICKETS_BY_YEAR_MONTH;
END;

CREATE PROCEDURE Generate_Graphic(IN tickets_year TICKETS_BY_YEAR_MONTH, OUT result TICKETS_BY_YEAR_MONTH)
LANGUAGE RLANG AS
BEGIN
setwd("/Blag")
library("Cairo")
tickets=as.integer(tickets_year$TICKETS)
carriers=as.character(tickets_year$CARRIERS)
Cairo(600,600,file="Tickets.png",type="png",bg="white")
barplot(tickets,names.arg=carriers,main="Tickets for December 2011")
dev.off()
command<-"uuencode Tickets.png Tickets.png | mail -s 'Tickets December Report' atejada@gmail.com"
system(command,intern=TRUE)
result<-data.frame(TICKETS=tickets,CARRIERS=carriers)
END;

CREATE PROCEDURE Get_Tickets()
LANGUAGE SQLSCRIPT AS
BEGIN
CALL GetTicketsByYearMonth('2011','12');
Tickets = SELECT * FROM TICKETS_BY_YEAR_MONTH;
CALL Generate_Graphic(:Tickets,TICKETS_BY_YEAR_MONTH);
END;

CALL Get_Tickets();


Cuando ejecutamos esto, un par de cosas van a suceder...

  • Vamos a obtener la cantidad de tickets por aerolinea y por ano y mes. Vamos a grabar esta informacion en una tabla.
  • Vamos a leer esta informacion, crear un grafico y grabarlo como .png
  • Vamos a enviarnos el graficos a nosotros mismos por email.

Luego de ejecutar, vamos a ver un hermoso email...

Bueno, no? Ahora, podemos crear graficos con SAP HANA y R en Amazon Web Services -;)


Version Original: http://atejada.blogspot.de/

No hay comentarios:

Publicar un comentario