Проверить наличие нескольких файлов - PullRequest
0 голосов
/ 08 декабря 2011

Хорошо, я постараюсь объяснить как можно лучше ... Довольно частный случай.

Инструменты: SSIS 2008

У нас есть поток управления, который теперь должен запускаться событием: наличием одного или нескольких файлов. (1,2 или 3)

Используемые переменные:

BO_FileLocation_1
BO_FileLocation_2
BO_FileLocation_3
BO_FileName_1
BO_FileName_2
BO_FileName_3

Может быть один, два или три файла: определенные в переменных выше. Когда они заполнены, они должны быть обработаны. Когда они пусты, это означает, что есть только один файл, процесс должен игнорировать их и переходить к следующей задаче (наблюдатель файла?). Например:

BO_FileLocation_1= "C:\"
BO_FileLocation_2 NULL
BO_FileLocation_3 NULL
BO_FileName_1= "test.csv"
BO_FileName_2 NULL
BO_FileName_3 NULL

Для отчета нужен только один файл.

Мне нужна общая концепция, которая проверяет наличие этих файлов, она может быть более общей, чем мои знания служб SSIS, которые могут обрабатывать сейчас. Например, удобно, когда в будущем появится 4-й файл. Я также думал о том, чтобы поработать с одним скриптом, чтобы справиться со всей логикой.

Заранее спасибо

Возможно нерелевантное изображение: enter image description here

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Есть несколько возможных решений:

  1. Создайте контейнер последовательности и включите все импорты файлов в контейнер последовательности. Добавьте переменные int для RowCountFile1, RowCountFile2 и RowCountFile3 и установите значение 0 (это значение по умолчанию при создании переменной int). Добавьте преобразование RowCount в каждый из потоков данных. Создайте ограничение приоритета из контейнера последовательности для задачи «Сделать что-то». Установите ограничение приоритета на успех и выражение. Установите значение выражения в @ RowCountFile1> 0 || @ RowCountFile2> 0 || @ RowCountFile3> 0. Преимущество этого подхода заключается в том, что вы можете предпринять действие, как только файлы будут обнаружены, вы импортируете все доступные файлы и выполняете действие только после того, как все файлы были импортированы. Затем можно запланировать запуск этого пакета служб SSIS в качестве шага задания агента SQL Server и запускать его так часто, как вы хотите.

  2. Вариант решения 1 заключается в использовании для каждого контейнера перечислителя файлов внутри контейнера последовательности. Это было бы полезно, если вы не знаете точного имени файла и в некоторых случаях планируете импортировать более одного файла. Например, если вы получаете файл каждые несколько минут с отметкой времени в имени файла, и ваш процесс по какой-то причине не запускается, то вам, возможно, придется обрабатывать несколько файлов, чтобы их поймать, а затем предпринять действие, как только оно будет сделал.

  3. Вы можете использовать задачу просмотра файлов, как вы указали в своем вопросе. Единственная проблема, с которой я сталкиваюсь с задачей наблюдения за файлами, заключается в том, что пакет должен находиться в постоянно работающем состоянии. Это затрудняет устранение неполадок и производительность. Это также может привести к другим проблемам, поскольку я помню, что у меня были проблемы с задачей наблюдения за файлами много лет назад, когда она только появилась. Это может быть вполне стабильная задача сейчас, но я предпочитаю другие методы, а не после того, как была сожжена ранее. Если вы действительно хотите, чтобы пакет выполнялся непрерывно, а не вызывался заданием, тогда вы всегда можете использовать задачу сценария для проверки файла, спящего потока, если он не найден, проверки еще раз и т. Д. Я уверен, что это то, что Задача File Watcher выполняет, но я бы доверял своему C # над этой задачей. Сила для любого, кто имел лучший опыт, чем я с File Watcher ...

  4. Использовать PowerShell. Если вы просто хотите выполнить действие, если файл появляется и вы не импортируете данные, тогда сценарий PowerShell может сделать это так же, как пакет SSIS. Недостатком является то, что вам нужно изучить некоторые базовые PowerShell, в будущем это может быть трудно поддерживать, так как PowerShell, вероятно, не является вашим основным языком, и вам, возможно, придется переписать код снова в пакет служб SSIS, если вы хотите импортировать данные. Вероятно, вы вызовете сценарий PowerShell с шага задания агента SQL Server, поэтому планирование может быть выполнено довольно легко.

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

1 голос
/ 09 декабря 2011

Если все, что вам нужно, это вызвать Copy Source File to handle, если присутствует один или несколько файлов, просто используйте ограничение OR в вашем потоке. На следующем рисунке показано, как:

Сначала подключите все к месту назначения: Original layout

Затем нажмите одну из зеленых стрелок. Это сделает окно его свойств всплывающим. Выберите Logical OR вместо Logical AND: precedence constraint properties

Если все прошло хорошо, теперь вы должны увидеть соединения в виде пунктирных линий:

final look

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