jueves, 17 de octubre de 2013

Conectarse con Amazon Redshift desde SSIS


Después de algunas consideraciones decidí seguir las recomendaciones del post Connection to a PostgreSQL Instance Using SQL Server Integration Services que recomiendo lean. Aquí un resumen de los pasos para crear la conexión dos conexiones, una con drivers de 32bits y otra de 64bits ambos opoertivos en nuestro entorno:

1. Descargar los archivos .msi para windows desde el sitio http://www.postgresql.org/ftp/odbc/versions/msi/. Los drivers recomendados son: psqlodbc_08_04_0200 para 32bits y pssqlodbc_09_00_0101x64 para 64 bits.
2. Instalar los drivers en el servidor SSIS.
3. Lanzar el administrador ODBC, seleccionar el tipo de origen de datos necesario: Archivo, Sistema o Usuario y pinchar en Agregar.
4. El administrador ODBC presentara una lista de drivers para PostgreSQL instalados anterirmente. Encontraremos una versión ANSI y otra Unicode y pinchar en Finalizar. Para conectarme con Redshift yo he utilizado siempre la Unicode.
5. El administrador presentará una pantalla para solicitarnos los detalles de la conexión. Incluir el nombre del ODBC, la base de datos (en minúsicula), el servidor, usuario, password y puerto de nuestro cluster de Redshift.
6. Una vez introducidos los datos realizar un "Test" para validar que introducimos los datos correctamente y guardar la configuración pinchando en "Save".

Realizar estos pasos para crear un ODBC de 32 (por ejemplo Redshift32) y otro de 64 bits (Redshift64)

Una vez instalados los drivers y creados los ODBCs crearemos una conexión desde el connection manager de SSIS. Los pasos son:

1. Seleccionar el proovedor de datos .NET Providers\.ODBC
2. Selecionar la opción "Use connection string" y construir la cadena de conexión del estilo:
Dns=Redshift32;uid=User1;Pwd=Pass1;
3. Prueba la conexión

Después de varios intentos pude comprobar que en tiempo de diseño el ODBC de 64 bits no funciona correctamente por lo que decidí usar el de 32bits para estos casos. Para ello el valor de la propiedad Run64BitRuntime debe ser "False". Encontraremos esta propiedad en Propiedades de Proyecto - Debugging. Este cambio forzará que las ejecuciones en tiempo de diseño se realizen en 32 bits.


Para que en producción seamos capaces de aprovechar la conexión de 64 bits crearemos una Propiedad de proyecto "RedshiftConnString" en donde indicaremos la cadena de conexión anteriormente creada. En cluaquier dtsx pulsaremos con el botón derecho a la conexión creada y pincharemos sobre "Parametrizar.." Seleccionaremos la propiedad "ConnectionString" y la opcion "Use existing parameter" con la opción "RedshiftConnStreing" que anteriormente creamos.

Utilizando las variables de entorno disponibles en el catálogo SSISDB podremos modificar la cadena de conexión para que utilice los drivers de 64bits. La cadena en la variable de entorno sería del estilo: Dns=Redshift64;uid=User1;Pwd=Pass1;

Que sea de utilidad!