2008-12-24 5 views
6

Por alguna razón, tengo muchos clientes que tienen datos existentes que se almacenan en hojas de cálculo. A menudo hay cientos, sino miles de elementos en cada hoja de cálculo, y pedirle al cliente que los ingrese manualmente a través de un sitio web (o que el cielo no los importe de esa manera yo mismo) está fuera de discusión. Normalmente, estos datos no asignan simplemente la columna de la hoja de cálculo a la columna de la base de datos. Eso sería demasiado fácil. Con frecuencia, los datos deben manipularse antes de ingresar a la base de datos (los datos deben dividirse por comas, etc.) o los datos deben distribuirse en varias tablas. O ambos.¿Cómo se suelen importar los datos de una hoja de cálculo a varias columnas de la base de datos?

Estoy haciendo esta pregunta, no porque no conozca una multitud de formas de hacerlo, sino porque no me he decidido por una manera que parezca que no requiere más trabajo de lo que debería. . Hasta ahora me he tomado todos los siguientes enfoques (y probablemente más que he olvidado):

  • Uso de Excel para modificar los datos, así que es un poco más fácil importar
  • importar la hoja de cálculo en una tabla temporal y luego importar con SQL
  • Escribir un guión e importar los datos con él (he utilizado VBScript, C# y Ruby ahora)

Hasta ahora, el uso de un script ha sido la forma en que parecía más flexible, pero todavía se siente un poco torpe. Tengo que realizar esta tarea lo suficiente que incluso he contemplado escribir un pequeño DSL, solo para acelerar las cosas.

Pero antes de hacerlo, tengo curiosidad, ¿hay una mejor manera?

Respuesta

3

Tienes que establecer límites, si puedes. Debe tratar de proporcionarles una plantilla para que los utilicen con los datos esperados, que incluyen el tipo de archivo (Excel, csv, etc.), los nombres de las columnas, los valores válidos, etc. Debe permitir que el usuario busque el archivo y lo cargue. en su página/formulario.

Una vez cargado el archivo, debe realizar la validación y la importación. Puede usar ADO.NET, secuencias de archivos, DTS/SSIS u Office Automation para hacerlo (si usa la pila de Microsoft). En la parte de validación, debe decirle al usuario exactamente lo que hicieron mal o necesitan cambiar. Esto podría incluir que la página de validación tenga los datos reales en una cuadrícula de datos y que proporcione etiquetas rojas con errores en la fila/columna exacta. Si usa Office Automation, puede darles el número de celda exacto, pero el PIA de Office es una molestia.

Una vez que se acepta la validación, puede importar la información como desee.Prefiero ponerlo en una tabla de etapas y usar un programa almacenado para cargarlo, pero así soy yo. Algunos prefieren usar el modelo de objetos, pero esto puede ser muy lento si tienes muchos datos.

Si carga personalmente estos archivos de forma manual y tiene que entrar y manipularlos, le sugiero encontrar la comunalidad entre ellos y crear un estándar para seguir. Una vez que tenga eso, puede hacerlo para que el usuario pueda hacerlo por sí mismo o puede hacerlo mucho más rápido usted mismo.

Sí, esto es mucho trabajo, pero en el largo error, cuando hay un programa que funciona el 95% del tiempo, todo el mundo gana.

Si esto va a ser una situación que simplemente no se puede automatizar, entonces probablemente solo tendrá que tener una tabla de preparación de vainilla y tener sql para la importación. Tendrá que cargar los datos en una tabla de etapas, hacer la manipulación básica y luego cargarla en la tabla de preparación que su SQL espera.

He hecho tantas importaciones y herramientas de ETL, y realmente no hay una manera fácil de manejarlo. La única forma es realmente llegar a un estándar que sea razonable y atenerse a él y programarlo.

+0

La mayoría de los clientes son bastante buenos para seguir un estándar si las importaciones van a suceder con frecuencia. Los mayores problemas surgen cuando se importan datos que solo se deben importar una vez (antes del lanzamiento del sitio o cuando se agregan nuevas funciones, etc.). –

+0

Eso parece ser uno para mí. Y esos son los momentos en que odiamos nuestros trabajos. –

+0

He usado MSSQL's DTS para esto en el pasado y funcionó bien. Debe hacer que el paquete DTS escriba en un registro en la base de datos para que sepa cuándo tiene éxito o si falla. –

2

sí, eso solo apesta.

Me gustaría ir con el guión. Y supongo que tiene columnas repetitivas que tienen que coincidir con una sola fila en otra tabla. Me gustaría hacer una coincidencia razonable y si encuentras una fila que el guión no puede manejar y mover los datos ... entonces regístrate y haz que alguien lo haga manualmente.

+0

Tengo columnas repetitivas como las que describes, y una coincidencia razonable es más o menos lo que les he dicho a los clientes que puedo hacer. Por lo general, si no pueden proporcionar algún tipo de identificación única para que coincida, entienden que las cosas no siempre pueden coincidir perfectamente. –

2

Son los pequeños detalles que te matarán en esto, por supuesto, pero en general, he tenido éxito exportando los datos como CSV de Excel, y luego lo he leído usando un rool o script, cortándolo según sea necesario e insertándolo. Dependiendo de lo maravilloso de mi entorno, eso se puede hacer con una interfaz de base de datos para el lenguaje de scripts, hasta e incluyendo la escritura de sentencias SQL INSERT en un archivo de script.

Hay buenos paquetes de CSV disponibles para Python, Ruby y Perl.

+0

Ruby en realidad tiene una biblioteca llamada (curiosamente) Hoja de cálculo que también ha funcionado bastante bien para importar directamente desde Excel. Tuve problemas con la biblioteca ParseExcel (que es un puerto Perl, creo), pero Spreadsheet crea ParseExcel y parece que solucionó muchos problemas. –

0

Un DSL es el camino a seguir.

Cree un modelo de dominio para su problema. Habla de celdas, columnas, filas, tablas de bases de datos, división de campos, combinación de campos, asignación de celdas a columnas de la base de datos, de modo que esos son los conceptos que necesita. Además, probablemente desee rangos (de celdas) y hojas.

Una vista simple solo mira los valores en las hojas de cálculo, no las fórmulas subyacentes. Exportar la hoja de cálculo como texto separado por tabulación le da acceso a eso. Si necesita acceder a las fórmulas, es mejor con la representación xml, ya sea la hoja de cálculo XML o el formato XML de Office.

Es posible que pueda crear una DSL en Excel. Eso podría permitir a los usuarios más inteligentes hacer (parte de) la asignación.

Cuestiones relacionadas