![](https://habrastorage.org/web/128/5b7/4dc/1285b74dc03b4bd48c84d1894b2c5812.png)
> Часть 2
> Часть 3
SSIS – это инструмент, который позволяет в удобном виде реализовать интеграцию, т.е. реализовать процесс переноса данных из одного источника в другой. Этот процесс иногда называют ETL (от англ. Extract, Transform, Load – дословно «извлечение, преобразование, загрузка»).
Думаю, данный практический курс будет полезен тем, кто хочет изучить SSIS и не знает с чего начать. Здесь в режиме Step By Step мы начнем с самого начала, т.е. установки всего необходимого.
Дальше будет очень много картинок!
Необходимые инструменты для изучения SSIS
В данной статье SSIS будет рассматриваться на примере SQL Server 2014 Developer Edition. Службы Integration Services доступны в SQL Server 2014 начиная с редакции Standard.
Дополнительно необходимо будет скачать и установить инструмент разработчика SQL Server Data Tools (SSDT).
SSDT – это расширение для Visual Studio, которое позволит создавать проекты необходимого нам типа.
Для облегчения процесса установки, я воспользуюсь SSDT для Visual Studio 2012 (VS2012), его можно скачать по ссылке (файл «SSDTBI_VS2012_x86_ENU.exe»):
www.microsoft.com/en-US/download/details.aspx?id=36843
По описанию, данная версия SSDT поддерживает следующие версии SQL Server: SQL Server 2014, SQL Server 2012, SQL Server 2008 и 2008 R2.
Если на вашем компьютере не установлен VS данной версии, то установщик SSDT установит минимальную версию оболочки, которая позволит создавать проекты нужного нам типа.
Установка SQL Server и SSDT
Первым делом установим SQL Server со всеми необходимыми компонентами.
Я все устанавливал на чистую Windows 7 SP 1 (x64), ничего дополнительного кроме указанного ниже устанавливать не придется.
Т.к. курс предназначен для начинающих, то распишу весь процесс установки подробно.
Запускаем установочный файл SQL Server 2014:
![](https://habrastorage.org/web/ae0/be7/1d6/ae0be71d6e3a4c8784a790767cfe81d6.png)
![](https://habrastorage.org/web/63a/e4b/9b7/63ae4b9b75154d4ea1b9aaac0dcd954a.png)
Для работы SSIS достаточно будет выбрать следующие компоненты:
![](https://habrastorage.org/web/282/f06/e32/282f06e32c43475d8448e6475737b4eb.png)
Т.к. мне в дальнейшем понадобится Analysis Services (SSAS), то я отметил и его, если он вам не нужен вы можете не выбирать данный компонент.
У меня нет других установленных SQL Server, и я сделаю этот экземпляр используемым по умолчанию:
![](https://habrastorage.org/web/1d0/716/bf3/1d0716bf3b974b498c4227067dae5977.png)
Сделаю, чтобы SQL Agent запускался автоматически:
![](https://habrastorage.org/web/31f/bbf/1f1/31fbbf1f186942faaf207f05fd7ed383.png)
При необходимости можно изменить Collation, который будет использоваться по умолчанию:
![](https://habrastorage.org/web/947/1db/1b4/9471db1b4fdd4670a5b0f8ae562c48b8.png)
Установлю смешанный режим аутентификации, указав свой пароль для пользователя sa:
![](https://habrastorage.org/web/43e/490/100/43e490100adb455787648397bab585e5.png)
Т.к. я еще выбрал Analysis Services, то делаю настройки для него:
![](https://habrastorage.org/web/f4a/26a/053/f4a26a05353a4450a780b7d477db4fba.png)
Нажимая Next и Install запускаем установку SQL Server и его компонент.
Так как у меня на компьютере всего один диск, то все директории я оставил по умолчанию, при необходимости вы можете изменить их на более удобные.
Следующим шагом установим SSDT – это расширение для Visual Studio, которое даст нам возможность создавать проекты SSIS. Установщик SSDT ставит минимальную версию оболочки VS, поэтому предварительно устанавливать VS отдельно нет надобности.
Запускаем «SSDTBI_VS2012_x86_ENU.exe», и добравшись до следующего шага выбираем следующий пункт:
![](https://habrastorage.org/web/f6a/f0e/c1c/f6af0ec1c6744118ab7fa643e0791103.png)
Нажимая Next запускаем установку.
После завершения установки на всякий случай перезагружаем компьютер.
Это все, что нам понадобится для изучения SSIS.
Создание демонстрационных баз данных
Запустим SQL Server Management Studio (SSMS) и при помощи скрипта создадим 3 базы данных – первые две (DemoSSIS_SourceA и DemoSSIS_SourceB) будут выступать в роли источников данных, а третья (DemoSSIS_Target) в роли получателя данных:
-- первая БД выступающая в роли источника данных
CREATE DATABASE DemoSSIS_SourceA
GO
ALTER DATABASE DemoSSIS_SourceA SET RECOVERY SIMPLE
GO
-- вторая БД выступающая в роли источника данных
CREATE DATABASE DemoSSIS_SourceB
GO
ALTER DATABASE DemoSSIS_SourceB SET RECOVERY SIMPLE
GO
-- БД выступающая в роли получателя данных
CREATE DATABASE DemoSSIS_Target
GO
ALTER DATABASE DemoSSIS_Target SET RECOVERY SIMPLE
GO
В базах источниках создадим тестовые таблицы и наполним их тестовыми данными:
USE DemoSSIS_SourceA
GO
-- продукты из источника A
CREATE TABLE Products(
ID int NOT NULL IDENTITY,
Title nvarchar(50) NOT NULL,
Price money,
CONSTRAINT PK_Products PRIMARY KEY(ID)
)
GO
-- наполняем таблицу тестовыми данными
SET IDENTITY_INSERT Products ON
INSERT Products(ID,Title,Price)VALUES
(1,N'Клей',20),
(2,N'Корректор',NULL),
(3,N'Скотч',100),
(4,N'Стикеры',80),
(5,N'Скрепки',25)
SET IDENTITY_INSERT Products OFF
GO
USE DemoSSIS_SourceB
GO
-- продукты из источника B
CREATE TABLE Products(
ID int NOT NULL IDENTITY,
Title nvarchar(50) NOT NULL,
Price money,
CONSTRAINT PK_Products PRIMARY KEY(ID)
)
GO
-- наполняем таблицу тестовыми данными
SET IDENTITY_INSERT Products ON
INSERT Products(ID,Title,Price)VALUES
(1,N'Ножницы',200),
(2,N'Нож канцелярский',70),
(3,N'Дырокол',220),
(4,N'Степлер',150),
(5,N'Шариковая ручка',15)
SET IDENTITY_INSERT Products OFF
GO
Создадим таблицу в принимающей базе:
USE DemoSSIS_Target
GO
-- принимающая таблица
CREATE TABLE Products(
ID int NOT NULL IDENTITY,
Title nvarchar(50) NOT NULL,
Price money,
SourceID char(1) NOT NULL, -- используется для идентификации источника
SourceProductID int NOT NULL, -- ID в источнике
CONSTRAINT PK_Products PRIMARY KEY(ID),
CONSTRAINT UK_Products UNIQUE(SourceID,SourceProductID),
CONSTRAINT CK_Products_SourceID CHECK(SourceID IN('A','B'))
)
GO
Создание SSIS проекта
Запустим Visual Studio 2012 и выберем один из видов предлагаемой нам настройки среды, так здесь же я откажусь от локальной документации:
![](https://habrastorage.org/web/067/73c/ea6/06773cea60de45e6a4a607795188d08b.png)
Создадим новый проект (File -> New -> Project…):
![](https://habrastorage.org/web/f8e/83a/91e/f8e83a91ea9a4b7dbb2cadd367158622.png)
Для последующего облегчения развертывания зайдем в свойства проекта и изменим опцию ProtectionLevel на DontSaveSensitive:
![](https://habrastorage.org/web/cdd/9ff/2a3/cdd9ff2a3eab4656988eb2d122265ade.png)
То же самое сделаем в свойствах пакета, который создался по умолчанию:
![](https://habrastorage.org/web/b5f/a50/3da/b5fa503dae674e648b26b8e9629e92eb.png)
Для всех новых пакетов данное свойство будет заполняться значением из свойства проекта.
Создадим соединения:
![](https://habrastorage.org/web/4f0/f8b/f8f/4f0f8bf8f293480fa268d70ead94ad6b.png)
![](https://habrastorage.org/web/d94/5a3/1f0/d945a31f09344fd2b61ce1fc23d21f63.png)
![](https://habrastorage.org/web/a9d/938/a5d/a9d938a5dfcb4c2cb725653d95a58acf.png)
Заполняем параметры соединение с БД:
![](https://habrastorage.org/web/709/170/713/709170713c3548f5bb4b6a7696cf2a48.png)
Боевые параметры соединения в дальнейшем можно будет настроить при создании задачи SQL Server Agent.
![](https://habrastorage.org/web/f0e/1db/1d8/f0e1db1d8a02477d90a544b926ac4d18.png)
Для удобства я переименую название соединения на SourceA:
![](https://habrastorage.org/web/7a7/817/3d0/7a78173d01dd447da9e2218650a89dc8.png)
Таким же образом создадим и переименуем соединения для баз DemoSSIS_SourceB и DemoSSIS_Target:
![](https://habrastorage.org/web/1f6/a26/ed1/1f6a26ed1ebd4e9398a967c529e59f24.png)
Переименуем пакет, созданный по умолчанию, в «LoadProducts.dtsx»:
![](https://habrastorage.org/web/142/e34/d19/142e34d19bf54f859f8ce2f744321421.png)
Сначала напишем простую логику, которая будет полностью очищать таблицу Products в базе DemoSSIS_Target и снова загружать в нее данные из двух баз данных DemoSSIS_SourceA и DemoSSIS_SourceB.
Для очистки воспользуемся компонентом «Execute SQL Task», который мы при помощи мыши создадим в области «Control Flow»:
![](https://habrastorage.org/web/74a/6ae/05a/74a6ae05ac14468c9e5a7a0f5efddb15.png)
Для наглядности можно переименовать название компонент. Зададим ему имя «Delete All Products From Target»:
![](https://habrastorage.org/web/422/107/097/422107097793423295c4db02df0b9a8d.png)
Для этой цели используется свойство Name.
Дважды щелкнем на этом элементе и пропишем следующие свойства:
![](https://habrastorage.org/web/001/17c/2d4/00117c2d4f4a43baa56a8a0d06254273.png)
Т.к. TSQL команда «TRUNCATE TABLE Products» ничего не возвращает оставим свойства ResultSet равным None.
В дальнейшем мы рассмотрим, как пользоваться параметрами и каким образом можно воспользоваться результатом выполнения команды, записанной в SQLStatement, а пока попытаемся увидеть всю картину как это работает в целом.
Теперь скинем в область «Control Flow» компонент «Data Flow Task» и переименуем его в «Load Products From Source A», а также протянем к этому компоненту зеленную стрелку от «Delete All Products From Target»:
![](https://habrastorage.org/web/9fe/c77/ab6/9fec77ab6cab4b339a933116bf932e98.png)
Таким образом мы создали цепочку, которая будет выполняться последовательно.
Щелкнув дважды на «Load Products From Source A» мы попадаем в область «Data Flow» этого элемента.
Data Flow Task – это сложный компонент, который имеет свою область, в которой создаются вложенные элементы для работы с потоком данных.
Скинем в эту область компонент «Source Assistant»:
![](https://habrastorage.org/web/289/073/ce0/289073ce02af4854892f2ff9e4c509a9.png)
![](https://habrastorage.org/web/41c/41b/3be/41c41b3be2044e659407df63fc2e352d.png)
Этот компонент отвечает за получение данных из источника. Дважды щелкнув по нему, мы сможем настроить его:
![](https://habrastorage.org/web/50f/77f/297/50f77f2978354379bbfb9df2b8aaa6d9.png)
Пока воспользуемся режимом «Data access mode» равным «Table or view». Это приведет к получению всех строк из таблицы Products. Посмотреть данные можно нажав на «Preview…».
На закладке Columns мы можем выбрать только необходимые нам колонки и при необходимости переименовать их прописав новое имя в колонке «Output Columns»:
![](https://habrastorage.org/web/fcf/e10/560/fcfe105600944f65a59af5d52555ac05.png)
Для получателя нужна еще одна дополнительная колонка SourceID, добавим ее к выходному набору при помощи компонента «Derived Column», который переименуем в «Add SourceID», так же протянем синюю стрелку к данному элементу от «OLE DB Source»:
![](https://habrastorage.org/web/d97/f19/8dd/d97f198dd7e94703ba55081ae7592bb2.png)
Дважды щелкнем по элементу «Add SourceID» и пропишем значение «A» в виде константы:
![](https://habrastorage.org/web/f85/079/65b/f8507965b2124b4fb7c16d368095b5da.png)
Здесь я воспользовался функцией преобразования типа (DT_STR,1,1251) для того чтобы превратить Unicode строку в ANSI.
Теперь создадим компонент «Destination Assistant»:
![](https://habrastorage.org/web/807/eb6/fad/807eb6fad66c4c39bc26cb6c545f2f2d.png)
Направим в него поток от «Add SourceID»:
![](https://habrastorage.org/web/645/256/ec5/645256ec584e46d9a8bcb37aa0b5917b.png)
Дважды щелкнем по «OLE DB Destination» и произведем настройки:
![](https://habrastorage.org/web/9c1/6ba/b27/9c16bab27e3849d3a0bf0134a781919e.png)
Здесь мы показываем в какую таблицу будет записываться полученный набор.
«Keep identity» используется в случае если в принимающей таблице есть поле с флагом IDENTITY и мы хотим, чтобы значения в него тоже записывались из источника (это аналогично включению опции SET IDENTITY_INSERT Products ON).
Перейдя на закладку Mappings осуществим привязку полей источника с полями получателя:
![](https://habrastorage.org/web/dbb/12a/4a7/dbb12a4a74e94d0997b30c242c82d199.png)
Так как у нас поля источника и приемника именуются одинаково, то привязка осуществилась автоматически.
Можем протестировать работу пакета и убедиться, что данные залились в таблицу Products базы DemoSSIS_Target.
Запускаем пакет на выполнение из Visual Studio нажав Start или клавишу F5:
![](https://habrastorage.org/web/1ef/16e/361/1ef16e361a1244529f54c25413d59b60.png)
Так же пакет можно выполнить, воспользовавшись командой из контекстного меню:
![](https://habrastorage.org/web/df5/6b9/626/df56b9626cfc470f80306835e34bc0c5.png)
При помощи «Set as StartUp Object» можно задать пакет, который будет запускаться по нажатию на Start (F5).
Какой пакет будет запускаться при нажатии на Start (F5) можно переопределить в свойствах проекта:
![](https://habrastorage.org/web/684/353/33b/68435333b7f54696905d363308789159.png)
По умолчанию будет запускаться пакет открытый в текущий момент, об этом говорит значение StartObjectID равное <Active Package>.
Запустив проект мы должны увидеть следующую картину:
![](https://habrastorage.org/web/c4a/cc9/cc4/c4acc9cc4c324c8bab6cc364c258b7cb.png)
Пакет выполнился без ошибок, о чем говорит зеленый значок и текст в нижней части.
В случае наличия ошибок их можно будет увидеть вкладке Progress.
Нажмем на ссылку «Package execution completed…» или на кнопку «Stop Debugging» расположенную на панели инструментов для остановки выполнения пакета.
![](https://habrastorage.org/web/39d/de0/fef/39dde0fefd6e494abb62424cd31d92ff.png)
Выполним запрос:
USE DemoSSIS_Target
GO
SELECT *
FROM Products
И убедимся, что данные были записаны в принимающую таблицу.
Перейдем в область «Control Flow» и создадим еще один компонент «Data Task Flow», который назовем «Load Products From Source B», протянем на него зеленную стрелку от «Load Products From Source A»:
![](https://habrastorage.org/web/b83/369/f4a/b83369f4a95541baae97c9b4b3326e2c.png)
Двойным щелчком зайдем в область «Data Flow» этого элемента и создадим «Source Assistant»:
![](https://habrastorage.org/web/fba/bc8/829/fbabc882959d447cb04f0e26003f4537.png)
Дважды щелкнув на этом элементе, настроим его по-другому:
![](https://habrastorage.org/web/2b3/cb7/ad8/2b3cb7ad82784d7b917034db0792488e.png)
Выберем режим «SQL command» и пропишем следующий запрос:
SELECT
ID SourceProductID,
'B' SourceID,
Title,
Price
FROM Products
Дальше сразу создадим компонент «Destination Assistant» и протянем на него синюю стрелку от «OLE DB Source»:
![](https://habrastorage.org/web/b5c/4fe/4dc/b5c4fe4dca594e2c88930dadbed00ff5.png)
![](https://habrastorage.org/web/7f1/76d/8a6/7f176d8a6bec470c970719e5fb0c68c9.png)
Двойным щелчком зайдем в редуктор этого элемента и настроим его:
![](https://habrastorage.org/web/29c/60e/1e8/29c60e1e88c7481daf7839e70fb9198b.png)
![](https://habrastorage.org/web/fa5/2c3/e18/fa52c3e18ff94c079385bbfc2ca5d56e.png)
Запустим проект на выполнение и убедимся, что данные с двух источников попали в таблицу в базе Target:
USE DemoSSIS_Target
GO
SELECT *
FROM Products
![](https://habrastorage.org/web/c35/cde/0cb/c35cde0cb7c947f0a0702f106e476506.png)
Дополнительно в контекстном меню стрелки можно активизировать «Data Viewer»:
![](https://habrastorage.org/web/bf5/3e5/1bd/bf53e51bd68c45a1880ffb003562942a.png)
Теперь при запуске пакета на выполнение в этой точке будет сделана остановка и нам будут показаны данные этого потока:
![](https://habrastorage.org/web/017/cfe/638/017cfe638fb8410f85bab09098f16d2a.png)
Для продолжения выполнения пакета нужно нажать на кнопку со стрелкой или просто закрыть окно просмотра данных.
Для отключения этой функции в контекстном меню стрелки выбираем «Disable Date Viewer»:
![](https://habrastorage.org/web/a51/192/6c7/a511926c7c1e4c6abf0dfd9101ff9ae8.png)
Для первой части думаю этого будет достаточно.
Создадим сборку:
![](https://habrastorage.org/web/3bc/3cf/a04/3bc3cfa040fc41cf9f4b1a084089095f.png)
В результате мы получим файл «C:\SSIS\SSISDemoProject\bin\Development\SSISDemoProject.ispac».
Рассмотрим каким образом делается развертывание этого проекта на SQL Server.
Развертывание SSIS
Все последующие действия будем делать в SSMS.
Создание каталога SSISDB:
![](https://habrastorage.org/web/837/755/92a/83775592a1264147846bf9300436d601.png)
Здесь вводим любой пароль.
Теперь создаем папку, в которой будет располагаться наш проект:
![](https://habrastorage.org/web/933/6c9/717/9336c9717ce64ab3ade4833517e5bd89.png)
Разворачиваем сам проект:
![](https://habrastorage.org/web/707/ebf/8f4/707ebf8f48e340239c623dcbf203c91b.png)
![](https://habrastorage.org/web/a18/1dd/ef5/a181ddef58664038a83d66747b9780b6.png)
![](https://habrastorage.org/web/48f/67e/67d/48f67e67de50417c99f25db45b025394.png)
![](https://habrastorage.org/web/0c4/9a9/df2/0c49a9df282b4582b6a8afc1c2184491.png)
В завершении мы должны увидеть следующую картину:
![](https://habrastorage.org/web/ace/891/dc8/ace891dc8c1d46aba43f724ac7818e7a.png)
После обновления (F5) мы увидим наш проект:
![](https://habrastorage.org/web/88e/723/b82/88e723b82bc14c3698442a197e9af2e0.png)
Создание задачи в SQL Server Agent
Создадим задачу в SQL Agent, для выполнения пакета по расписанию:
![](https://habrastorage.org/web/b1c/ef3/80c/b1cef380cfbb437b98d6d079f04becce.png)
Создаем новый шаг:
![](https://habrastorage.org/web/967/e0e/f6d/967e0ef6dc8d49fbb12d4f7cd6e119d9.png)
На вкладке «Configuration > Parameters» можно задать параметры пакета (их рассмотрим в следующих частях).
На вкладке «Configuration > Connection Manager» мы можем изменить параметры подключения для каждого соединения, которое мы создали в проекте:
![](https://habrastorage.org/web/1ba/4c3/788/1ba4c3788b324c63a9e419d8e94c3306.png)
На закладке Advanced можно изменить логику, которая будет использоваться при успешном или неуспешном завершении шага:
![](https://habrastorage.org/web/459/6a5/865/4596a5865f59498db2c5e0ad3c48c499.png)
Шаг создан:
![](https://habrastorage.org/web/15e/238/c28/15e238c28fdc41d888201a0949e77587.png)
Осталось создать расписание для данной задачи:
![](https://habrastorage.org/web/8e1/c21/eb2/8e1c21eb2b3f46b0a6f8860a2a43ffec.png)
Расписание можно задать разнообразным образом. Думаю, здесь все должно быть интуитивно понятно:
![](https://habrastorage.org/web/a11/d41/db2/a11d41db27184ac59b1d6d63c818439d.png)
Все, задача создана.
Делаем тестовый запуск:
![](https://habrastorage.org/web/068/49f/9d3/06849f9d36204d13bdb2de766406cff1.png)
Так как шаг у нас всего один, то задача запустится сразу, иначе нужно было бы указать с какого шага нужно начать выполнение.
Результат выполнения задачи можно увидеть в следующем журнале:
![](https://habrastorage.org/web/f12/836/19c/f1283619c5464837a5ea3ae105a8092e.png)
В данном журнале можно увидеть успешность завершения каждого шага, а также время выполнения и прочие параметры.
Более подробный отчет о выполнении пакета можно посмотреть при помощи следующего отчета:
![](https://habrastorage.org/web/343/299/83f/34329983fcbd4c88bf10bdc3e1dd8f0e.png)
![](https://habrastorage.org/web/d3d/c79/b6f/d3dc79b6fa644f7d9f6e75bff33627ec.png)
![](https://habrastorage.org/web/6a5/d46/9fc/6a5d469fc72343ec8f7b14552323e9d9.png)
Заключение по первой части
В этой части я постарался дать обзорную картину, чтобы у читателя сразу сложилась в голове полная картина как все это выглядит и работает.
Я постарался описать все как можно подробнее, для того, чтобы обучающийся смог самостоятельно установить все необходимые инструменты и проработать материал шаг за шагом на практике, т.к. при самостоятельном изучении иметь рабочую среду это очень важный аспект.
На мой взгляд SSIS очень удобный и интуитивно понятный инструмент и многое в нем можно понять разбираясь самостоятельно. Это я говорю исходя из своего опыта, так как мне самому по большей части пришлось разбираться с SSIS самостоятельно и здесь я делюсь с вами своим опытом в данной области.
Надеюсь данный материал поможет многим сделать первые шаги в изучении данного инструмента и в дальнейшем применить свои знания в работе.
Хороших выходных! Удачи!
> Часть 2
Комментарии (6)
mayorovp
09.06.2017 21:02+4Предупреждаю о недостатках этого инструмента.
Во-первых, он очень плохо стыкуется с DVCS.
Во-вторых, невозможно писать обобщенный код. И даже кодогенерация особо не помогает из-за закрытости форматов. Когда мне пришлось сделать однотипные операции над 30 таблицами — оказалось, что проще переписать все целиком на C# чем накликивать 120 элементов в визуальном редакторе.
В-третьих, отсутствие нормальной расширяемости. SSIS предлагает два способа сделать свой компонент — это ScriptComponent и PipelineComponent.
Но для ScriptComponent создается отдельный C#-проект во временной папке, который потом целиком упаковывается в один большой XML-файл. Это, в частности, означает нулевую переиспользуемость кода — в такой проект нельзя добавить библиотеку!
Что же до PipelineComponent — вроде бы вещь хорошая, но требуется точное соответствие версий и разрядности студии и SQL сервера, в противном случае сделанный вами компонент просто не появится в тулбоксе.
sshikov
09.06.2017 22:43+1Поддержу. 2-3 летний проект, частично сделанный на версии 2008 этого инструмента, постоянно возникало желание все выбросить, и переписать заново.
К уже сказанному могу добавить следующее:
— ужасно неудобно работать с чужим проектом. Найти что-либо, понять, где формируется скажем значение какой-то колонки — практически не реально. Это означает нулевую сопровождаемость написанного.
— с не DVCS он тоже плохо стыкуется. Попробуйте понять, что изменилось в вашем проекте между ревизиями.
— если у вас изменились метаданые в какой-то из таблиц, проект зачастую просто перестает работать. Даже если на уровне SQL все осталось совместимо (т.е. мы не меняли скажем тип с varchar на int). Бороться с этим ужасно муторно.
Есть кстати некий проект, где предлагается писать пакеты SSIS на F#. В виде кода. Частично поддерживается импорт готовых проектов, сделанных в VS.
Не знаю, что там в версии 2014, а 2008 однозначно никому бы не посоветовал. Я пробовать переписывать куски на Java + Camel — обычно получалось значительно проще, понятнее, и как правило быстрее.
Oxoron
09.06.2017 21:18+4Работал с год на этой технологии. Мрак и ужас. Тот самый продукт который гораздо удобнее пилить через конфиг, ибо UI ужасен. Точнее, создать пакет можно и через UI, но мелкие доработки гораздо удобнее вносить через F7 (раскрывает XML файл описывающий выбранный в Solution Explorer пакет).
Плюс проблемы с тестированием. Если в пакете обычная передача данных — все еще более-менее нормально, но добавление любой логики превращает тесты в монстра.
P.S. Ого, да я не одинок!
DrPass
10.06.2017 02:04+3И я тоже с праведным гневом пну калеку, который до сих пор ест мои нервы. Сам по себе SSIS — неплохой движок. Но средства разработки под него просто кошмарны, представляют собой мешанину из мастеров и вставляемых сниппетов кода. И возможности писать пакеты без этой штуки тоже никакой, т.к. они представляют собой внушительные XML, не предназначенные для восприятия человеком. И к тому же возникает ощущение, что Microsoft забросила этот инструмент, т.к. там, по сути, нет развития этак с версии 2008.
scramble
12.06.2017 22:46Довелось потрогать небольшой biml файл- это ужас и кошмар. Работает в VS2013 максимум, отладка- через боль и страдания. Соболезную вам.
SLASH_CyberPunk
Возможно это хорошая инструкция в вашей компании, где все однообразно. Но для статьи тут информация только в том, куда кликать, если вы первый раз в SSIS.
К сожалению, больше тут нет ничего интересного, включая, почему выбраны именно такие опции, а не другие. Не говоря про то, что пример выбран мало того что идеальный для ETL, так еще и решаемый легко в рамках стандартного SQL-92.