Как экспортировать плоский файл с разными строками с помощью SSIS?

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

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть древовидные таблицы Customer, Invoice и InvoiceRow со стандартными отношениями.

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

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

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

На выходе должно быть:

Customer  
Invoice  
Rows  
Customer  
Invoice  
Rows  
and so on
Это было полезно?

Решение

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

CustomerCols, InvoiceCols, RowCols

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

Видеть Создание пункта назначения с помощью компонента Script для получения дополнительной информации о назначении сценария.

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

Другие советы

Я бы не писал 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;

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top