Thursday, June 28, 2012

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


Hace unos dias, comence a pensar sobre SAP HANA y R en Amazon Web Services...hasta donde yo se, los graficos no pueden ser generados utilizando este tipo de integracion porque el grafico se genera en el servidor y no puede hacer el viaje de regreso hacia HANA Studio...asi que segui pensando y me dije a mi mismo..."No seria una buena idea utilizar comando de Linux para enviarme por email los graficos generados en el servidor de R?"...Tenia listo un trato...

Inverti un par de dia tratando de instalar X11 en mi SUSE...hasta que descubri...que es un servidor "sin cabeza" y no provee ningun soporte para X11...eso realmente me deprimio puesto que trate y trate...de todos modos...puesto que nada puede detener a mis ideas de volverse reales...Pense en utilizar la generacion de PDF puesto que no necesita para nada al X11...pero...hoy dia...luego de hacer mas investigacion...descubri que la libreria Cairo provee generacion de imagenes 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 Rserve
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 anho 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 -;)


No comments: