Pregunta

Estoy creando un proceso de ETL en MS SQL Server y me gustaría tener errores específicos a una determinada columna de una fila particular. Por ejemplo, los datos se cargan inicialmente a partir de los archivos de Excel en una tabla (que llamaremos la tabla inicial), donde todas las columnas son varchar(2000) y luego me etapa, los datos a otra tabla (la DataTypedTable) que contiene los tipos de datos más específicos (datetime, int, etc.) o longitudes varchar más estrechamente limitados. Tengo que ser capaz de crear mensajes de error para un campo específico, como: "13ª de enero" no es un formato de fecha válido para la fecha de presentación. Por favor, use un formato de MM / DD / AAAA

tendrían que ser almacenada en alguna manera Estos mensajes de error de tal manera que más adelante en el proceso de un proceso automatizado puede crear informes con los mensajes de error de tal manera que cada mensaje hace referencia a una fila y campo específico (alguien tendrá que volver atrás y corregir la los datos en el sistema de origen y vuelva a enviar el archivo de Excel). Así que lo ideal sería ser insertado en un Fallos tablas de algún tipo y contiene la clave principal de la fila fallado, el nombre de la columna, y el mensaje de error.

Pregunta: Así que me pregunto si esto se puede lograr con SSIS, o alguna herramienta de código abierto como Talend, y si es así, ¿cuál sería su enfoque general? O lo que la mano enfoque codificado que tomaría?

Pareja enfoques he pensado en el uso de SQL (hasta hasta que no lo he hecho a mano en ETL SQL procs, pero quiero considerar otros enfoques posibles C # siquiera..):

Utilice un cursor para leer la tabla inicial, y para cada fila insertar un registro en blanco con sólo la clave primaria en la tabla DataTyped, a continuación, utilizar una única instrucción de actualización para cada columna, de modo que si esa actualización no puedo insertar un mensaje de error muy específico específico para esa columna en la tabla de mensajes de error.

Introduzca todos los datos al igual que en la tabla DataTyped, pero tienen columnas duplicadas como SubmissionDate y SubmissionDateOld. Después de la inserción inicial de las columnas * viejos tienen datos, el resto están en blanco, y tengo una sola actualización para cada columna que establece el SubmissionDate basado en la SubmissionDateOld.

Además de sugerir un enfoque, me gustaría saber si está utilizando ese enfoque o algo ya similar en el trabajo que haces.

¿Fue útil?

Solución

Yo uso el aproach donde pongo una división condicional en el flujo de datos. Los registros que no logran las condiciones (fecha no válida, no existen datos en un campo requerido, etc.) se envían a una tabla de excepción que incluye el identificador de registro, los datos erróneos, la razón por la que falló. A continuación, puede más adelante crear un archivo de hoja de cálculo o texto de los errores de esta información para enviar de nuevo al grupo que proporciona el archivo. Los buenos registros por supuesto, ir a la ruta pther y se insertan en la tabla.

Otros consejos

¿Qué tal un poco de limpieza / transformación antes de cargarlos en la puesta en escena (lo que se llama tablas iniciales) tablas? Volcar los datos de Excel en un archivo separado por comas o ficha y luego usar algunos lenguajes de programación de su elección para hacer la limpieza de datos que se han señalado. Además, ¿cómo de grande es cada carga de datos? Puede hacer uso de aplicaciones multi-hilo o multi-proceso para manejar cargas importantes (como la carga de unos cuantos millones de filas a la vez). Durante este proceso se encuentra con cualquier error puede ser cargado en la tabla de excepción con el identificador, de error y de comentario detalles. Esta técnica ayuda a tener un mejor control durante la fase de limpieza de datos.

Si la carga no es tan alto y que desea hacer la mayor parte de su trabajo en la base de datos (SQL), entonces es posible que desee hacer tanto de perfiles de datos como sea posible y tener una buena understading de posibles variaciones de datos que se puede esperar. Con que se puede utilizar componente apropiado (Talend o SSIS) para hacer la transformación o controlar el flujo de datos. Además, mediante el uso de expresiones regulares se puede coger cualquier entidad que se desvía de la norma establecida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top