Thursday, June 27, 2013

Esquemas flexibles en SAP HANA - En una cascara de nuez

Hace algun tiempo postee un blog llamado Volviendonos flexibles con SAP HANA que utilizaba SAP HANA, R y Twitter para demostrar la capacidades de los esquemas flexibles...

Me di cuenta de que aunque este era un muy buen ejemplo...no estaba realmente enfocado para principiantes, porque se necesita saber bastante R y tener experiencia con Expresiones Regulares para poder entender completamente que es lo que esta pasando...asi que...decidi escribir un blog mas simple...utilizando solamente SAP HANA para demostrar esta asombrosa opcion...

Asi que...que significa "Flexibilidad de Esquema"? Bueno...significa que puedes definir una tabla con algunas columnas y luego agregar dinamicamente mas columnas en tiempo de ejecucion sin necesidad de tener que redefinir la estructura de la tabla...

Primero...vamos a crear una tabla utilizando simple SQL...

Crear Tabla
CREATE COLUMN TABLE Products(
PRODUCT_CODE VARCHAR(3),
PRODUCT_NAME NVARCHAR(20),
PRICE DECIMAL(5,2)
) WITH SCHEMA FLEXIBILITY;

Como pueden ver...es solo una tabla...pero estamos agregando la opcion WITH SCHEMA FLEXIBILITY...

Ahora...podemos simplemente agregar un producto...

Insertar Producto
INSERT INTO Products values ('001','Blag Stuff', 100.99);

Digamos que necesitamos agregar un nuevo producto...que viene en diferentes colores...pero nuestra tabla no tiene definido un campo llamado COLOR...pero eso no importa...nuestra tabla es lo suficientemente flexible como para soportarlo...

Insertar Nuevo Producto
INSERT INTO Products (PRODUCT_CODE,PRODUCT_NAME,PRICE,COLOR) values ('002','More Blag Stuff',100.99,'Black');

Tomen en cuenta que estamos especificando todas las columnas y agregando una nueva columna llamada "COLOR"...y simplemente estamos pasando el nuevo valor...cuando seleccionemos todos los valores de la tabla, tendremos esto...


Como pueden ver...para el segundo registro, tenemos la nueva columna llamada "COLOR" junto con su valor correspondiente...para el primer registro, simplemente tenemos un "?" porque la columna "COLOR
no existia al momento de la creacion de la tabla...

Ahora...digamos que necesitamos agregar un nuevo producto...que no viene en colores...

Insertar ultimo nuevo producto
INSERT INTO Products (PRODUCT_CODE, PRODUCT_NAME, PRICE) values ('003','Even More Blag Stuff',101.99);

Tomen en cuenta que debemos especificar los campos regulares, pero no tenemos que preocuparnos de la columna dinamica...tendremos esto cuando llamemos a todos los registros...


Como la columna "COLOR" ya existia en el momento de la creacion del segundo producto...veremos un valor "?" nuevamente...

Espero que con este blog...las cosas queden mas claras -:) Aun cuando no hay muchos casos de uso para esta funcionalidad...espero que mucha gente se vuelva creativa y hagan cosas muy interesantes con esta asombrosa opcion...

Actualizacion

Se habran dado cuenta de que cuando crear una nueva columna..se va a generar como NVARCHAR(5000)...lo cual no es muy eficiente, no?

Por lastima...no podemos cambiar esto porque la opcion "aun" no esta soportada...y eso es porque la longitud del campo no puede ser reducida...

Sin embargo, si estamos pasando un valor numerico...podemos cambiarlo...veamos el siguiente ejemplo...

Alterar la columna COLOR
INSERT INTO Products values ('001','Blag Stuff', 100.99);
 
INSERT INTO Products (PRODUCT_CODE,PRODUCT_NAME,PRICE,QUANTITY) values ('002','More Blag Stuff',100.99,10);
 
ALTER TABLE Products ALTER (QUANTITY INT);

Aqui...estamos agregando una nueva columna llamada "QUANTITY" con un valor de 10...inicialmente va a ser creada como un campo NVARCHAR(5000) pero con un simple ALTER TABLE podemos cambiarlo a  INT...

Ahora, digamos que tenemos que actualizar el primer registro para agregar una cantidad...usando un simple UPDATE podremos lograrlo...

Actualizar un campo
UPDATE Products
SET QUANTITY = 20
WHERE PRODUCT_CODE = '001';


Saludos,

Blag.

No comments: