Como exportar um arquivo simples com diferentes linhas usando SSIS?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho tabelas de árvores, Cliente, Fatura e InvoiceRow com as relações normais.

Estes tenho para exportar em um arquivo de comprimento de campo fixo com os dois primeiros caracteres de cada linha que identifica o tipo de linha. Os tipos de linhas têm especificações diferentes.

Eu provavelmente poderia fazê-lo com um loop aninhado em um bloco de script, mas este é o meu primeiro pacote SSIS que nunca e que solução se sente mal.

edit:

A saída tem que ter:

Customer  
Invoice  
Rows  
Customer  
Invoice  
Rows  
and so on
Foi útil?

Solução

A sua intuição sobre como fazer isso usando um componente Script destino está correto. Infelizmente, este cenário não jive com SSIS bem. Eu não considero isso um pacote de iniciante. Se você deve usar SSIS então eu começar interior juntar todos os dados para que haja uma linha para cada InvoiceRow, contendo os dados necessários de todas as três tabelas.

CustomerCols, InvoiceCols, RowCols

Em seguida, no componente de destino script que você vai precisar para manter o controle dos valores do cliente e factura, como eles mudam você vai precisar para escrever linhas extras para a saída.

Criando um destino com o componente Script para mais informações no destino script.

A minha experiência mostra que os destinos de script pode ter um bom desempenho.

Outras dicas

Gostaria de evitar escrever script de destino, e usar apenas Script Transforme + Flat File Destination. Dessa forma, você se concentrar na saída lógica (seqüências de dados), permitindo SSIS para fazer escrita real para o arquivo (que poderia ser um pouco mais eficiente, mais você se concentrar em seu negócio, e não em escrever a arquivos).

Primeiro, você precisa obter dados desnormalizada. Você pode fazer associações e tipos no DBMS, mas se você não quer colocar muita pressão sobre DBMS -., É só pegar dados ordenados fora dele e mesclá-lo usando dois SSIS Merge Join transforma

Em seguida, fazer o script: continuo correndo valores do cliente atual e Fatura, saída-los quando eles mudam, InvoiceRow saída em cada entrada. Algo parecido com isto:

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, adicione um destino de arquivo simples com uma única coluna (outputColumn criado pelo script) para escrever este para o arquivo.

Processe suas três tabelas de modo que as saídas são todos apropriados para o seu arquivo de saída (incluindo o designador do tipo de linha). Você vai ter que fazer isso em três caminhos de fluxo separadas em seu fluxo de dados, em seguida, trazer as linhas juntos em uma união Todos os dados elemento fluir. A partir daí, processá-los, conforme necessário para criar seu arquivo de saída.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top