Actualmente estoy en el proceso de crear ETL para nuestro almacén de datos. Estamos usando SSIS 2008, pero nos encontramos con problemas, el mayor de los cuales es la dificultad para reutilizar componentes. Tenemos paquetes separados para cada tabla y cada paquete toma como entrada una serie de variables de un paquete padre. A medida que hacemos cambios en estas variables de entrada, debemos ingresar a cada paquete (tenemos 15 más o menos ahora, pero este número va a crecer significativamente) y modificar el paquete para hacer frente a esos cambios. También hay otros problemas, incluida la imposibilidad de ejecutar SQL arbitrario para nuestra extracción, capacidades de registro deficientes, etc.
Todo este proceso sería mucho más sólido si hubiera una forma de desarrollar nuestros ETL en código, permitiendo la reutilización de código, bibliotecas comunes, mejores pruebas unitarias, etc. ¿Existe un lenguaje / API ETL estándar de facto para SQL Server? Estoy buscando evitar las herramientas GUI tanto como sea posible.
Editar: debo mencionar mi fondo. No soy un DBA y no tengo entrenamiento formal (o informal) de DBA, básicamente he descubierto estas cosas a medida que avanzaba, por lo que es muy probable que esté intentando hacer cosas inapropiadas con SSIS o acercarme a este ETL proyectar desde el ángulo equivocado. Además, actualmente estoy empleado en el gobierno estatal, por lo que cualquier solución que requiera la compra de un nuevo paquete de software no está dentro de lo posible.
Aquí está una de nuestras tareas. Estamos utilizando un único paquete SSIS para cargar cada tabla en nuestro almacén. Cada paquete de hechos y paquete de dimensiones son generalmente iguales, solo difieren en
- Extracciones de la base de datos fuente
- Manipulaciones en un flujo de datos
- Se fusiona con la tabla de destino.
Lo que me gustaría poder hacer (que me resulta difícil hacer en SSIS)
- Cargue la consulta de extracción desde un archivo de texto. Cuando los desarrolladores escriben y prueban sus consultas de extracción, no debería tener que manipular su consulta de ninguna manera antes de que SSIS la ejecute y no debería tener que cortar y pegar la consulta en un objeto de origen de base de datos.
- Pruebe cada componente individualmente. Debería poder probar el proceso ETL completo para una tabla individual aislada, independiente de otras cargas de tabla.
- Realice modificaciones a la lógica compartida en un solo lugar, sin tener que editar cada paquete individual. Cada paquete carga datos en las tablas de auditoría de la misma manera, si quiero cambiar los datos que se cargan auditados, no quiero tener que editar los 15 paquetes (este número será mucho mayor con el tiempo).
Todo el proceso parece que sería mucho más fácil de implementar y más robusto si se realiza programáticamente con el uso adecuado del código compartido.