Member 13958707 Ответов: 3

Как преобразовать данные из csv-файлов в SQL server?


There are multiple csv files in a folder named parent with data in it and those files have the same format. I need to extract data in the csv file and insert them into a sql server table named log.once data are inserted, the csv files should move into a folder named archive folder. if there is any file in the parent folder where the extension is not csv, that file should move to another folder named error folder.
Table structure of sql server is as follows:
 name varchar (50),
 email varchar(100),
 address varchar(50)

Table structure in all the csv files are as follows:
name| email| address 


Что я уже пробовал:

Прежде всего я создал папку под названием files и внутри нее создал 3 папки в качестве родительской, куда включены все csv-файлы и файлы с другими расширениями, архивную папку и папку ошибок. В visual studio ssdt я использовал контейнер петли foreach в поток управления и добавил задачу потока данных внутри контейнера цикла foreach.Создал строковую переменную с именем filename без присвоения ей какого-либо значения.

Я отредактировал коллекцию контейнеров foreach loop с помощью следующих элементов:
путь к папке как E:\files\parent
Файлы как *.*
Перечислителей : перечислитель по каждому элементу файла

а отображение переменных в окне редактирования я использовал созданную переменную "FileName" в качестве переменной с индексом 0.

в потоке данных я использовал источник "плоский файл" и "назначение" OLE DB для. Чтобы сопоставить детали, я использовал OLEDB connection manager и сопоставил ему таблицу журнала, а в диспетчере соединений с плоскими файлами выбрал один файл из родительской папки, так как все csv-файлы имеют одинаковый формат.

В свойствах диспетчера соединений с плоскими файлами я дал строку подключения в свойство expression и установите его в созданную переменную "FileName".
Это выглядит следующим образом : Property :строка подключения , выражение :@[User::FileName].

При выполнении этого решения данные загружаются из источников плоских файлов в таблицу журнала.

3 Ответов

Рейтинг:
8

Member 13958707

Я добавил два контейнера цикла foreach. 1-й содержит задачу потока данных и подключен к компоненту задачи плоской файловой системы. Задача плоской файловой системы в 1 - м контейнере цикла foreach источник устанавливается в переменную, где путь к родительской папке присваивается значению, а назначение устанавливается в переменную, где путь к архивной папке присваивается ее значению. тип файла в контейнере 1-го цикла должен быть отредактирован как *.csv, в то время как контейнер 2-го цикла должен быть отредактирован как *.*.

Контейнер 2-го цикла содержит только задачу плоской файловой системы, в которой назначение задается переменной со значением error folder path, а источник-переменной с родительским путем к папке. 1-й цикл по каждому элементу подключен к 2-й цикл. Запуск этого пакета приведет к переносу всех файлов *.csv из родительской папки в архивную папку, и в то же время данные будут преобразованы в таблицу sql server. файлы с различными расширениями будут перемещены в папку ошибок.


Рейтинг:
22

Maciej Los

5ed!

phil.o

Спасибо :)

Member 13958707

Спасибо за решение, но я уже завершил часть извлечения данных и загрузки их на sql-сервер. Я хочу переместить файлы из родительской папки в архивную папку после завершения вставки данных.

phil.o

Это не ваш первоначальный вопрос. В любом случае, вы можете использовать системную задачу для перемещения файлов из одной папки в другую.
Перемещение файлов из папки в другую в SSIS - StackOverflow

Member 13958707

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

phil.o

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

Member 13958707

https://www.youtube.com/watch?v=YI2j4UaD2M8
Вот что я имел в виду, говоря о перемещении файлов из родительского каталога в архивную папку. Должно быть условие, при котором csv-файлы перемещаются в папку архива, а остальные файлы-в папку ошибки

phil.o

Внутри вашего цикла после импорта в базу данных назначьте две различные системные задачи: при успешном выполнении настройте задачу для перемещения текущего файла в архив; при сбое настройте вторую задачу для перемещения его в ошибку. Просто перетащите из вывода ошибки в конструкторе, чтобы настроить вторую задачу.
Обработка ошибок в службах SSIS

Рейтинг:
2

MarcusCole6833

Другой способ сделать это - с помощью мастера импорта-экспорта. Щелкните правой кнопкой мыши на БД, и появится задача got, а также импорт и экспорт.

Документация MSFT приведена ниже

Мастер Imp/exp:

Импорт и экспорт данных с помощью мастера импорта и экспорта SQL Server - SQL Server Integration Services (SSIS) | Microsoft Docs[^]


Плоский Файл Docs:
Подключение к источнику данных плоских файлов (мастер импорта и экспорта SQL Server) - SQL Server Integration Services (SSIS) | Microsoft Docs[^]


Member 13958707

Спасибо! Я попробовал путь, упомянутый во второй ссылке, которую вы разместили. Во всяком случае я опубликовал решение, с которым пришел, и оно отлично работает