При работе с файлами данных в SQL Server Integration Services (SSIS) часто возникает необходимость обрабатывать файлы смешанного формата, содержащие несколько различных типов записей. Хотя идеально иметь плоский файл с одним типом записи, иногда разные типы записей объединяются в один файл. Это может усложнить системы, использующие эти гибридные файлы. В этой статье мы рассмотрим, как обрабатывать файлы смешанного формата данных в SSIS и представим шаблон проектирования для решения этой задачи.
Представим ситуацию, когда у нас есть файл данных, содержащий как записи о посещении пациентов больницы, так и медицинские процедуры, проводимые во время этих посещений. Эти два типа записей имеют различные структуры и цели. Записи о посещении больницы длиннее и помечены “V” в первом столбце, а записи о медицинских процедурах обозначаются “P”. Чтобы обработать этот файл смешанного формата данных в SSIS, нам нужно разделить эти типы записей и отправить их в разные выходы.
В старых версиях SSIS (2008 и 2008 R2) эта задача была проблематичной. Компонент источника плоского файла в этих версиях был жестко привязан к ожидаемому фиксированному количеству столбцов, определенных в менеджере подключений плоского файла. Это означало, что если запись имела меньшее количество столбцов, SSIS читал данные из следующей строки файла, чтобы удовлетворить ожидаемое количество столбцов. Однако, начиная с SSIS 2012, любые отсутствующие столбцы заполняются значениями NULL, что позволяет нам обрабатывать файлы смешанного формата данных без написания скриптов.
Для обработки файла смешанного формата данных нам нужно настроить менеджер подключений плоского файла с достаточным количеством метаданных столбцов для обработки формата файла с наибольшим количеством столбцов. В нашем примере записи о посещении больницы имеют 11 столбцов, в то время как записи о медицинских процедурах имеют только пять. Поэтому мы настраиваем менеджер подключений плоского файла с 11 столбцами, устанавливая тип данных каждого столбца для обработки наиболее широкого типа данных в любом типе строки для этого столбца.
После настройки менеджера подключений плоского файла мы можем использовать компонент источника плоского файла в потоке данных SSIS для загрузки обоих типов записей в конвейер данных. Чтобы разделить записи, мы можем использовать преобразование условного разделения на основе значения первого столбца. Записи о посещении (те, которые соответствуют [Column0] == “V”) отправляются в выход Visits, в то время как все остальные записи отправляются в выход по умолчанию с именем Procedures.
Каждый выход из условного разделения затем может быть сопоставлен с соответствующей целевой таблицей. Однако, поскольку мы использовали общие имена столбцов в менеджере подключений плоского файла, нам нужно вручную сопоставить эти общие имена столбцов с соответствующими столбцами выхода в целевой таблице.
Важно отметить, что этот шаблон обработки файлов смешанного формата данных работает только в SSIS 2012 и более поздних версиях. Для более старых версий использовался описанный в предыдущем сообщении метод с использованием скриптов.
В заключение, обработка файлов смешанного формата данных в SSIS может быть сложной задачей, но с правильным подходом можно эффективно разделять и обрабатывать разные типы записей. Путем правильной настройки менеджера подключений плоского файла и использования преобразований условного разделения мы можем обрабатывать файлы смешанного формата данных без необходимости написания скриптов. Этот подход упрощает процесс интеграции данных и повышает общую эффективность пакета SSIS.
Спасибо за чтение!
Автор: Ваше Имя