2008-10-17 4 views
1

У меня есть таблицы деревьев, клиент, счет-фактура и InvoiceRow со стандартными отношениями.Как экспортировать плоский файл с разными строками с помощью SSIS?

Этим я должен экспортировать в один файл с фиксированным полем длины с первыми двумя символами каждой строки, идентифицирующей тип строки. Типы строк имеют разные спецификации.

Возможно, я мог бы сделать это с помощью вложенного цикла в блоке сценария, но это мой первый пакет SSIS, и это решение кажется неправильным.

редактировать:

Выход должен иметь:

Customer 
Invoice 
Rows 
Customer 
Invoice 
Rows 
and so on 

ответ

1

Ваше чувство кисти при выполнении этого с использованием компонента «Назначение сценария» является правильным. К сожалению, этот сценарий не очень хорошо работает с SSIS. Я не считаю это новичком. Если вы должны использовать SSIS, я бы начал с внутреннего соединения всех данных, поэтому для каждого InvoiceRow есть одна строка, содержащая данные, необходимые из всех трех таблиц.

CustomerCols, InvoiceCols, RowCols

Затем в компоненте целевого сценария вам необходимо следить за значениями клиентов и счетов-фактур, поскольку они изменяют вам нужно написать дополнительные строки для вывода.

См. Creating a Destination with the Script Component для получения дополнительной информации о назначении сценария.

Мой опыт показывает, что места назначения сценариев могут иметь хорошую производительность.

0

Обрабатывать ваши три таблицы так, что выходы все необходимые для выходного файла (в том числе типа целеуказателем строки). Вам нужно будет сделать это в трех отдельных путях потока в потоке данных, а затем объединить строки в элементе потока данных All Union. Оттуда обрабатывайте их по мере необходимости, чтобы создать выходной файл.

+0

Как получить правильный порядок строк на выходе? Первый клиент; его счета-фактуры и их ряды. Следующий клиент, его счета и так далее. – idstam 2008-10-17 19:46:06

1

Я бы избегал писать Script Destination и использовать только Script Transform + Flat File Destination. Таким образом, вы концентрируетесь на логическом выходе (строках данных), позволяя SSIS делать фактическую запись в файл (это может быть немного более эффективно, плюс вы концентрируетесь на своем бизнесе, а не на записи в файлы).

Во-первых, вам необходимо получить денормализованные данные. Вы можете делать соединения и сортировки в СУБД, но если вы не хотите слишком сильно нажимать на СУБД, просто удалите из нее отсортированные данные и слейте их, используя два преобразования SSIS Merge Join.

Затем выполните сценарий: сохраните текущие значения текущего клиента и счета-фактуры, выведите их при их изменении, выведите InvoiceRow на каждый вход. Что-то вроде этого:

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; 

Наконец, добавьте Flat Destination File с одной колонкой (OutputColumn с помощью скрипта), чтобы записать его в файл.

 Смежные вопросы

  • Нет связанных вопросов^_^