¿Cómo exportar un archivo plano con diferentes filas usando SSIS?

StackOverflow https://stackoverflow.com/questions/213411

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo tablas de árbol, Cliente, Factura e InvoiceRow con las relaciones estándar.

Estos tengo que exportar en un archivo de longitud de campo fijo con los dos primeros caracteres de cada fila que identifican el tipo de fila. Los tipos de fila tienen diferentes especificaciones.

Probablemente podría hacerlo con un bucle anidado en un bloque de secuencia de comandos, pero este es mi primer paquete SSIS y esa solución se siente mal.

editar:

La salida debe tener:

Customer  
Invoice  
Rows  
Customer  
Invoice  
Rows  
and so on
¿Fue útil?

Solución

Tu instinto de hacer esto usando un componente de Destino de Script es correcto. Desafortunadamente, este escenario no encaja bien con SSIS. No considero esto un paquete para principiantes. Si debe usar SSIS, entonces comenzaría por unir todos los datos, de modo que hay una fila para cada InvoiceRow, que contiene los datos necesarios de las tres tablas.

CustomerCols, InvoiceCols, RowCols

Luego, en el componente de destino del script, deberá realizar un seguimiento de los valores del cliente y de la factura, ya que a medida que cambien, deberá escribir filas adicionales en la salida.

Consulte Creación de un destino con el componente de script para obtener más información en el destino del script.

Mi experiencia muestra que los destinos de script pueden tener un buen rendimiento.

Otros consejos

Evitaría escribir Script Destination y utilizar solo Script Transform + Flat File Destination. De esta manera, se concentra en la salida lógica (cadenas de datos), mientras permite que SSIS realice la escritura real en el archivo (podría ser un poco más eficiente, además de concentrarse en su negocio, no en la escritura de archivos).

Primero, necesitarás obtener datos desnormalizados. Puede hacer uniones y clasificaciones en el DBMS, pero si no desea ejercer demasiada presión en el DBMS, simplemente ordene los datos y fusione utilizando dos transformaciones de combinación de combinación SSIS.

Luego haga el guión: mantenga los valores actuales del Cliente y la Factura actuales, imprímalos cuando cambien, imprima InvoiceRow en cada entrada. Algo como esto:

if (this.CustomerID != InputBuffer.CustomerID) {
  this.CustomerID = InputBuffer.CustomerID;
  OutputBuffer.AddRow();
  OutputBuffer.OutputColumn = "Customer: " + InputBuffer.CustomerID + " " + InputBuffer.CustomerName;
}
// repeat the same code for Invoice

OutputBuffer.AddRow();
OutputBuffer.OutputColumn = "InvoiceRow: " + InputBuffer.InvoiceRowPrice;

Finalmente, agregue un Destino de archivo plano con una sola columna (OutputColumn creada por la secuencia de comandos) para escribir esto en el archivo.

Procese sus tres tablas para que todas las salidas sean apropiadas para su archivo de salida (incluido el designador de tipo de fila). Tendrá que hacer esto en tres rutas de flujo separadas en su flujo de datos, luego reunir las filas en un elemento de flujo de datos de Unión Todos. A partir de ahí, procesarlos según sea necesario para crear su archivo de salida.

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