Quantcast
Channel: SSIS
Viewing all 18 articles
Browse latest View live

Diseño de un Data Warehouse

$
0
0

Estoy realizando un proyecto para el diseño de un data warehouse, utilizando como gestor de base de datos Sql Server 2005.

Los pasos para el diseño del mismo por lo que he averiguado serían:

  • recogida y análisis de requisitos
  • diseño conceptual: entidad-relación
  • diseño lógico: modelado multidimensional y esquemas en estrella
  • diseño físico: definición del esquema rolap o molap, diseño ETL
  • implementación: carga del almacén y la preparación de las vistas de usuario mediante herramientas OLAP

Sql Server 2005 cubriría la carga del datawarehouse (ETL) mediante SQL Integration Services, y la explotación del mismo (OLAP Y mineria de datos) mediante sql analysis services.

Mi principal duda es construir, diseñar el datawarehouse, sobre todo tengo dudas a la hora del diseño lógico y físico del mismo. He leido tutoriales, manuales y ninguno de ellos me resuelve el problema.

Si pudieran adjuntarme algún ejemplo práctico, sugerencia o experencia personal sobre el tema lo agradecería.

A medida que avance el proyecto y vaya resolviendo dudas las publicaré.

Mi correo es juapepa@ei.upv.es

 

Un saludo y gracias.


Data profiling con SQL Server 2008

$
0
0

Una de las múltiples mejoras que aporta SQL Server 2008 en la parte de ETL con Integration Services es su capacidad para realizar perfilado de datos con su nueva Data Profile Task.

El data profiling es una de las primeras tareas que se suelen abordar en procesos Calidad de Datos, y consiste en realizar un primer análisis sobre los datos de origen, normalmente sobre tablas, con el objetivo de empezar a conocer su estructura, formato y nivel de calidad. Se hacen consultas a nivel de tabla, columna, relaciones entre columnas, e incluso relaciones entre tablas.

La Data Profile Task de SSIS funciona seleccionando una tabla de una base de datos SQLServer 2000 o superior (no sirven otras bases de datos), las opciones de perfilado que se quiera realizar sobre los datos de la tabla, y un fichero XML donde se almacenarán los resultados cuando se ejecute la misma. Es realmente sencillo.

Se pueden seleccionar hasta 8 tipos de perfilado, 5 a nivel de columna y 3 a nivel de varias columnas.

Perfilados a nivel de columna:

  • Distribución de la longitud de los valores
  • Porcentaje de valores nulos
  • Patrones, expresados mediante expresiones regulares
  • Estadísticas de columna: mínimo, máximo, media o desviación standard
  • Distribución de los valores, valores diferentes y porcentaje de aparición de cada uno sobre el total de filas

Perfilados a nivel multicolumna:

  • Claves candidatas, qué columnas podrían ser clave primaria de la tabla
  • Dependencia funcional, los valores de una columna pueden depender de los de otra
  • Inclusión de valores, que columnas podrían ser claves foráneas de otras

SQL Server profile task SSIS

 

Tras ejecutar la tarea se genera un fichero XML en la ubicación elegida donde se almacena toda la información resultado del análisis. Para poder examinar estos resultados SQL Server proporciona la aplicación Data Profile Viewer que en una instalación normal sobre la unidad C debería encontrarse en este directorio:

C:\Archivos de programa\Microsoft SQL Server\100\DTS\Binn\DataProfileViewer.exe

Sólo hay que seleccionar el XML generado por la tarea de SSIS y comenzar a explorar los resultados:

SSIS Data Profile Viewer

Para obtener información más detallada se puede consultar el apartado Tarea de generación de perfiles de datos de la documentación en linea de Microsoft Technet.

También está muy bien comentada esta tarea en los artículos de SQLServer PerformanceSSIS New Features in SQL Server 2008 - Part 3 y Using The Data Profiler Task and FTP Task in SQL Server 2008 Integration Services

 

Coméntalo en el foro

Data profiles de SQL Server IS almacenados en tablas

$
0
0

La tarea de Data Profile de SQL Server Information Services almacena los resultados del perfilado en un documento XML que se puede examinar con el Data Profile Viewer. En el artículo Dataprofiling con SQL Server 2008 explico cómo se utiliza esta nueva Task de SSIS.

Aunque este método sea muy sencillo, a veces puede no resultar suficiente. Si se aborda un proyecto de calidad de datos puede interesar, por ejemplo, almacenar un histórico de los perfilados para poder evaluar cómo ha ido mejorando la calidad de los datos tratados.

La mejor manera de trabajar con datos históricos es utilizando una base de datos y almacenando estos datos en tablas, sobre las que se podrán hacer las consultas, informes y comparativas que haga falta. Para conseguirlo lo único que haría falta es pasar a tablas los metadatos que la tarea de perfilado ha almacenado en el fichero XML.

Pues alguien ya se ha dedicado a buscar una manera sencilla de hacerlo. Thomas Frisendal, desde su web Information quality solutions explica cómo ha creado un archivo XSLT para cada tipo de perfilado que sirve para extraer del XML que genera la Data Profile Task de SSIS uno o más ficheros XML en un formato que puede ser directamente importado a tablas.
 

Package SSIS para pasar Data Profiles a Tablas

Así, con sólo crear un proceso que aplique un XSLT por cada tipo de perfilado, y después cargue cada fichero XML resultante en una tabla ya se pueden almacenar los datos de perfilado en tablas. Como además en todos los ficheros se incluye un campo que informa del nombre de la tabla origen, con una sola tabla para cada tipo de perfilado ya se pueden almacenar los profiles de todas las tablas que se traten.

Data Flow Task de SSIS ProfileToSQL

Yo he añadido además a la tabla un campo de fecha que almacena la fecha en que se realiza el proceso, y de momento el resultado ha sido bueno.
 

En el gráfico podemos ver la distribución de tipos de vía diferentes para el callejero español según datos del INE y darnos cuenta, por ejemplo, de que los identificadores no están demasiado bien tipificados, ya que podemos encontrar cosas como más de un identificador para el mismo tipo de vía (CALLE, C, C/), o bastantes vías con un punto como identificador.

