Добавить данные из другого объекта в пакете служб SSIS, чтобы заполнить поле для таблицы - PullRequest
0 голосов
/ 27 ноября 2018

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

У меня есть пакет служб SSIS, который использует powershell для загрузки общедоступного zip-файла, а именно executeсценарий для распаковки с помощью 7zip, а затем потоки данных для загрузки разархивированных файлов в соответствующие таблицы.

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

Как динамически хранить информацию такого типа как часть пакета?Производные столбцы?Но каков вклад?Спасибо!

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

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

  • Добавьте контейнер цикла по каждому элементу.На панели «Коллекция» свойство «Папка» может быть задано как с помощью графического интерфейса, так и с помощью параметра или переменной с выражением Directory.Поиск по подпапкам также можно установить, установив флажок «Переместить подпапки» или используя выражение Recurse, например, поле «Папка».
  • В поле «Файлы» будут указаны файлы, которые будут использоваться, и могут использоваться символы подстановки.* будет соответствовать любому количеству символов.Например, *.csv получит все файлы csv независимо от имени, а Test*.txt вернет все файлы .txt с именами, начинающими тестирование, независимо от того, сколько или какие символы следуют.Чтобы ограничить это одним символом, используйте ?.Выражение FileSpec позволит установить его динамически аналогично каталогу по переменной или параметру.
  • На панели «Сопоставление переменных» можно задать переменную для хранения имени файла из каталога.Для сопоставления добавьте переменную, которая будет содержать имя файла в индексе 0.
  • Вы указали, что хотите сохранить имя файла.Подробно об этом можно узнать из поля «Получить имя файла» в окне «Коллекция».Как следует из их имен, Fully Qualified будет содержать полный путь к файлу, Name and Extension вернет имя файла с расширением, а Name Only - это просто имя файла.
  • Что касается других аспектов файла,Я бы порекомендовал использовать для этого Script Task для большей функциональностиКласс C # FileInfo предоставляет параметры для поиска сведений о файле, таких как дата создания, последний раз, когда к файлу обращались, и когда файл был последний раз записан.Дополнительную информацию об этом можно найти здесь .
  • Для подсчета записей из файла вам необходимо создать диспетчер подключений для этого и работать с данными в пакете.Я предполагаю, что это плоские файлы?Если это так, создание диспетчера соединений с плоскими файлами и установка той же переменной на панели «Переменные переменных» цикла «цикл по каждому элементу» в выражение ConnectionString диспетчера подключений позволит вам динамически проходить по каждому файлу.Убедитесь, что для поля «Получить имя файла» используется опция Fully Qualified, как и ранее, если вы решите сделать это.Также необходимо заранее настроить правильные столбцы и типы данных для диспетчера подключений.Этот же процесс может быть выполнен для файлов Excel, однако вместо выражения будет использоваться переменная с именем файла в выражении ExcelFilePath.
  • Что касается хранения информации о файле в таблице журнала, существует множествовариантов для этого.Ниже приведен очень простой пример оператора вставки в задаче «Выполнение SQL», помещенного в цикл «цикл по каждому элементу».Имя таблицы из 3 частей необходимо только в том случае, если вы используете таблицу, которая отличается от исходного каталога диспетчера подключений.? - маркер параметра (при условии, что это соединение OLE DB).После этого сопоставьте ту же переменную / параметр, в которой хранится имя файла, с помощью панели сопоставления параметров.Установите направление на Ввод, соответствующий тип данных (вероятно, VARCHAR / NVARCHAR), 0 в поле Имя параметра, чтобы указать, что это первый параметр в операторе SQL (дополнительные ? могут использоваться для последующих параметров вОператор SQL, затем увеличьте это поле в соответствии с), и размер параметра по умолчанию можно оставить равным -1.Опять же, это простой пример, и вы, вероятно, захотите сохранить больше информации о файлах и их содержимом, но это может помочь вам начать.

Образец вставки SQL:

INSERT INTO YourDataBase.YourSchema.YourTable (ColumnToHoldFileName)
VALUES (?)
0 голосов
/ 27 ноября 2018

понял это по просмотру других постов.Мне пришлось расширить размер параметра ... легко исправить!

0 голосов
/ 27 ноября 2018

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

...