Как импортировать плоский файл фиксированной ширины в базу данных с помощью SSIS? - программирование
Подтвердить что ты не робот

Как импортировать плоский файл фиксированной ширины в базу данных с помощью SSIS?

Есть ли у кого-нибудь учебник по тому, как импортировать плоский файл фиксированной ширины в базу данных с помощью пакета SSIS?

У меня есть плоский файл, содержащий столбцы с различной длиной.

Column name    Width
-----------    -----
First name        25
Last name         25
Id                 9
Date               8

Как преобразовать плоский файл в столбцы?

4b9b3361

Ответ 1

Вот пример пакета, созданного с использованием SSIS 2008 R2, который объясняет, как импортировать плоский файл в таблицу базы данных.

  • Создайте плоский файл фиксированной ширины с именем Fixed_Width_File.txt с данными, как показано на скриншоте. Снимок экрана использует Notepad ++ для отображения содержимого файла. Он имеет возможность показывать специальные символы, такие как возврат каретки и подача строки. CR LF обозначает разделители строк Возврат каретки и Линейный канал.

Flat file data

  • В базе данных SQL Server создайте таблицу с именем dbo.FlatFile с помощью create script, предоставленной в разделе SQL Scripts.

  • Создайте новый пакет SSIS и добавьте новый диспетчер соединений OLE DB, который будет подключаться к базе данных SQL Server. Предположим, что диспетчер соединений OLE DB назван SQLServer.

Connection manager

  • На вкладке потока управления пакетами поместите задачу потока данных.

Data flow task

  • Дважды щелкните задачу потока данных, и вы перейдете на вкладку потока данных. На вкладке потока данных разместите файл с плоским файлом. Дважды щелкните файл с плоским файлом и появится редактор исходного файла Flat. Нажмите кнопку "Создать", чтобы открыть редактор диспетчера подключений плоских файлов.

  • В разделе "Общие" редактора исходного файла плоского файла введите значение в имени диспетчера подключений (например, "Источник" ) и перейдите к местоположению плоского файла и выберите файл. В этом примере используется образец файла в пути C:\temp\Fixed_Width_File.txt Если у вас есть строки заголовков в вашем файле, вы можете ввести значение 1 в строках заголовка, чтобы пропустить текстовое поле, чтобы пропустить строку заголовка.

Flat file connection manager editor General

  • Нажмите на раздел "Столбцы" . Измените шрифт в соответствии с вашим выбором. Я выбрал Courier New, чтобы я мог видеть больше данных с меньшей прокруткой. Введите значение 69 в текстовое поле ширины строки. Это значение представляет собой сумму ширины всех столбцов + 2 для разделителя строк. После того, как вы установили правильную ширину строки, вы должны правильно увидеть данные файла фиксированной ширины в разделе столбцов исходных данных. Теперь вы должны щелкнуть по соответствующим местоположениям, чтобы определить пределы столбцов. Обратите внимание на разделы 4, 5, 6 и снимок экрана ниже.

Flat file connection manager editor Columns

  • Нажмите "Дополнительно". Вы увидите пять столбцов, созданных для вас, автоматически на основе ограничений столбца, которые мы установили в разделе "Столбцы" на предыдущем шаге. Пятый столбец предназначен для разделителя строк.

Flat file connection manager editor Advanced

  • Переименуйте имена столбцов как FirstName, LastName, Id, Date и RowDelimiter

Flat file connection manager editor Advanced Renamed

  • По умолчанию столбцы будут установлены с строкой DataType [DT_STR]. Если мы достаточно уверены, что определенный столбец будет иметь другой тип данных, мы можем его настроить в разделе "Дополнительно". Мы будем менять столбец Id типа данных four-byte signed integer [DT_I4] и столбца Date для типа данных date [DT_DATE]

Flat file connection manager editor Advanced Id column

Flat file connection manager editor Advanced Date column

  • Нажмите на раздел предварительного просмотра. Данные будут отображаться в соответствии с конфигурацией столбца.

Flat file connection manager editor Preview

  • Нажмите "ОК" в редакторе диспетчера соединений с плоскими файлами, а плоское соединение с файлом будет назначено на "Плоский файл" в задаче потока данных.

Flat file editor connection

  • В редакторе исходных файлов с плоским файлом щелкните раздел "Столбцы" . Вы увидите столбцы, которые были настроены в диспетчере соединений с плоскими файлами. Снимите флажок RowDelimiter, потому что нам это не понадобится.

<Т411 >

  • В задаче потока данных поместите OLE DB Destination. Подключите выход из файла Flat file к назначению OLE DB.

Data flow task

  • В редакторе назначения OLE DB выберите диспетчер соединений OLE DB с именем SQLServer и установите для имени таблицы или раскрывающегося списка значение [dbo].[FlatFile]

OLE DB Destination connection

  • В редакторе назначения OLE DB щелкните раздел "Сопоставления". Поскольку имена столбцов в диспетчере соединений с плоскими файлами совпадают с столбцами в базе данных, сопоставление происходит автоматически. Если имена разные, вам необходимо вручную сопоставить столбцы. Нажмите "ОК".

OLE DB Destination columns

  • Теперь пакет готов. Выполните пакет для загрузки плоских файлов фиксированной ширины в базу данных.

Package execution

  • Если вы запросите таблицу dbo.FlatFile в базе данных, вы увидите данные плоского файла, импортированные в базу данных.

Data imported into table

Этот образец должен дать вам представление о том, как импортировать плоский файл фиксированной ширины в базу данных. Он не объясняет, как обрабатывать ведение журнала ошибок, но это должно помочь вам начать работу и помочь вам обнаружить другие связанные с SSIS функции при игре с пакетами.

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

SQL Scripts

CREATE TABLE [dbo].[FlatFile](
    [Id] [int] NOT NULL,
    [FirstName] [varchar](25) NOT NULL,
    [LastName] [varchar](25) NOT NULL,
    [Date] [datetime] NOT NULL
)

Ответ 2

В преобразовании производного столбца вы можете использовать функцию SUBSTRING() для каждого столбца. Пример:

Столбцы DerivedColumn

FirstName SUBSTRING (данные, начало, длина);

Здесь FirstName имеет ширину 25, поэтому, если мы рассмотрим, что из 0-й позиции тогда в производном столбце вы должны указать ее, предоставив SUBSTRING (Data, 0, 25);

Аналогично для других столбцов.

Ответ 3

Очень хорошо объяснил, Шива! В вашем учебнике и отличных иллюстрациях указывается, что Microsoft должна была сделать ясно.

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

Без этих двух действий попытка выполнить импорт даст следующее сообщение об ошибке: Преобразование данных для столбца "Столбец x" возвращало значение статуса 4 и текст состояния "Текст был усечен или один или несколько символов не совпадали на целевой кодовой странице".

Я добавил этот текст ошибки в надежде, что кто-то найдет эту страницу, ища причину своей ошибки. Ваш турзал стоит найти, даже если после этого!