Tabla de SSIS Data Profile de valores diferentes para tipo de via

 

En Free tool for automation of SQL Server el autor comenta cómo funciona esta solución y cómo obtener las hojas de estilo, y en Usage recommandations for the ProfileToSQL stylesheets explica más en detalle cómo utilizar los XSLT, e incluye un disclaimer dejando claro que este software es una versión de test.

 

Coméntalo en el foro

Error de memoria insuficiente en el buffer con SSIS

$
0
0

Cuando ejecuto un flujo de SSIS me falla una tarea que se encarga de cargar una tabla a partir de los datos de otra. Se produce el siguiente error de memoria:

Hresult: 0x80004005  Description: "There is insufficient memory available in the buffer pool

La tabla es bastante grande, tiene más de 1 millón de filas. Supongo que será cuestión de tocar alguna variable o parámetro de memoria, pero no se dónde. Yo he probado a reducir los valores de DefaultBufferMaxRows, DefaultBufferSize y EngineThreads en las propiedades de la Task, pero sigo obteniendo el mismo error.

Puedo seguir probando a tocar estas cosas, pero si alguien sabe cómo solucionarlo le agradezco la ayuda.
 

SSIS: Problemas para acceder a Oracle 10g desde entorno de 64 bits mediante Oledb

$
0
0

Si estamos intendo crear una tarea de flujo de datos que acceda a Oracle usando versiones de cliente igual o inferior a la 10g en entornos de 64bits nos podemos encontrar que al añadir las conexiones aparace un mensaje como el siguiente:

"Test connection failed because of an error in initializing provider. ORA-06413: Connection not open"

La causa del problema reside en que las herramientos de cliente (management studio) de sqlserver se instalan por defecto en la carpeta de archivos de programa con "(x86)" y la mayoria de componentes de management studio estan compilado para 32 bits. A esto falta sumarle un bug de oracle con el tratamiento de esta ruta con parentesis y ya tenemos algo que no funciona...
Soluciones o workarounds para este problema hay varios, que van desde usar directamente el cliente de oracle 11g hasta copiar/pegar los ficheros de la instalación y modificar las claves de registro relativas a SSIS y las rutas de DTExec.exe (ejecutable para paquetes ssis). También debemos cambiar la plataforma en las propiedades del proyecto por una de 32 bits y tener instalada la versión de cliente correspondiente. Aquí encontrareis algunas propuestas.

Por favor, antes de decidir que hacer hay que pensarselo dos veces y analizar si el problema lo podemos esquivar por la parte de la plataforma; si disponemos otra instalación de sqlserveradicional de 32 bits donde poder deployar nuestros paquetes ssis nos ahorraremos dolores de cabeza y perder el tiempo haciendo estas modificaciones. Recuerdo haber leído también que existen parches para Oracle que lo solución, o se puede optar directamente por instalar el cliente de la 11g etc...

Buena suerte

Utilizar SSIS o DTS para trabajar con BBDD Oracle

$
0
0

Abro este tema para comentar cuestiones sobre conexiones de DTS o SQL Server Integration Services que utilicen como origen de datos una base de datos Oracle para recoger datos, ejecutar procesos, etc.

SSIS: Solución a dos errores sin motivo aparente cuando insertamos datos en MySql

$
0
0

 

Por la razón que sea puede que tengamos que desarrollar un paquete de Microsoft Integration Services que nos mueva datos de cualquier origen a una tabla que se encuentra en una base de datos MySQL.

La primera intención será hacerlo mediante una ADO.NET Destination y el provider de MySQL para la conexión. Si lo hacemos así para insertar los datos directamente, al crear el destino, seleccionar la conexión y luego seleccionamos la tabla aparecerá un error como el siguiente al comprobarlo todo con la vista previa o al intentar hacer las asignaciones.

 

 

Este error se debe a al modo de compatibilidad sql ansi de la base de datos mysql donde intentamos cargar los datos. Para solventarlo debemos conectarnos al servidor de MySQL y cambiar la compatibilidad ansi de sql de la base de datos*:

 

TOCA:~# mysql -u root -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 77

Server version: 5.0.51a-24+lenny3-log (Debian)

 

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 

mysql> select @@global.sql_mode;

+-------------------+

| @@global.sql_mode |

+-------------------+

| |

+-------------------+

1 row in set (0.00 sec)

 

mysql> set global sql_mode='ANSI';

Query OK, 0 rows affected (0.00 sec)

 

mysql> select @@global.sql_mode;

+-------------------------------------------------------------+

| @@global.sql_mode |

+-------------------------------------------------------------+

| REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI |

+-------------------------------------------------------------+

1 row in set (0.00 sec)

 

mysql> exit

 

Si volvemos a probar ya podremos tener una vista previa de la tabla o editar las asignaciones entre columnas pero nos encontraremos otro error al ejecutar el paquete:

[ADO NET Destination [843]] Error: Excepción durante la inserción de datos. El mensaje devuelto por el proveedor es: Unknown column 'p1' in 'field list'”

El driver tiene un problema y no nos deja trabajar bien con parametros (que es como se construyen las inserciones de registros en el destino) así que tenemos que hacer otro workaround para solventar este problema: trabajar con ADO.NET Destination en destino pero con un origen ODBC en la conexión. Esto unido al tema de la modificación del sql_mode del destino MySQL nos permitirá hacer la carga correctamente.

 


 

*Cabe destacar que la compatibilidad la podemos cambiar a nivel global como en el ejemplo o solo a nivel de session (con lo que deberíamos añadir la ejecución de un comando en primera instancia para modificar el valor de @@SESSION.sql_mode). Más info aquí.

 

 

Cargar surrogate key (sin que este definido en la tabla como autonumerico) con SSIS 2008 R2

$
0
0

Estimados, me encuentro con una inconveniente en el desarrollo de una ETL con SSIS 2008 r2.

