Thursday, February 02, 2012

HANA conoce a R


En mis blogs anteriores sobre HANA y R, estaba forzado a crear archivos .csv en HANA y leerlos en R...un simple pero tedioso proceso...especialmente si tus reportes en R deben de ser ejecutados de forma periodica...tener que crear un archivo .csv cada vez que necesitas ejecutar tu reporte, no es algo muy bonito...

Luego de un buen tiempo de investigar y leer sobre R...finalmente encontre una libreria que puede leer cualquier base de datos relacional y siendo HANA compatible con OBDC, el trabajo es realmente simple -;)

Para este ejemplo, debemos instalar las siguientes librerias: RODBC y Plotrix y crear una coneccion DSN como se muestra aqui...


Nos vamos a "Add..." y agregamos un "User DSN"


HANA nos provee un driver, asi que estamos bien


Asignamos un nombre al "Data Source Name", "Description" es opcional y "Server:Port" debe ser llenado obviamente.

Ahora...debemos ir a nuestro HANA studio y crear una tabla y un Stored Procedure...



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;


CALL P075400.GetTicketsByYearMonth('2011','12');

Luego de ejecutar nuestro Stored Procedure...tenemos toda la informacion en la tabla...Ok...solo dos campos...hoy fue un dia largo...estoy cansado -:P


Finalmente...podemos programar un poco de R! Primero, vamos a crear un Fan Plot (La libreria Plotrix se usa para esto) y luego un Bar Plot...use el mismo codigo para los dos, asi que solo reemplacen el comentario de uno y pongalo al otro y ejecutenlo nuevamente...ya lo se...estoy siendo flojo otra vez...pero por lo menos no estoy reinventando la rueda -;) Dos codigo y una sola linea de diferencia? No gracias...


library("plotrix")
library("RODBC")
ch<-odbcConnect("HANA",uid="P075400",pwd="***")
res<-sqlFetch(ch,"P075400.TICKETS_BY_YEAR_MONTH")
fan.plot(res$TICKETS,labels=res$CARRIER,
main="Tickets for December 2011")
#barplot(res$TICKETS,names.arg=res$CARRIER)
odbcClose(ch)

El codigo es bastante simple...llamamos a la libreria que necesitamos, establecemos comunicacion con nuestro DSN, obtenemos la informacion de la tabla, creamos nuestros graficos y finalmente cerramos la conexion.

Y aqui vienen los graficos...



Seguire investigando esta forma de integrar HANA y R...mas blogs deben de estar en camino -;)

Saludos,

Blag.

No comments: