Не создавать файл, когда источник имеет 0 строк - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть ниже в области потока данных.Проблема, с которой я сталкиваюсь, заключается в том, что даже если результат равен 0, он все равно создает файл.

Кто-нибудь может увидеть, что я здесь делаю неправильно?

enter image description here

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Это довольно ожидаемое и известное раздражающее поведение.Служба SSIS создаст пустой плоский файл, даже если он не отмечен: «имена столбцов в первой строке данных».

Временные решения:

  • удаление такого файла файломсистемная задача, если @RowCountWriteOff = 0 сразу после выполнения потока данных.

  • в качестве альтернативы, не запускайте поток данных, если ожидаемое количество строк в источнике равно 0: enter image description here


Обновление 2019-02-11:

У меня проблема в том, что у меня 13они экспортируются в команды csv в потоке данных и являются дорогостоящими запросами

  • Тогда двойной запрос источника для проверки количества строк будет еще дороже и, возможно, лучше будет повторно использовать значениепеременной @ RowCountWriteOff.
  • Первоначальный проект имеет 13 потоков данных, добавляя 13 ограничений и 13 задач файловой системы, основной поток управления сделает пакет более сложным и сложным для обслуживания
  • Поэтому рекомендуется использоватьOnPostExecute обработчик событий, поэтому логика очистки изолированадля некоторого определенного потока данных:

enter image description here

0 голосов
/ 10 февраля 2019

Обновление 1 - добавление дополнительной информации на основе комментариев OP

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

  1. Сначала вы должны создать контейнер цикла по каждому элементу для циклического перемещения по таблицам
  2. Вы должны добавить Execute SQL Task с помощью команды подсчета SELECT COunt(*) FROM ....) и , чтобы сохранить Resultset в переменной
  3. Добавить задачу потока данных, которая импортирует данные изОт источника OLEDB до места назначения плоского файла.
  4. После этого необходимо добавить ограничение приоритета с выражением в задачу потока данных с выражением, аналогичным @[User::RowCount] > 0

Также полезно проверить предоставленные мной ссылки, поскольку они содержат много полезной информации и пошаговые руководства.


Первоначальный ответ

Предотвращение создания пустых плоских файлов службами SSIS - это распространенная проблема, в Интернете можно найти множество ссылок, предлагается множество обходных путей и множество методов, которые могут решить эту проблему:

  1. Попробуйтеустановите для свойства Data Flow Task Delay Validation значение True
  2. Создайте еще один Data Flow Task в пакете, который будет использоваться только для подсчета строк в источнике, если он больше 0, то значениеограничение приоритета должно приводить к другому Data Flow Task
  3. Добавить File System Task после Data Flow Task, который удаляет выходной файл, если RowCount равен o, вы должны установить выражение ограничения приоритета, чтобы убедиться, что.

Ссылки и полезные ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...