Dentro de cada tabla del DW, se ha creado un campo id (surrogate key) que por metodologias de la compañía, a estos campos no se los diseña como unique ni autonuméricos, por lo que la autonumeración debería realizarse a mano dentro del data flow del package, he intentado de varias maneras y no consigo que los registros nuevos lleven id diferente.

Si alguno me puede orientar con este tema, le estaré muy agradecido.

 

Saludos.

Adrián


Conexiones Oracle en DTSx. Solución.

$
0
0

Un problema bastante común cuando realizamos un proyecto que tiene lectura y/o escritura desde una dts a un oracle, es que cuando se crea un job de ejecución se pierde el password de acceso a oracle.
Una solución a esto es editar las conexiones del paquete dentro del job y ponerle a mano el password. El problema es que cada vez que cambiamos la dts se tiene que hacer lo mismo.

La solución definitiva ha esto es crear una variable de tipo string en el paquete que contiene la cadena de conexión completa.
Dicha cadena sería: "Data Source=;User ID=;Provider=OraOLEDB.Oracle.1;Persist Security Info=True;Password=;"

Una vez hecho esto, hay que entrar en la propiedades de la conexión en el "Connection Manager" (parte inferior de la dts)y añadir una expresión clicando con el ratón en la elipse.
Añadir una expresión de tipo "ConnectionString" y arrastar en el diálogo la varible que hemos rellenado antes.

Ya está.

Saludos!

ssis etl script

$
0
0

tengo un problema, cree un etl pero ahora quiero hacer un script o algo similar para que el que lo quiera ejecutar no tenga que entrar a la herramienta y poner el botón play, si me pudiesen dar los pasos de como hacer eso lo agradecería.

Administración de SQL Server, Integration Services y Analysis Services

$
0
0

Este manual de SQL Server reunimos las mejores publicaciones sobre administración y desarrollo sobre bases de datos SQL Server, y las herramientas de integración de datos y business intelligence SQL Server Integration Services y SQL Server Analysis Services que incluye la base de datos de Microsoft.

 

SQL Server 2014 DQS (Data Quality Services)

$
0
0

Microsoft Sql Server Data Quality Services (DQS) es una herramienta, cliente-servidor, que se introdujo en Sql Server 2012 y que permite permite velar por la integridad de los datos basada en unos datos previos, la base de datos de conocimiento, que usamos para validar otros datos posteriores. Esta herramienta permite incluso limpiar datos entrantes en paquetes de SSIS. Su propósito es conseguir datos de calidad, construyendo primero una fuente de conocimiento sobre la calidad objetivo de nuestros datos, creando dominios (valores de referencia para asignar validez o no) y reglas para definir actuaciones.

Microsoft SQL Server Data Quality Services

Generalmente los datos incorrectos son un problema que se genera por usuarios o clientes en el momento de su introducción. Otras veces, los problemas pueden venir al unir diferentes orígenes de datos en un mismo almacén de datos destino. Con herramientas como DQS podemos, de alguna manera, validar nuestros datos o incluso corregirlos para obtener finalmente datos válidos y de mayor valor empresarial. En teoría, una de las ventajas que dice Microsoft sobre DQS es que permite a usuarios de distintos niveles (usuario final o profesional IT) el crear, ejecutar y mantener las operaciones de calidad de datos...

Antes empezar necesitaremos tener instalado en nuestro servidor lo necesario para empezar a probar. Lanzamos el instalador de SqlServer y añadimos a nuestra instancia de SqlServer Data Quality Services, bajo el motor de la base de datos y en el caso de probar con una máquina virtual también el cliente de calidad de datos.

Caracteristicas de Microsoft SQL Server Data Quality Services

Una vez completada la instalación activamos la parte del Servidor. Lo encontramos en el menú Inicio > Programas > Microsoft SQL Server 2014 CTP>Data Quality Server Installer 

Microsoft Data Quality Server

Además de los componentes de servidor, eso también copia una base de conocimento de ejemplo, DQS Data, que incluye algunos dominios predefinidos. Superado este paso ya podemos empezar con nuestro ejemplo. Para las pruebas tendremos dos tablas de empleados como esta que usaremos primero como base para crear las reglas para nuestra base de datos de conocimiento y una vez definidos dominios con sus reglas de validación, las usaremos para probar de corregir los datos y exportarlos a otra tabla de sqlserver.

 

--Script de carga para las tablas de ejemplo.
CREATE TABLE [dbo].[EmpleadosA](
[Nombre] [varchar](20) NULL,
[Genero] [varchar](10) NULL,
[Edad] [tinyint] NULL
) ON [PRIMARY]

INSERT INTO [dbo].[EmpleadosA] VALUES ('John','Male',18)
INSERT INTO [dbo].[EmpleadosA] VALUES ('Mike', 'Hombre',18)
INSERT INTO [dbo].[EmpleadosA] VALUES ('Rahul', 'Ind',NULL)
INSERT INTO [dbo].[EmpleadosA] VALUES ('Sara','Mujer',23)
INSERT INTO [dbo].[EmpleadosA] VALUES ('Alberto','H',48)
INSERT INTO [dbo].[EmpleadosA] VALUES ('Carlos','Hombre',18)
GO

CREATE TABLE [dbo].[EmpleadosB](
[Nombre] [varchar](20) NULL,
[Email] [varchar](40) NULL,
[Titulo] [varchar](20) NULL
) ON [PRIMARY]

