Thursday, February 02, 2012

R conoce a HANA


Si leyeron mi ultimo blog HANA conoce a R recordaran que leimos datos de HANA hacia R directamente, sin tener que crear un archivo .csv, sino usando ODBC. Ahora, vamos a leer nuevamente data de HANA, pero luego de algunos trucos en R, vamos a postear esa informacion de vuelta en HANA.

Tengan en cuenta, que esta no es una solucion standard de SAP. Esta se basa solamente en un paquete no standard de R que puede trabajar con tablas ODBC, y como cualquier paquete no standard, hay muchas limitaciones...en fin...esto se resolvera cuando SAP lanze la integracion oficial entre R y HANA.

En mi blog anterior Modelo de Prediccion utilizando HANA y R creamos un stored procedure en HANA para popular una tabla llamada TICKETS_BY_YEAR, luego en R calculamos la prediccion para el anho siguiente y generamos un bonito graphico mostrando la data real y la de prediccion. Asi que...por supuesto no vamos a repetir todo eso.

Este el codigo en R que debemos usar...


library("RODBC")
ch<-odbcConnect("HANA",uid="P075400",pwd="HrCOpPk4")
Flight_Tickets<-sqlFetch(ch,"P075400.TICKETS_BY_YEAR")
period=Flight_Tickets$PERIOD
tickets=Flight_Tickets$TICKETS
var_year=substr(period[1],1,4)
var_year=as.integer(var_year)
var_year=var_year+1
var_year=as.character(var_year)
new_period=gsub("^\\d{4}",var_year,period)
next_year=data.frame(year=new_period,stringsAsFactors=FALSE)
prt.lm=lm(tickets ~ period)
pred=predict(prt.lm,next_year,interval="none")
period=next_year
tickets=pred
PREDICTION_TICKETS<-data.frame(period,tickets)
sqlDrop(ch,"PREDICTION_TICKETS",errors=FALSE)
sqlSave(ch,PREDICTION_TICKETS,rownames="id")
odbcClose(ch)

Luego de ejecutar este codigo, podemos verificar en HANA que nuestra tabla PREDICTION_TICKETS fue creada...


Y la data fue populada tal como esperabamos...


Ustedes se preguntaran...cuales son las limitaciones? Todo parece funcionar perfecto? Facil...no hay muchas, pero hay limitaciones importantes...

* No tenemos forma de validar si la tabla existe o no.
* Debemos borrar la tabla antes de hacer el INSERT, de otro modo no va a funcionar.
* Aun cuando el campo de fecha se llamaba PERIOD, R lo llamo "year" y lo paso hacia HANA.
* No podemos especificar el tipo de dato, tampoco su longitud
* Estamos forzados a tener una columna adicional con un indice numerico, que podemos llamar con carinho "Id"...

Como ya lo dije antes...este es un paquete no estandard que no permite jugar un poco...esto no deberia ser utilizado como una solucion final, sino como un patio de juegos. Disfrutenlo!

Saludos,

Blag.

No comments: