Ошибка подключения к выводу источника плоского файла в SSIS

#ssis

#ssis

Вопрос:

У меня есть подключение к источнику плоского файла в SSIS. Я создал одно подключение к получателю плоского файла для вывода ошибки. Я подключил его с помощью красной стрелки. Проблема в том, что выходной файл с ошибкой создается, даже если в источнике плоского файла ошибки нет. «Ошибка назначения плоского файла» всегда становится зеленой, даже если ошибки нет. Как ее решить. Заранее спасибо

Ответ №1:

Вероятно, вы уже нашли решение. Я надеюсь, что это может помочь кому-то, кто ищет решение этой проблемы.

В SSIS нет встроенной настройки задачи потока данных, доступной для этого. Для достижения этой цели вы можете использовать Row Count преобразование внутри задачи потока данных в сочетании с File System Task в потоке управления.

Вот пошаговый процесс, показывающий, как это сделать. В этом примере я использовал CSV-файл с именем Country_State.csv , содержащий страны и штаты, в качестве исходного файла.

Сценарий:

Образец пакета прочитает файл, а затем выполнит запись в текстовый файл с именем Destination.txt . В этом сценарии файл с ошибкой Error.txt будет создан, но позже удален, если ошибок не будет. Здесь у меня есть файлы, сохраненные по пути c:temp

Пошаговый поток:

  1. В разделе диспетчер подключений создайте три соединения с плоским файлом, а именно с источником, назначением и ошибкой. Смотрите скриншот # 1.
  2. Source соединение должно указывать на путь к файлу csv c:tempCountry_State.csv . Содержимое этого файла смотрите на скриншоте # 2.
  3. Destination соединение должно указывать на текстовый файл с именем c:tempDestination.txt .
  4. Error соединение должно указывать на текстовый файл с именем c:tempError.txt .
  5. Создайте переменную типа данных Int32 с именем ErrorCount .
  6. На вкладке Поток управления поместите Data Flow Task , а затем поместите File System Task .
  7. Подключите задачу потока данных к задаче файловой системы.
  8. Щелкните правой кнопкой мыши на соединителе между задачей потока данных и задачей файловой системы.
  9. В редакторе ограничений приоритета измените операцию вычисления на Expression и вставьте значение @ErrorCount == 0 в текстовое поле Выражение.
  10. Ваш поток управления должен выглядеть так, как показано на скриншоте # 3.
  11. Внутри задачи поток данных на вкладке поток данных перетащите источник плоского файла и настройте его для использования Source диспетчера подключений.
  12. Укажите место назначения плоского файла и настройте его для использования Destination диспетчера соединений.
  13. Подключите зеленую стрелку вывода из источника плоского файла к месту назначения плоского файла.
  14. Поместите Row Count преобразование на вкладку поток данных и настройте его на использование переменной User:ErrorCount .
  15. Подключите красную стрелку вывода из источника плоского файла к преобразованию количества строк.
  16. Укажите место назначения плоского файла и настройте его для использования Error диспетчера соединений.
  17. Подключите выходные данные из Row Count к месту назначения плоского файла с помощью Error подключения.
  18. Ваша задача потока данных должна выглядеть так, как показано на скриншоте # 4.
  19. На вкладке Поток управления дважды щелкните задачу файловой системы.
  20. В редакторе задач файловой системы задайте для операции значение Delete file и установите для SourceConnection значение Error . Смотрите скриншот # 5.
  21. Содержимое пути к папке C:temp перед выполнением пакета показано на скриншоте #6.
  22. Выполнение вкладки потока данных показано на скриншоте #7.
  23. Выполнение потока управления показано на скриншоте #8.
  24. Содержимое пути к папке C:temp после выполнения пакета показано на скриншоте #9.
  25. Чтобы показать, что это действительно работает, я изменил второй столбец в Source диспетчере соединений на integer (хотя имена состояний являются строками), чтобы задача потока данных перенаправлялась на Error вывод.
  26. Сценарий 2 выполнения вкладки потока данных показан на скриншоте #10.
  27. Сценарий 2 выполнения потока управления показан на скриншоте #11. Обратите внимание, что задача файловой системы не выполняется, поскольку файл ошибки не пуст.
  28. Содержимое пути к папке C:temp после выполнения пакета по сценарию 2 показано на скриншоте #12. Обратите внимание, что файл Destination.txt присутствует, даже если не было ни одной успешной строки. Это связано с тем, что в примере удаляется только файл ошибки, если он пуст.

Аналогичная логика может быть использована для удаления пустого файла назначения.

Надеюсь, это поможет.

Снимок экрана # 1:

1

Снимок экрана # 2:

2

Снимок экрана # 3:

3

Снимок экрана # 4:

4

Снимок экрана # 5:

5

Снимок экрана # 6:

6

Снимок экрана # 7:

7

Снимок экрана # 8:

8

Снимок экрана # 9:

9

Снимок экрана # 10:

10

Снимок экрана # 11:

11

Снимок экрана # 12:

12