INSERT INTO [dbo].[EmpleadosB] VALUES ('John','jhon@test.com',NULL)
INSERT INTO [dbo].[EmpleadosB] VALUES ('Mike','Mike test.com','Bachillerato')
INSERT INTO [dbo].[EmpleadosB] VALUES ('Rahul','','Primaria)
INSERT INTO [dbo].[EmpleadosB] VALUES ('Sara','sara@test.com','PM')
INSERT INTO [dbo].[EmpleadosB] VALUES ('Alberto','alberto@test','Secundaria')
INSERT INTO [dbo].[EmpleadosB] VALUES ('Carlos','test@test.com','Licenciado')
GO

A continuación ya podemos abrir el Cliente de Calidad de Datos (Microsoft SQL Server 2014>Data Quality Client) para empezar a trastear. Nada más clicar nos pide el nombre del servidor (pensemos en nuestra instancia de servidor SQLSERVER). Lo primero que debemos hacer es crear una Nueva base de Conocimiento.

Microsoft Data Quality Cliente

Lo siguiente será crear una nueva. Le ponemos Nombre y pulsamos siguiente. Cerramos y volvemos al menú principal. A continuación Lo que haremos será elegir de nuestra base de datos la "Detección de conocimiento". Esta opción permite elegir una fuente de datos (excel, sqlserver) y definir dominios a partir de columnas de datos. En mi caso me conecto a la bbdd, elijo una de los tablas de ejemplo para empezar a definir para cada columna que me interese un dominio con parámetros específicos en cada columna que lo necesite... Particularmete interesante la opción de poder elegir, en el caso de una columna de texto, el idioma del mismo, pasarle el corrector ortográfico y también formatear la salida (MAY/MIN para abreviaturas?).

Microsoft Data Quality base de conocimiento

El paso siguiente es el "análisis de detección de datos en el origen seleccionado". Se escanea el origen y se determina por cada columna los valores únicos, los validos y los que infringen la integridad (valores null etc). Si hemos probado sobre EmpleadosA solo vemos un error de integridad debido a un NULL en la  columna Edad. Pulsamos siguiente y podemos elegir que hacer con los nuevos valores que sean validos, así como ignorar los incorrectos marcándolos como error.

(Administración de la base de conocimiento de Microsoft DQS

Ahora, antes de validar de nuevo, definiremos un dominio más complejo para los campos de email. En este caso será una regla de validación de formato. Primero vamos como a antes a la detección de dominios para definir sobre la segunda tabla el dominio sobre la columna email (como el los ejemplos anteriores). Una vez hemos creado el dominio para el campo email, la diferencia es que saldremos y entraremos en el Administrador de dominios sobre nuestra base de datos de conocimiento y modificaremos las Reglas de Dominio (fijaros también que aquí podemos explorar los Valores del Dominio que forman parte de él) para añadir una del tipo: "El valor coincide con la expresión regular": ^[_a-z0-9-]+(\.[a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$

Administracion de dominios de Microsoft DQS

 

Al final publicamos este último cambio de este dominio y ya estamos listos para continuar. 

El último paso ya para acabar con esta prueba es validar una tabla real, corregir los datos y exportar a una nueva con los datos que no cumplan las reglas y decidamos corregir. Para hacerlo abrimos de nuevo el Data Quality Client y creamos un nuevo proyecto de calidad de datos. Le pondremos nombre, elegimos la base de conocimiento que hemos definido antes y elegimos limpieza. Los pasos a partir de aquí son parecidos a los anteriores cuando explorábamos la tabla. En el siguiente paso elegimos la tabla a limpiar y para cada columna, si es necesario, un dominio para aplicar sobre ella. Pulsamos siguiente y escaneamos los datos. Con los datos de ejemplo, detectara dos valores para email erróneos que podremos corregir (si han sido corregidos anteriormente los auto-corrige y aparecen como "Corregido"). Finalmente, en el siguiente paso podemos elegir donde exportar nuestros datos pulidos (por ejemplo a una nueva tabla).

Proyecto de calidad de datos de Microsoft Data Quality Services (DQS)

 

Mis conclusiones son...

... que esta es otra herramienta Microsoft bastante fácil de usar y puede que bastante útil para pulir datos maestros de cualquier base de datos o para incluir validaciones como paso intermedio en nuestras cargas para el dwh. Su sencillez (la misma prueba con el proyecto de calidad de datos) hace fácil compartir la carga de corrección manual de los datos con alguien que no sea técnico de bbdd ni programador, más bien una persona dentro de la organización con conocimiento de causa que coja los datos del origen, los interprete y los deje donde tu le digas para cargarlos en algún sitio.

 

Necesito Agregar Componentes de Auditar/MAIL en Proceso de ETL

$
0
0

Buenas esta vez, necesito una ayuda bastante basica, pero como soy novato en el mundo SQLServer todo medio complejo.
Estoy haciendo un Proyecto BI relacionado con un Banco y donde estoy en la etapa de ETL (inicial) c/SISS de AS/400 a SQLServer 2012
Resulta que traigo todas las tablas de intervinientes del Ambiente de AS/400 a SQLServer.
Hasta ahora marcha todo bien, pero estoy necesitando tener todo auditado (hora de inicio, hora de fin, etc) y ademas quiero que dispare algún mail (caso de tener algún inconveniente que envie un mail a los responsables del proceso de ETL).
Bueno era eso no mas. Disculpen

Bids Helper: Complemento para MS Bussiness Intelligence Developement Studio

$
0
0

Bids Helper es un add-in con funcionalidades que complementa y añade nuevas funcionalidades para el desarrollo en SQL Server 2005, 2008, 2008 R2, 2012 usando BI Development Studio. Es un complemento de libre descarga que se mantiene vivo al que se le continúan añadiendo nuevas posibilidades. Su posibilidad de uso abarca desde proyectos de Analysis Services con funcionalidades básicas, proyectos de Integration Services y en menor medida algo de Reporting Services. 

Para instalar Bids Helper basta con cerrar cualquier instancia de Microsoft Bussiness intelligence Developemt Studio, descargar el instalador de este enlace y pulsar siguiente, siguiente, siguiente...

En cuanto a las funcionalidades nos proporciona este add-in, la lista es larga. Por ejemplo con Analysis Services tenemos la posibilidad de chequear la salud de una dimensión y ver como se usa dentro del cubo en la que la hemos añadido. Podemos editar agregaciones y generar scripts sobre múltiples elementos OLAP. También tenemos otro tipo de funcionalidad como puede ser la generación de informes sobre el uso de dimensiones. De Integration Services también tenemos otras como pueden ser el editor más completo de expresiones que ofrece. A continuación detallo algunas de las funcionalidades agrupadas por servicio:

Analisys Services

  • Column Usage Reports: Informe autogenerado con el uso que se hace de las columnas de la vista del origen de datos.
  • Unused Columns Report: Al contrario que el anterior, genera un listado con los campos contenidos que no se usan.

Como abrir el informe de uso de columnas de BIDS Helper

  • Deploy MDX Script: Permite hacer un deploy selectivo para solo incluir los scripts de cálculo mdx.
  • Deploy Perspectives: Deploya solo las perspectivas del cubo. Borra las del servidor no incluidas en la solución.
  • Deploy Aggregation Designs: Algo más complicada que las anteriores pero con la misma filosofía. Deploya solo los diseño de agregaciones aunque no cambia la asignación del diseño de cada partición.
  • Dimension Data Type Discrepancy Check: Perfecto para detectar problemas de desconexión del origen de datos o cambios a medias. Me explico. Muestra las diferencias entre los tipos de datos definidos para la columna origen y la definida en el atributo. Lo podemos hacer haciendo clic derecho en la carpeta Dimensiones del proyecto en el Explorador de Soluciones.
  • Dimension health check: Revisión de la integridad de la dimensión que hace diferentes comprobaciones. Entre otras cosas, comprueba para las claves su no repetición. Debería valer para detectar que clave nos genera el problema en el procesado del cubo.

Como comprobar la integridad de una dimensión con bids helper

  • Measure Group Health: Al estilo del anterior, permite validar el grupo de medidas. De momento solo comprueba los tipos de datos para que no haya desbordamiento.
  • Non-Default Report Properties: Genera un report con el valor de propiedades que han sido modificadas. Fantástico para tener una vista global del cubo y buscar cosas raras sobretodo si hemos heredado la administración de ese cubo. Podemos seleccionar antes de genera el informe que cosas queremos mostrar: agregaciones, tratamiento de duplicados, claves no encontradas...

Como generar el informe de propiedades que no tienen valor por defecto

Aspecto del informe de bids helper con los valores que no son por defecto

  • Roles report: Informe con los diferentes usuarios con sus roles asignados y los permisos sobre dimensiones de los mismos.
  • Visualize Attribute Lattice: Genera un informe gráfico con la relación entre atributos de la dimensión seleccionada.

Informe de la jerarquía de atributos.

Tabular modeling (Analisys Services)

También incluye opciones similares a las anteriores para Tabular Modeling. Tabular Modeling está disponible desde la versión 2012 de SQL Server y son bases de datos en memoria de Analysis Services. Entre las funcionalidades disponibles tenemos Roles Report, Smart Diff, Unused Columns Report, Tabular Prebuild etc.

Integration Services

  • Design Warning: Añade a la lista de errores y warnings las cosas que no cumplen los estándares de diseño en nuestros paquetes de SSIS.
  • Expressions List: Muestra un panel algo más amigable que muestra todas las expresiones definidas en el paquete. Además incluye un editor con más opciones y resumen de expresiones etc. Por cada paquete por el que pasamos podemos verlas pulsando Regresh.

Editor de expresiones de bids helper

  • Non default Properties Report: Al igual que en Analysis Services, genera un informe con el valor de propiedades que han sido modificadas y que no tiene su valor por defecto. Útil para ver las peculiaridades. Podemos seleccionar antes de generar el informe que queremos que se incluya: Modos de acceso, BypassPrepare...
  • Reset GUID's: Regenera los IDS para todas las tareas, conectores, configuraciones etc del paquete seleccionado. Puede ir bien en el caso que hagamos un copiar y pegar de alguna tarea del paquete.
  • SSIS Performance Visualization: Esta opción ejecuta el paquete y añade una nueva perspectiva para ver como se ejecuta el paquete. Aparece una pestaña Performance que nos muestra un Gantt vivo, con el progreso de la ejecución del paquete. Permite ver también un grid con las estadísticas de tiempo e incluso una comparación entre las sucesivas ejecuciones del mismo paquete.

Visor de rendimiento en la ejecución del paquete en forma de Gantt

Reporting Services

  • Dataset Usage Reports: Genera un autoinforme con los datasets que se usan en cada informe permitiendo identificar los que no están usándose actualmente (obsoletos?).
  • Smart Diff: Según el repositorio de código que usemos, mejora la generación y visibilidad de diferencias respecto a la última versión (sobretodo si aún usamos Visual Source Safe 2005).

 

En conclusión...

... me parece un add-in muy útil ya a bote pronto permite generar mucha documentación de forma automática en muy pocos pasos. Además, relacionada con esta, el resumen de propiedades modificadas que no tienen su valor original facilita muchas veces el trabajo en proyectos heredados y poder pedir explicaciones al antiguo responsable si aún estamos a tiempo. Del resto de funcionalidades cada uno podemos tener una opinión sobre ellas pero estas solo suman. No creo que ninguna de ellas se imprescindible pero de vez en cuando podemos dar gracias de que están allí.

De hecho, a parte del tema de la documentación, en una ocasión a mi me ayudo mucho y me ahorro tiempo la opción de poder hacer el Dimension Health Check. Hubo un cambio en los datos que tenia actualizado en la vista de origen de datos pero no en la dimensión (momentos distintos) y al procesar el cubo de nuevo me daba errores. Anteriormente me había pasado y tarde bastante en encontrar el problema pero esta vez solucionarlo fue una cosa muy rápida (aunque quizás ya sabía lo que buscar).

 

SSIS: Microsoft SQL Server Integration Services


Como enviar emails desde SSIS con el SMTP de Gmail

$
0
0

Para cualquier proceso de carga o integración de datos, u otras tareas que se desarrollen con SQL Server Integration Services, SSIS para los amigos, es de gran utilidad disponer de un servicio que permita que la ejecución de la tarea pueda informar de que ha terminado correctamente, de que ha fallado, o que pueda enviar, por ejemplo, un informe o un log con los resultados de la ejecución.

Para ello tenemos la task de envío de emails 'Tarea enviar correo', que con sólo informar los datos de un servidor SMTP que deje al proceso enviar sus emails, y los datos que queremos informar en asunto, cuerpo, etc. del email ya nos permite enviar un email a quien queramos en cualquier punto de la ejecución de nuestros paquetes.

Si tenemos un servidor SMTP en nuestra red que permita a SSIS utilizarlo para este propósito sin necesidad de autenticación todo resuelto, pero si no es así la cosa se complica un poco.

El problema principal es que la tarea de SSIS no permite informar datos de autenticación contra el servidor SMTP, y si el servidor requiere autenticación para su utilización, que es lo normal, nuestra task fallará.

Estos días me he encontrado justo con este problema, y como he probado bastantes cosas antes de poder enviar por fin un email desde SSIS, voy a recoger aquí un resumen de mis peripecias para conseguirlo, incluyendo lo que no me ha funcionado.

 

Soluciones para enviar emails desde SSIS con SMTP de Gmail

Las soluciones que he ido probando se han basado en las que se proponen en este blog de SSIS. Enlazo el primer post, que explica cómo utilizar la 'Send Mail Task', siempre que no haya que autenticarse :)

Aclarar que mi objetivo era poder enviar emails desde SSIS sin disponer de IP fija ni un dominio propio asociado al servidor de SQL Server o a mi red. Para ello, al final siempre tengo que ir a utilizar un servicio de SMTP de terceros, en este caso Gmail.

Mi servidor es un Windows Server 2008 R2, y la base de datos un SQL Server 2012 con Integration Services y Microsoft Visual Studio 2010.

Estas son las opciones que he probado, primero las enumero, y después explico en detalle cada una:

  1. Crear en el servidor de SSIS un servicio de SMTP que a su vez utilice el servicio SMTP de Gmail
     
  2. Utilizar un script de VB o C# para poder informar los parámetros de autenticación y poder enviar emails
     
  3. Utilizar tareas implementadas por terceros, concretamente la Send Mail Task Plus de la librería de Cozyroc
     
  4. Crear en la base de datos SQL Server un perfil y cuentas de correo electrónico para después poder enviar emails llamando a un procedimiento almacenado.

 

Crear en el servidor de SSIS un servicio de SMTP que utilice el servicio SMTP de Gmail

Siguiendo la primera parte de las indicaciones de la segunda solución del blog de SSIS que mencionaba antes, muy bien explicadas en castellano en este post de El Bruno, he creado en mi servidor Windows Server 2008 R2 un servicio SMTP que a su vez utiliza para transmitir los emails el servicio SMTP de retransmisión de Gmail.

Después de seguir todos los pasos, agregando las características del servicio SMPT para mi server, y configurando después el servicio desde el entorno de Internet Integration Services (IIS) para que reenvíe los mails a través del SMTP de Gmail, he conseguido que la tarea de IS se ejecute correctamente, sin devolver ningún error, pero los emails de prueba que he enviado no llegaban a su destino.

Lo curioso es que al no conseguir enviar los emails, pasé a explorar otras opciones, y al día siguiente, justo cuando estaba haciendo el test de la opción de enviar emails directamete desde la base de datos, me llegaron los emails de prueba de la tarea de SSIS que el día anterior me daba envío OK. Lo malo es que al volver a intentar ejecutar la tarea de SSIS, ésta fallaba diciendo que el usuario de Gmail que utilizo para la autenticación no tenía permisos para retransmitir.

Supongo que en las últimas pruebas desconfiguré alguna cosa, y no he tenido más paciencia para encontrar lo que era, he preferido explorar las otras soluciones, pero si alguien me quiere iluminar al respecto se lo agradeceré.

La duda más importante que me ha quedado de esta configuración es que en la guía que estaba siguiendo, donde se informa el nombre del servidor, el autor informaba un nombre de dominio completo, con server.dominio.com, y yo sólo informaba el nombre de mi servidor local, 'miserver', sin dominio. Probé por si acaso a cambiar este nombre por mail.dataprix.com, o incluso miserver.dataprix.com, pero tampoco funciónó.

Configuración de servicio SMTP con IIS

 

Utilizar un script de VB o C# para poder informar los parámetros de autenticación

Como la prueba de utilizar la misma tarea después de configurar el servidor de SMPT en mi server no había salido muy bien, volví a mi fuente de inspiración, la segunda solución del blog de SSIS, que justo propone configurar este servicio para después solucionar la tarea de envío de emails con la Task de Script.

Dicen que lo que no hacen las tareas de SSIS siempre se puede hacer con programación, así que una buena solución es utilizar la tarea de Script para enviar los emails con código VB o C#.

Hice una prueba rápida con el código que publica el mismo blog, y no me funcionó, me devolvían una excepción.

Excepción al enviar emails con VBScript en SSIS

La excepción salta de esta manera porque el script no tiene control de excepciones (try/catch), pero debugando el código o incluyendo el control de excepciones se puede consultar el error que provoca la excepción, que puede ser simplemente una autenticación fallida, un puerto incorrecto o que no esté activado el envío por SSL.

Después de hacer algunas pruebas conseguí crear un script sencillo que sí hacía el envío de emails sin errores ni excepciones. Este es el código supersimplificado que a mi me funciona bien. Si alguien lo reutiliza, al menos que incluya el control de excepciones:

' Microsoft SQL Server Integration Services Script Task
' Write scripts using Microsoft Visual Basic 2008/2010.
' The ScriptMain is the entry point class of the script.

Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime

Imports System.Net
Imports System.Net.Mail
Imports System.Data.SqlClient
Imports System.Xml

<Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute()> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
    Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase

    Enum ScriptResults
        Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
        Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
    End Enum

    Public Sub Main()

        Dim myMessage As MailMessage
        Dim mySmtpClient As SmtpClient
        Dim myException As String
        Dim CCAddressList As MailAddress

        myMessage = New MailMessage("mimailde@gmail.com", "maildestino@gmail.com", "Mi asunto", "Prueba de envio de email")
        CCAddressList = New MailAddress("mailcopia@dataprix.com")
        myMessage.CC.Add(CCAddressList)
        mySmtpClient = New SmtpClient("smtp.gmail.com")
        mySmtpClient.EnableSsl = True
        mySmtpClient.Credentials = New NetworkCredential("mimailde@gmail.com", "mipassword")
        mySmtpClient.Send(myMessage)

        Dts.TaskResult = ScriptResults.Success
    End Sub

End Class

 

Utilizar tareas implementadas por terceros

Si el problema principal es la simplicidad de la Task que viene por defecto con Integration Services, una buena solución es utilizar una versión mejorada de esta tarea, concretamente la que incluye esta librería de Cozyroc.

Esta opción ha sido la más sencilla, sólo he tenido que descargar el instalador, y en 10 minutos tenía en mi barra de herramientas una nueva Task para enviar emails con propiedades para poder informar datos de autenticación, y un asistente para crear una conexión con el SMTP de Gmail. Una vez informados todos los datos, la tarea envió correctamente los emails de prueba, incluyendo ficheros adjuntos.

La única pega es que estas librerías no son gratuitas, se pueden utilizar sin problemas desde el entorno gráfico de Integration Services, pero si no se adquiere la licencia las tareas no funcionan cuando se las llama desde un job.

Para lo que yo quiero hacer no me compensa pagar la licencia, pero me lo apunto porque realmente estas librerias aportan mucha más potencia al entorno de SSIS. Incluyen tareas que mejoran muchas de las existentes, y nuevas tareas para hacer cosas como controlar procesos CDE con Insert/Update/Delete, conectar con Microsoft AX Dynamics, CRM, Sugar CRM, Salesforce o incluso para generar ficheros de Tableau.

En pantalla, las propiedades de la versión extendida para envío de email, y mi cuadro de herramientas de SSIS después de importar la librería, con unas cuantas tareas más:

IDE de SSIS con tareas extra

En el post también se menciona la Send HTML Mail Task, que se puede descargar de CodePlex. La enlazo porque seguro que también funciona bien, pero como no he encontrado con qué versión de SSIS funcionaba, no he llegado a probarla, si alguien lo hace, se agradece si nos explica qué tal funciona, y con qué versión/es funciona.

 

Crear en la base de datos SQL Server un perfil y cuentas de correo electrónico para después poder enviar emails llamando a un procedimiento almacenado.

Por fin, la última opción era crear directamente desde SQL Server con Management Studio un perfil y cuentas para enviar emails desde la base de datos, y llamar al procedure de la base de datos 'sp_send_dbmail' para enviar los mails.

La llamada al procedure se puede hacer tanto desde la misma base de datos, como desde una tarea de ejecución SQL de SSIS, por lo que la misma solución puede servir para más cosas.

Esta solución me ha funcionado bien, y sin mucho esfuerzo. Tiene la importante ventaja de que el entorno de SSMS permite probar fácilmente si los datos del servidor de mail se han introducido correctamente enviando un email de prueba, y en unos minutos tenía bien configurados los parámetros para utilizar el servidor SMTP de Gmail.

Aquí está explicado paso por paso. Parecen muchos, pero se configura bastante rápido, funciona bien, y sin dependencias de terceros. En el post Enviar correo desde SQL Server del blog de Augusto Humire también está muy bien explicado, y en castellano.

Después, llamar al procedure para enviar un email con un archivo adjunto es algo tan fácil como ésto:

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'SSISmail perfil',
    @recipients = 'carlosss@gmail.com',
    @subject = 'Asunto de prueba',
    @body = 'hola, estamos probando',
    @body_format = 'HTML' ,
    @file_attachments = 'E:\Pruebas\default.xls';

Enlazo la página de documentación de msdn del procedure sp_send_dbmail, en la que se puede consultar todos los parámetros que se pueden utilizar y para qué sirve cada uno.

Si lo hacemos desde SSIS, en la tarea de ejecución de SQL utilizaremos esta misma llamada al procedure, y si queremos algo más flexible utilizaremos variables para informar los valores que tienen que recibir los parámetros del procedure, con lo que la sentencia en la tarea podría quedar de esta manera si, por ejemplo, utilizamos 4 variables:

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'SSISmail perfil',
    @recipients = ?,
    @subject = ?,
    @body = ?,
    @body_format = 'HTML' ,
    @file_attachments = ?;

Enviar emails desde SQL Server

Definitivamente, yo me quedo con esta solución, ¿y vosotros?

Problema al ejecutar un paquete SSIS desde un proyecto del catálogo de Integration Services de SQLServer

$
0
0

Recientemente he llevado a cabo una migración de un proyecto de SSIS 2008 a SSIS 2010 fruto de una migración de un servidor SQL Server 2008 R2 a un SQL Server 2012.

En primera instancia, tras el proceso de migración y hacer algunos ajustes, todo funcionó correctamente, y todos los paquetes se ejecutaban sin problemas, tanto desde el entorno IDE de Integracion Services, SQL Server Data Tools, como si se programaba su ejecución desde el agente de SQL Server.

Para aprovechar las nuevas características de SQL Server 2012, el siguiente paso fue la conversión de las conexiones de cada paquete a conexiones globales, y cargar el proyecto y los paquetes dentro del catálogo de Integration Services de la nueva base de datos, y configurar un entorno de producción y otro de desarrollo dentro del mismo catálogo para poder así lanzar los mismos procesos en uno u otro entorno de una manera flexible y bien controlada, un gran avance de esta versión de SSIS.

Todo bien menos un problema que surge al programar la ejecución de los paquetes del catálogo desde el agente de SQL Server. La ejecución de los paquetes se lanza correctamente, pero uno de ellos siempre produce una excepción devolviendo un error de memoria. No es problema de la llamada desde el agente porque este paquete en realidad se llama desde otro paquete, que es el que ejecuta el job del agente, y los otros packages a los que llama se ejecutan sin problemas.

Lo más extraño es que este error sólo se produce en la ejecución desde el catálogo de IS de la base de datos, pero si se ejecuta el mismo paquete desde SQL Server Data Tools, tanto directamente como llamándolo desde el otro package, el paquete se ejecuta con normalidad, no devuelve ningún error, y hace todo lo que tiene que hacer.

Es verdad que este package es uno de los que maneja mayor volumen de datos, y por eso en algún punto debe tener algún problema de memoria que lo hace fallar al ejecutarlo desde el catálogo, pero debería funcionar igual desde ambos entornos, no?

¿Alguien se ha encontrado algún problema parecido? ¿Puede ser algún problema de configuración de la base de datos o del entorno de ejecución?

Cómo conectar desde Visual Studio y SSIS con bases de datos Oracle

$
0
0

Conectar flujos de datos de Integration Services con bases de datos Oracle es muy sencillo, siempre que tengas bien configurado el driver de Oracle que te va a permitir esta conexión.

Los drivers que vienen por defecto no suelen funcionar bien para conectar con Oracle, y lo más recomendable es instalar y utilizar los conectores que proporciona Oracle, el famoso cliente de Oracle, tanto para trabajar con SQL Server Integration Services, como para crear aplicaciones directamente con Visual Studio.

Como en la instalación, que aunque es sencilla, hay que tener en cuenta algunas cosas que no son demasiado intuitivas, en este post reproduzco mi experiencia con una instalación para conectar un cliente de SSIS de una máquina de 64 bits con una base de datos Oracle instalada en un servidor remoto también de 64 bits, servidor y BD. Remarco lo de 64 porque es importante.

El conector que he probado con las SQL Server Data Tools de mi SQL Server 2012 es el OLEDB. En este caso utilizo OLEDB porque me va bien para poder utilizar parámetros en las consultas de SSIS a Oracle, pero lo mismo debería servir para ADO.NET, por ejemplo. Igualmente, en este aspecto hablar de SSIS / SQL Server Data Tools es también hablar de Visual Studio.

 

Instalación de conectores de Oracle para utilizarlos desde Visual Studio

Lo más importante es elegir bien el instalador que se va a utilizar, y lo que comentaba que es poco intuitivo y te puede hacer perder mucho tiempo es que aunque tu sistema, tu base de datos SQL Server y el servidor y base de datos Oracle sean todos de 64 bits, los drivers que has has de utilizar para desarrollar con Visual Studio, y con SSDT son los de 32 bits, al menos a día de hoy.

Este pantallazo las aplicaciones que se ejecutan en mi ordenador con Windows 10 de 64 bits y SQL Server 2012 también de 64 bits va bien para hacerse a una idea de 'por donde van los tiros':

Visual Studio de 32 bits

Apps de 32 bits en Ordenador con Windows 10 de 64bits y SQL Server de 64bits

Opciones para descargar e instalar paquetes de conectores de Oracle

  • Yo he utilizado OLEDB, pero si vas a utilizar ODBC, tienes la opción de descargar el clásico cliente de Oracle, el Instant Client Basic de 32 bits, y después descargar también el paquete 'Instant Client Package - ODBC' y descomprimirlo en la misma carpeta que el cliente. Si no está, recuerda añadir esta carpeta al path en las variables de entorno de windows. Finalmente ejecuta la aplicación 'odbc_install.exe'.
     
  • Para utilizar OLEDB, lo mejor es descargar el paquete'Oracle Data Access Components (ODAC) with Oracle Developer Tools for Visual Studio', de 32 bits, que incluye SQL Plus, drivers .NET, OLE DB y ODBC, Oracle Instant Client y Developer Tools for Visual Studio.

Instalacion de conectores Oracle ODAC
 

  • Si tienes algún problema con las instalaciones, otra opción bastante segura es instalar directamente un Oracle XE en tu máquina cliente, que también incluye el driver OLEDB, y no ocupa mucho más que el ODAC con las Tools. Nunca está de más disponer de una pequeña base de datos Oracle en la máquina que se va a conectar al server, aunque sólo sea para hacer pruebas. Puedes descargar el instalador de Oracle XE 11g desde aqui. Elige también la versión de 32 bits
     
  • Finalmente, otra buena opción para SSDT, pero sólo si tu versión de base de base de datos es SQL Server Enterprise o SQL Server Developer (en Express y Standard no sirve) es instalar y utilizar los conectores de SSIS para Oracle (y también para Teradata) de Attunity. Los proporciona directamente Microsoft, la conexión es mucho más sencilla y son más eficientes que los conectores OLE DB, .NET y ODBC.
     

Crear la conexión OLEDB a Oracle en SQL Server Data Tools

Si los drivers se han instalado bien, en SSDT, entre los proveedores de datos ha de aparecer un 'Oracle Provider for OLE DB', que es el que hay que seleccionar en el administrador de conexiones para configurar una nueva conexión al origen de datos Oracle. En la configuración de la conexión, como Nombre de servidor o de archivo, se informa el nombre que se ha dado en el TNSNAMES.ora a la instancia o servicio de Oracle.

Administrador de conexiones SSIS OLEDB a Oracle

 

Finalmente, si al darle al botón 'Probar conexión' después de haber configurado bien el TNSNAMES e introducir correctamente el nombre de usuario y password el resultado que recibes es un desconcertante 'ORA-12638: Credential retrieval failed', edita el fichero SQLNET.ora, en el mismo directorio donde está TNSNAMES.ora (oraclehome/network/admin), y si tienes la línea SQLNET.AUTHENTICATION_SERVICES= (NTS) cámbiala por SQLNET.AUTHENTICATION_SERVICES= (NONE), guarda todo y vuelve a probar, seguramente ese error desaparecerá.

 

Si además quieres crear un linked server en la base de datos, o aún tienes dudas sobre si instalar conectores de 32 o 64 bits, en este tema del foro que enlazo comento un poco más sobre conexiones a Oracle desde SQL Server.

 

Viewing all 18 articles
Browse latest View live