En la entrada de hoy vamos a proponer una serie de scripts que pueden servir como herramienta de utilidad a la hora de desarrollar una solución de BI, o cualquier otro escenario en donde tengamos que integrar datos de ficheros en SQL Server. Con estos scripts simplificaremos la generación de vistas que nos permitirán validar el tipo de dato y formato.
Escenario
- Tenemos una serie de ficheros planos que necesitamos llevar a base de datos en SQL Server.
- Los ficheros pueden traer campos mal informados, necesitamos validar los tipos de datos antes de hacer las transformaciones pertinentes o cargar en las tablas finales.
- La cantidad de ficheros distintos a integrar es grande y/o se espera que aumente, por lo que buscamos automatizar parte del trabajo.
Pasos a Seguir
- Carga de los ficheros en las tablas de Landing forzando todas las columnas a nvarchar, de esta forma evitaremos posibles errores en la carga.
- Crear una tabla auxiliar para los metadatos que utilizaremos en la creación de vistas.
- Insertar los metadatos de la tabla de Landing en la tabla auxiliar.
- Generar el código de las vistas de casteo y validación con los scripts que proponemos a partir de los metadatos de la tabla de landing.
Ejemplos de Aplicación
Vamos a trabajar con un ejemplo simple, asumiendo que tenemos ya cargado el fichero a la base de datos de Landing. En esta carga hemos cargado todo en nvarchar(1000), es decir sin inferir ni castear tipos de datos para evitar posibles problemas si el fichero trae alguna columna mal informada. Los casteos y detección de errores los haremos en la vista que generaremos más adelante.
Metadatos
Creamos una tabla auxiliar en la que insertaremos los metadatos de la tabla de landing para utilizarla en la generación del código de las vistas.
Utilizando el script que veremos a continuación cargaremos la tabla con los metadatos de la tabla de Landing. Tenemos que pasarle el nombre de la tabla y estamos filtrando por el esquema ldg que es donde tenemos las tablas en nuestro ejemplo.
Como vemos el script consulta sobre la tabla INFORMATION_SCHEMA.COLUMNS para traerse las columnas de la tabla que contiene la carga del fichero.
Los campos de la tabla se describen por si mismos, aunque cabe aclarar ‘active_for_creation’. Este campo simplemente es un flag que utilizaremos en el script de generación de vistas para indicar si la columna en cuestión debe ser incluida. Modificaremos Destination_Data_Type para mapear los tipos de entrada con los tipos de salida.
Generación Vista de Casteo
Con los metadatos cargados el siguiente paso es generar la vista de casteos. Esta vista va a realizar un try_cast sobre las columnas y en caso de no ser posible (try_cast nos devuelve null) marcaremos la fila como errónea, lo que nos sirve para poder controlar errores en el fichero de entrada y tomar acciones de cara a la siguiente fase de la carga como puede ser enviar una notificación de fichero incorrecto etc…
Generación Vista de Validación
Por último, se genera una segunda vista de validación en las que añadiremos reglas para validar el formato de cada campo que nos interese. Una vez generado el código de la vista se actualiza el flag active_for_creation = ‘N’ para evitar generar por error el código de una vista generada previamente.
Resultado
Formateando el resultado de las queries anteriores llegamos a la definición de las vistas a continuación.
En la primera tenemos las columnas tal y como ven’ian en el fichero más una versión en la que se realiza el try_cast que convertirá al tipo deseado o devolverá null de no ser posible. Luego vemos como se comprueban los casos de null para macar el flag de error y por último se suman los flags para formar el valor del número de errores en la fila que aparece informado en la columna [$sq_transformation_error_count].
En la segunda vista se consulta sobre la vista de casteos, lógicamente sobre los valores que antes pasaron por el try_cast. Vemos una serie de condicioanles que dan lugar a los flags de error para cada columna. En la generación de las vista se utiliza IIF(1 = 1, 0, 1) de forma que no se controla ningún tipo de error, en este punto toca aplicar las reglas que correspondan como podría ser el formato de SalesOrderNumber o AccountNumber.
Por último, se filtran las filas que no hayan conseguido castear alguna de las columnas. [$sq_transformation_error_count] = 0
Conclusión
Hasta aquí llega la entrada de hoy. Hemos creado vistas de validación para la carga de ficheros, para ello utilizamos una serie de scripts que nos ahorrarán un trabajo tedioso y repetitivo en el caso de tener que desarrollar una solución para integrar múltiples ficheros.
Creemos que os puede ser de utilidad ya que para nosotros está siendo una herramienta de uso habitual en proyectos en los que estamos trabajando.
Utilizando estas vistas junto a una serie de comprobaciones en la carga en Integration Services hemos conseguido reducir la necesidad de dar soporte ante incidencias en los ficheros de entrada, acotando los errores y notificando al usuario con el caso concreto, ayudando a que las acciones relacionadas con la corrección de los ficheros puedan iniciarse sin dependencia de personal técnico.
¿Necesitas asesoramiento para impulsar tu proyecto de BI?
Acelera tus procesos de Business Analytics. Toma mejores decisiones, optimiza tu Datawarehouse y el proceso de generación de informes en tus proyectos de analítica. Trabajaremos juntos para proporcionarte información basada en tus datos. Pon en marcha tu proyecto de analítica y comienza a tomar decisiones estratégicas.
Más Info