jueves, 23 de febrero de 2017

Generar filas de datos con SSIS

En la empresa donde trabajo ahora, lo tienen todo montado sobre SQLServer, no es mi gestor de bases de datos preferido, pero poco a poco lo voy conociendo y dicen que el roce hace el cariño. No se si llegaremos a ese extremo, pero de momento no nos hemos perdido el respeto.
La cosa es que me han encargado desarrollar unos reports y cubos y le estoy dando vueltas a las herramientas de BI que acompañan al producto.
Una de las dimensiones que se han de manejar es la típica tabla de pares código-valor que no cambian nunca, o en el peor de los casos se le añade algún registro una vez cada mucho. En concreto eran tipos de envío y solo había cuatro tipos. Hasta ahora no habían estado registradas en ninguna tabla, el programa de gestión las generaba por código en base a ciertas características del envío, pero para mi desarrollo necesitaba tenerlas en una tabla.
Lo más fácil hubiese sido meterlas a pelo en la tabla y olvidarme del tema, pero se me metió en la cabeza hacerlo con SSIS, para saber como hacerlo.
En los orígenes de flujo de datos, no hay ninguna manera de generar filas a pedal (otros ETLs si tienen esta opción), así que buscando encontré el "Componente de script".
Cuando arrastramos el componente a la tarea (o hacemos doble click sobre el), se nos abre una pantalla donde podemos especificar como se utilizará el script: como origen de datos, como destino de datos o para transformarlos.


La opción que nos interesa es "Origen", que nos permitirá generar filas de datos.
A continuación hacemos doble click en el componente, para abrir el editor. En la lista de la izquierda podemos elegir los diferentes aspectos del script que podemos configurar. En nuestro caso nos interesan la primera y la segunda. En la opción "Script", básicamente podemos modificar tres valores: el nombre del componente, la descripción y el lenguaje que utilizaremos para escribir el script, en nuestro caso lo haremos en C#.
La opción "Entradas y salidas", la utilizaremos para agregar las columnas que queremos generar: nombre y tipo de datos.


Volvemos a la opción "Script" y presionamos "Editar script..." para abrir el editor.


Los metodos PreExecute() y PostExecute() no nos interesan, los podemos borrar tal como indica el comentario. El que nos interesa es CreateNewOutputRows().
Aquí, para el objeto Salida0, que es el nombre de nuestra salida, invocamos el método AddRow() que nos crea una nueva fila y asignamos los valores que nos interese a las columnas que habíamos definido anteriormente. Podemos repetir el código para generar más filas, montar un bucle o complicarlo tanto como necesitemos.

Y eso es todo, nuestro flujo ahora tiene una fila con dos columnas que contienen los valores 1 y "Valor1".

martes, 21 de febrero de 2017

Compartir conexión en PDI

Pentaho Data Integration (a.k.a. PDI, a.k.a. Kettle), es una herramienta de ETL que cumple la regla de las tres bes: buena, bonita y barata. La utilizo continuamente en mi trabajo para leer, depurar, modificar, cruzar, seleccionar y escribir datos en una gran variedad de formatos de fichero y bases de datos.
Hace unos días descargué e instalé la versión 7, pero de momento sigo manteniendo la versión 5 hasta que esté seguro de que no me dará problemas. De momento ya he encontrado un problemilla, menor pero un poco molesto: el IDE en castellano no reconoce los acentos y demás caracteres propios del idioma. Me aparece un interrogante dentro de un rombo �
Trasteando para intentar solucionar este problema, vi algo en lo que no me había fijado nunca: Kettle permite compartir conexiones a bases de datos entre diferentes jobs y transformations!!
Os aseguro que llevo muchos años utilizándolo, he desarrollado cientos (¿miles?) de transformaciones, la inmensa mayoría con conexión a la misma base de datos y en todas ellas he creado la conexión cada vez. Y hoy me encuentro que podía haberla creado una sola vez y haberla utilizado en todas :(
¿Y eso como se hace?
Fácil, primero creas la conexión (entiendo que si te interesa compartirla, es porque ya la tienes creada, si no sabes como hacerlo, me dejas un comentario y un día hago una entrada explicándolo). Una vez creada, vas a la pestaña View, buscas tu conexión y en el menú contextual (botón de la derecha del mouse), seleccionas 'Compartir':

A partir de ahora, todas las transformaciones que crees tendrán todas tus conexiones compartidas incorporadas. ¡Un verdadero ahorro de trabajo!

¿Y cuando quieres dejar de compartirla? Ahora aparece una nueva opción en el menú contextual.



¿Vuelvo a la carga? Venga, lo intento...

Ya no recordaba haber empezado este blog, la verdad es que soy un desastre. Voy a intentar retomarlo e ir añadiendo algunas ideas relacionadas con el mundo del BI, las bases de datos y la programación. A ver si esta vez soy constante.

Un saludo