Как мне отформатировать значения dd-mmm-yy в плоском файле в smalldatetime во время импорта данных? - PullRequest
5 голосов
/ 26 августа 2011

У меня есть плоский файл, который импортируется в SQL Server через существующий пакет служб SSIS.Мне нужно внести изменения в пакет, чтобы разместить новое поле в плоском файле.Новое поле представляет собой поле даты в формате dd-mmm-yy (например, 25-AUG-11 ).Поле даты в плоском файле будет либо пустым (например, пробел / пробел), либо заполнено датой.У меня нет никакого контроля над форматом даты в плоском файле.

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

Я предлагал импортировать дату в виде строки в таблицу загрузки, а затем преобразовать в smalldatetime при получении данных из таблицы загрузки.Но есть ли другой возможный способ анализа формата даты dd-mmm-yy, чтобы загрузить это прямо в поле smalldatetime без необходимости использовать преобразование в smalldatetime из таблицы загрузки.Я не могу понять, как разобрать формат даты, особенно месяц.Любые предложения приветствуются.

Ответы [ 2 ]

7 голосов
/ 26 августа 2011

Вот пример, который может дать вам представление о том, что вы можете сделать.В идеале, в пакете служб SSIS или в любом задании ETL следует учитывать, что данные могут быть не совсем такими, какими вы хотели бы их видеть.Вы должны предпринять соответствующие шаги для обработки неверных или недействительных данных, которые могут появляться время от времени.Вот почему SSIS предлагает множество задач Transformation в Data Flow Task, которые вы можете использовать для очистки данных.

В вашем случае вы можете использовать преобразование Derived Column или преобразование Data conversionчтобы удовлетворить ваши требования.

Пример был создан в SSIS 2008 R2.В нем показано, как читать плоский файл, содержащий даты, и загружать его в таблицу SQL.

file

Я создал простую таблицу SQL для импорта данных плоского файла.

Table

В пакете служб SSIS у меня есть диспетчер соединений с SQL и один для плоского файла.Подключение плоского файла настроено, как показано ниже.

Connection

Flat file 1

Flat file 2

Flat file 3

В пакете служб SSIS я поместил задачу потока данных на вкладку «Поток управления».Внутри задачи «Поток данных» у меня есть источник плоских файлов, преобразование производного столбца и назначение OLE DB.Поскольку источник плоских файлов и назначение OLE DB просты, я оставлю их здесь.Производное преобразование создает новый столбец с выражением (DT_DBDATE)SmallDate.Обратите внимание, что вы можете также использовать преобразование преобразования данных, чтобы сделать то же самое.Этот новый столбец SmallDateTimeValue должен быть сопоставлен со столбцом базы данных в месте назначения OLE DB.

Derived column

Если выполнить этот пакет, произойдет сбой, поскольку не все значения в файле являются действительными,

Failed

Причина сбоя в вашем случае в том, что недопустимые данные вставляются непосредственно в таблицу.В вашем случае таблица выдаст исключение, что приведет к сбою пакета.В этом примере происходит сбой пакета, поскольку по умолчанию при преобразовании производного столбца происходит сбой компонента в случае возникновения ошибки.Итак, давайте разместим фиктивное преобразование для перенаправления строк ошибок.Мы сделаем многоадресное преобразование для этой цели.Это на самом деле ничего не сделает.В идеале следует перенаправить строки ошибок в другую таблицу, используя пункт назначения OLE DB или другой компонент назначения по вашему выбору, чтобы можно было проанализировать данные, которые вызывают ошибки.

Перетащите красную стрелку из преобразования «Производное» и подключите его кМногоадресное преобразование.Откроется диалоговое окно «Настройка вывода ошибок».Измените значения в столбце Ошибка и усечение с Компонент сбоя на Redirect row.Это перенаправит все строки ошибок в преобразование Multicast и не попадет в таблицы.

Configure Error output

Теперь, если мы выполним пакет, он будет успешно выполнен.Обратите внимание на количество строк, отображаемых в каждом направлении.

Success

Вот данные, которые попали в таблицу.Только 2 строки были действительны.Вы можете посмотреть на первый снимок экрана, на котором показаны данные в файле, и вы видите, что действительными были только 2 строки.

Надеюсь, что это даст вам идею реализовать ваше требование в пакете служб SSIS.

Table data

3 голосов
/ 26 августа 2011

Он должен загружаться прямо в поле SMALLDATETIME, как есть. Помните, что даты - это просто числа в SQL Server, которые представляются пользователю в желаемом формате даты / времени. Пакет служб SSIS должен читать 25-AUG-2011 просто как тип данных даты и без проблем вставлять его в поле SMALLDATETIME.

Был ли пакет выдал ошибку или что-то еще?

...