Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
Andrey Blednykh
Member

Откуда:
Сообщений: 52
Доброго времени суток, уважаемые участники форума.

Прошу поделиться соображениями по следующему вопросу.
Необходимо преобразовать набор текстовых файлов из директории в таблицы базы данных MS SQL 2008 (имена таблиц - имена файлов, количество столбцов таблиц может различаться).
1. Создаю Foreach Loop Container.
2. С помощью Script Task делаю некоторые пребразования файлов (убираю ненужную информацию, устанавливаю разделители).
3. Создаю Flat File Connection и Соединение OLE DB.
4. Создаю Data Flow Task для которого пытаюсь связать Flat File Source и Ole DB Destination.

Как как связать Flat File Connection и Data Flow Task, в случае когда имя файла переменная?
Каким образом в Ole DB Destination реализовать динамическое создание таблиц?
1 сен 11, 13:45    [11212201]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
Andrey Blednykh
Как как связать Flat File Connection и Data Flow Task, в случае когда имя файла переменная?
Каким образом в Ole DB Destination реализовать динамическое создание таблиц?
Если структура файлов (таблиц) разная, то не получится.

Прогу придётся писать. Или перейти на старый DTS :-)
1 сен 11, 13:49    [11212245]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
alexeyvg
Если структура файлов (таблиц) разная, то не получится.
Отчего же?
Если пользовать только Data Flow Task, то да, не получится.
А если через Execute SQL Task позвать BULK INSERT, то почему бы и нет, с некоторой долей изворотливости (чуть не сказал - извращения ).
1 сен 11, 14:09    [11212416]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3059
настраиваете все на реальных файле и таблице
потом вместо файла подставляете переменную
1 сен 11, 14:16    [11212470]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
tpg
Если пользовать только Data Flow Task, то да, не получится.
А если через Execute SQL Task позвать BULK INSERT, то почему бы и нет, с некоторой долей изворотливости (чуть не сказал - извращения ).
Нууу, это без SSIS

Для чего он тогда, для престижу? :-)

HandKot
настраиваете все на реальных файле и таблице
потом вместо файла подставляете переменную
Не сработает, если структура разная.
1 сен 11, 14:25    [11212573]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
Mgvlad
Member

Откуда: Минск
Сообщений: 97
Andrey Blednykh,

У нас это реализовано при помощи bulk_insert. Работает исключительно хорошо.
Data Flow не рекомендую - он удобен когда структура таблицы/файла не изменяется.

Если структура данных заранее неизвестна - только кодить. считаем колоночки и создаём табличку. Потом Bulk Insert в неё.
1 сен 11, 15:37    [11213338]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
Mgvlad
Member

Откуда: Минск
Сообщений: 97
alexeyvg
tpg
Если пользовать только Data Flow Task, то да, не получится.
А если через Execute SQL Task позвать BULK INSERT, то почему бы и нет, с некоторой долей изворотливости (чуть не сказал - извращения ).
Нууу, это без SSIS

Для чего он тогда, для престижу? :-)

Кстати, в SSIS есть и Bulk Insert Task:

К сообщению приложен файл. Размер - 15Kb
1 сен 11, 16:04    [11213652]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
Andrey Blednykh
Member

Откуда:
Сообщений: 52
Mgvlad,

К сожалению, если я не ошибаюсь, для Bulk Insert Task необходимо задавать вручную DestinationTable... а потому реализовать загрузку в несколько (названия, структура и количество определяются на основе файлов расположенных в директории) таблиц нельзя.
1 сен 11, 16:30    [11213950]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
Mgvlad
Member

Откуда: Минск
Сообщений: 97
Andrey Blednykh,

Совершенно верно, но там есть ещё выражения, при помощи которых можно много чего менять. В приведённом ниже примере я беру название целевой таблицы из глобальной переменной Variable. Foreach Loop Container пихает в глобальную переменную название таблицы, а внутри крутится BULK INSERT, который подхватывает имя.

К сообщению приложен файл. Размер - 49Kb
1 сен 11, 16:39    [11214038]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
Mgvlad
Member

Откуда: Минск
Сообщений: 97
Andrey Blednykh,

Такой подход будет классно работать если решать задачу:
Придёт несколько файлов у них будет вот такая, такая и такая структура. Их нужно загрузить в эту, эту и эту табличку соответственно.

Если задача стоит: Придёт несколько файлов с хз какой структурой, надо для них создать таблички и загрузить данные. в этом случае надо только кодить.
мы Ты такую задачу решали когда приходил файл с нестабильной структурой (пару колонок местами меняются в случайном порядке). так мы анализировали данные, и под файл пересоздавали табличку. Решали это всё в ScriptTaske. Уже год работает.
1 сен 11, 16:45    [11214105]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1981
Mgvlad,

а как в скрипте решался вопрос с определением типов данных столбцов?
1 сен 11, 16:55    [11214227]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
Mgvlad
Member

Откуда: Минск
Сообщений: 97
DaniilSeryi,

В описанном случае никак - два одинаковых текстовых поля просто менялись местами. Мы смотрели на данные и определяли по ним последовательность колонок.

Если учить скрипт подстраивать под структуру то варианта 2:
1. Грузить как varchar(max). Далее уже когда данные в таблице - пытаться как-то определить тип данных и размерность (isnumeric, isdate max(len()) и пр.). С данными лучше работать на стороне SQL - он для этого и рождён.
2. Делать что-то типа проверки данных в файле - в каждой колонке искать максимальное максимальную длину и делать поле аккурат под неё.

вот тут я приводил пример предварительной обработки файла перед вставкой. Почитайте, если что - спрашивайте.
1 сен 11, 17:17    [11214420]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
Andrey Blednykh
Member

Откуда:
Сообщений: 52
Mgvlad,

Да, я видел и пробовал заполнить выражение вместо параметра DestinationTable однако компонент "требует" заполнения именно параметра DestinationTable, работа без заполненного значения невозможна. А вы пробовали использовать Bulk Insert Task, так как я описываю? Может я делаю что то не так?
1 сен 11, 17:55    [11214697]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
Mgvlad
Member

Откуда: Минск
Сообщений: 97
Andrey Blednykh,

Можно подставить любую таблицу в базе. Во время выполнения она всё равно заменится значением из переменной.
1 сен 11, 18:02    [11214743]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
Mgvlad
Member

Откуда: Минск
Сообщений: 97
Andrey Blednykh,
Именно в такой связке foreach + Bulk Insert Task не использовал. Стараемся через ScriptTaskи всё делать.
пару постов выше я приводил ссылку на код, который решает вашу задачу (после некоторой доработки).
1 сен 11, 18:13    [11214804]     Ответить | Цитировать Сообщить модератору
 Re: SSIS. Загрузка данных из текстовых файлов в таблицы.  [new]
Andrey Blednykh
Member

Откуда:
Сообщений: 52
Благодарю всех за участие в обсуждении вопроса!
2 сен 11, 07:26    [11215956]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить