Database
 sql >> база данни >  >> RDS >> Database

Инкрементално натоварване в SSIS

Хората все повече бързат. Те искат данните си почти в момента. И дори повече, данните стават все повече и повече. Така че не можете да използвате добрите стари техники, защото са „достатъчно добри“. Трябва да е бързо. И ETL стъпките не са изключение. Тук се задейства допълнителното натоварване. И ако сте на тази страница, вероятно търсите допълнително натоварване в SSIS.

И това е нашият фокус в тази статия. Ще направим сравнения и примери, за да обясним стъпка по стъпка постепенното натоварване на данни в SSIS. И бъдете сигурни, че няма да ви разбие главата, ако разберете това.

Ето какво ви очаква:

  • Какво представляват пълно натоварване и инкрементално натоварване в ETL?
  • Какво е инкрементално натоварване на данни в SSIS?
  • Разликите между пълно натоварване и допълнително натоварване в SSIS
  • Нарастващо натоварване в SSIS с помощта на CDC или улавяне на промяна на данни
  • Нарастващо натоварване в SSIS с помощта на колони DateTime
  • Как да направите нарастващо натоварване в SSIS с помощта на търсене
  • Най-добрият инструмент за зареждане на данни от SSIS

Всеки раздел ще има подраздели. Можете да преминете към темата, от която се нуждаете, като щракнете върху връзките.

Преди да започнем с примерите, нека сравним допълнителното натоварване с противоположното му, пълното натоварване.

Какво са пълно натоварване и инкрементално натоварване в ETL

Без значение какви ETL инструменти използвате, пълните и инкременталните натоварвания имат едно и също значение. Нека ги опишем по-долу.

Пълно натоварване в ETL

Както подсказва името, Full Load в ETL зарежда ВСИЧКИ данни от източника до местоназначението. Целевата таблица се съкращава, преди да се зареди всичко от източника. Ето защо тази техника е известна още като Разрушително натоварване . Тази техника също е по-лесна за изпълнение. И това също така гарантира най-високата цялост на данните. Но размерът на вашите данни днес е по-голям от вчера. Така че, ако използвате това за постоянно нарастващи данни, процесът ще става по-бавен с течение на времето.

Случаи на употреба при пълно натоварване на ETL

  • Размерът на изходните данни е малък и няма да нарасне значително след много години напред. Примерите включват списък с цветове, няколко категории/класификации, списък с държави и градове и много други.
  • Трудно е да се каже кое е ново или променено в източника.
  • Данните трябва да са абсолютно еднакви от източника до местоназначението
  • Историята на данните е без значение и се презаписва по-често

Инкрементално натоварване в ETL

Междувременно, Incremental Load също е както подсказва името. Само данните, които са се променили, ще бъдат заредени от източника към местоназначението. Това се прави постепенно във времето. Тези, които не са се променили, ще останат такива, каквито са. Това е малко трудно да се направи. Трябва да се уверите, че всички промени са събрани и заредени до местоназначението. Но това ще работи по-бързо от пълно натоварване при много големи данни.

Случаи на използване на инкрементално натоварване на ETL

  • Размерът на данните е много голям и заявката ще бъде много бавна за големи набори от резултати
  • Промените са лесни за заявка
  • Изтритите данни трябва да бъдат запазени в местоназначението, като система за одит

Какво е нарастващо натоварване в SSIS

Основните компоненти на нарастващо натоварване в SSIS са показани на фигура 1.

Инкременталното натоварване в SSIS обикновено става по-сложно в зависимост от вашите изисквания. Но простата „карта с рецепти“ на Фигура 1 включва това, от което се нуждаете, за да „приготвите“ данните на стъпки. Улавянето на промени в данните е трудната част. Можете да объркате дестинацията, ако не внимавате.

В следващите раздели ще видите как да направите нарастващо натоварване в SSIS с примери. Те включват използване на ChangeData Capture (CDC), колони DateTime и справки. Ще видите също как се прави това с помощта на компоненти на Devart SSIS.

Нека сравним допълнителното натоварване с пълното натоварване в SSIS в следващия раздел.

Разликата между пълно натоварване и нарастващо натоварване в SSIS

Вече видяхте как изглежда нарастващото натоварване в SSIS (Фигура 1). Междувременно ето как става с пълното натоварване на SSIS на фигура 2 по-долу.

Разликата между пълно натоварване и инкрементално натоварване в SSIS е в дизайна на пакета. Дизайнът с пълно натоварване изисква по-малко компоненти, преместени в пакета SSIS. Толкова е просто, че има малко мислене. Ето защо поради фалшиво чувство за производителност някои разработчици са склонни да прибягват до тази техника през повечето време.

Но стартирането на пакет за дизайн с пълно натоварване всяка вечер не е препоръчително за големи данни, да речем 15TB. Мислите ли, че ще приключи навреме, преди потребителите да пристигнат сутринта? Това няма да се случи, защото се опитвате да вмъкнете отново записите, които изобщо не са се променили. Ако това е около 70% от данните, имате нужда от повече престой в зависимост от ресурсите на сървъра.

Това е неприемливо.

Така че, толкова повече трябва да използвате инкрементално натоварване за тези сценарии. В следващите раздели ще научите как да зареждате данни по-бързо, като използвате нарастващо натоварване.

Инкрементално натоварване в SSIS с помощта на CDC

Първо, нека обмислим използването на Change Data Capture (CDC). Имайте предвид, че от тук до следващите 3 примера ще използваме прости примери. Така че дизайнът на опаковката няма да замъгли целта.

Преди да започнем с примера, този раздел ще обхване следното:

  • Първо, как да активирате CDC в база данни и таблица
  • След това, създаване на пакета SSIS за инкрементално натоварване на SSIS с помощта на CDC
  • Накрая стартиране и проверка на резултатите

Фигура 3 показва съставните части на този пример.

Улавянето на промяна на данни (CDC) записва вмъквания, изтривания и актуализации в таблица. Преди да можете да накарате този пример да работи, имате нужда от база данни и таблица, които са конфигурирани за CDC.

Как да активирам CDC в aDatabase и Table

Настройките на базата данни и таблицата по подразбиране са без CDC. За да активирате CDC за база данни, ето синтаксиса на T-SQL:

-- point to the database you need to CDC-enable
USE SportsCarSales
GO

-- this will enable CDC to the current database.
EXEC sys.sp_cdc_enable_db
GO

След това, за да проверите дали CDC наистина е активиран, изпълнете това:

select name from sys.databases
where is_cdc_enabled=1

Ако се появи името на базата данни, която сте активирали за CDC, можете да започнете. Вашата база данни вече е активирана за CDC.

Но това не свършва до тук. Трябва да посочите каква таблица искате да проследявате за промени. sp_cdc_enable_table ще свърши работа. По-долу е даден пример за това.

EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name   = N'sportsCarSales',
@role_name     = NULL,
@supports_net_changes = 1
GO

Изпълнението на горния код трябва да доведе до подобни съобщения по-долу:

Job 'cdc.SportsCarSales_capture' started successfully.
Job 'cdc.SportsCarSales_cleanup' started successfully.

Тези съобщения са 2-те нови задания на SQL Server Agent, създадени след активиране на таблица за CDC. Ето защо имате нужда от SQL Server Agent, за да накарате CDC да работи. Вижте екранна снимка на фигура 4.

Правете вмъквания, изтривания и актуализации в sportsCarSales таблица автоматично ще запише промените в друга таблица с име cdc.dbo_sportsCarSales_CT . Тази таблица има колони като оригинала. Вижте екранна снимка на фигура 5.

Операцията _$ колоната в лявата таблица е от особен интерес. Възможните стойности за тази колона са 1 (Изтриване), 2 (Вмъкване), 3 и 4 (Актуализиране). Актуализацията използва 2 стойности:едната за стойности на колони преди актуализацията (това е 3). А другият за стойности на колони след актуализацията (това е 4). Можете да проверите тази колона, когато проверявате стойностите, преди да стартирате вашия SSIS пакет. CDCSsource и CDC сплитер Компонентите използват тази таблица, когато идентифицират промените. Повече за тях в следващия раздел.

Създаване на пакета SSIS за нарастващо натоварване на SSIS чрез CDC

Ето стъпките за създаване на пакета SSIS с нарастващо натоварване с помощта на CDC. Това предполага, че вече имате празен пакет във Visual Studio 2019. Нашата цел тук е да заредим редовете от sportsCarSales таблица в FactSportsCarSales таблица с факти в хранилище за данни.

Следва обобщението на стъпките:

ЕТАП 1. Създайте 2 мениджъра на връзки към базата данни
СТЪПКА 2. Плъзнете 2 CDC Control Task към Control Flow
СТЪПКА №3. Плъзнете задача за поток от данни и се свържете с контролната задача на CDC

СТЪПКА №1. Създайте 2 мениджъра на връзки към база данни

Тук имаме нужда от 2 връзки към базата данни. Едната е връзката ADO.Net, която трябва да сочи към базата данни с активиран CDC. И след това създайте OLE DB връзка към склад за данни като дестинация. И двете са бази данни на SQL Server 2019. Вижте съответно Фигури 6 и 7. В този пример и двете бази данни са на една и съща машина. И ние използваме удостоверяване на Windows за свързване.

И така, в Мениджъри на връзки прозорец, щракнете с десния бутон и изберете Нова ADO.Net връзка . След това попълнете настройките на сървъра, удостоверяването и базата данни, както се вижда на фигура 6 по-долу.

След това създайте OLE DB връзка към склада за данни. В прозореца на Connections Manager щракнете с десния бутон и изберете Нова OLE DB връзка . След това попълнете името на сървъра, удостоверяването и базата данни. Посочете склада за данни тук.

СТЪПКА №2. Плъзнете 2 CDC Control Task към контролния поток

Има 2 неща, които трябва да направим, след като преместим контролна задача на CDC в контролния поток.

Маркирайте CDC Start

Първо, трябва да конфигурираме контролната задача на CDC, за да маркираме CDC Start. И след това създайте таблица на състоянието на CDC. Това може да стане в един прозорец за конфигурация. Вижте Фигура 8 по-долу.

Следвайки номерираните стъпки на фигура 9, следват подробностите.

  1. Изберете връзката ADO.Net, която създадохме на фигура 6.
  2. След това изберете Маркиране на CDC начало .
  3. Щракнете върху Ново за създаване на променлива на състоянието на CDC. След това ще се появи прозорец. Щракнете върху OK за да създадете име на променлива по подразбиране User::CDC_State .
  4. Изберете връзката ADO.Net, за да можем да съхраняваме състоянието на CDC в тази база данни.
  5. Щракнете върху Ново за да създадете таблица за съхранение на състоянието. Сценарият вече е създаден за вас. Така че просто щракнете върху Изпълнение в следващия прозорец.
  6. След това изберете CDC_State като името на държавата.
  7. Накрая щракнете върху OK .

След като конфигурирате тази задача за управление на CDC, стартирайте пакета. Все още няма да видите записи, копирани в другата база данни. Но таблицата на състоянието (dbo.cdc_state ) ще бъдат попълнени с начални стойности.

От тук можете да изберете да деактивирате тази контролна задача на CDC или да я презапишете отново с нови стойности в следващата задача.

Вземете обхвата на обработка

Или плъзгате нова задача за контрол на CDC към контролния поток, или презаписвате предишната. Конфигурацията е същата като на фигура 9, с изключение на операцията за управление на CDC (#2). Този път изберете Вземете обхват на обработка . След това щракнете върху OK . Свържете това със задачата за поток от данни в СТЪПКА #3 по-късно.

Маркиране на обработен диапазон

Конфигурирайте другата задача за контрол на CDC като първата, освен този път, изберете Маркиране на обработен диапазон за операцията за контрол на CDC. Свържете задачата за поток от данни в СТЪПКА #3 към това.

Стъпка №3. Плъзнете задача за поток от данни и се свържете със задачата CDCControl

Тази задача за поток от данни ще извърши извличането и зареждането, както се вижда на фигура 3 по-рано. Преди да се потопим в подробностите за всяка стъпка, ето обобщение:

A. Добавете източник на CDC
B. Добавете CDC сплитер и го свържете към източника на CDC
C. Добавете OLE DB команда за изтриване на записи
Г. Добавете OLE DB дестинация за вмъкване на записи
E. Добавете друга OLE DB команда за актуализиране на записи

Сега, нека се потопим.

А. Добавете източник на CDC

Плъзнете CDC източник компонент с настройки, показани на фигура 9 по-долу.

Следвайки номерираните стъпки на фигура 9, следват подробностите:

  1. Първо изберете връзката ADO.Net, която създадохме на фигура 6.
  2. След това изберете таблицата с CDC sportsCarSales .
  3. Изберете екземпляра за заснемане dbo_SportsCarSales .
  4. След това изберете Мрежа за режим на обработка на CDC. Това ще върне само нетните промени. За подробно описание на всеки режим на обработка вижте тази връзка. Можете също да кликнете върху Визуализация за да видите какви редове ще бъдат включени.
  5. Изберете променливата на състоянието на CDC, която създадохме по-рано (Фигура 9).
  6. Накрая кликнете върху OK .
Б. Добавете CDC сплитер и го свържете към източника на CDC

Единственото изискване за CDC сплитер е CDC източник предхождащ го. Така че, свържете CDC източник по-рано за този компонент. Това ще раздели промените за вмъквания, актуализации и изтривания.

В. Добавете OLE DB команда за изтриване на записи

Първо, трябва да маркирате този компонент като Изтриване на записи (вижте фигура 3). След това свържете това към CDC Splitter. Когато се появи подкана, изберете DeleteOutput за изхода и щракнете върху OK .

След това конфигурирайте командата OLE DB Диспечери на връзки раздел. Вижте Фигура 10.

След това в Свойства на компонента раздел, посочете командата DELETE за SQLCommand Имот. Командата трябва да бъде следната:

DELETE FROM FactSportsCarSales
WHERE SalesID = ?

Вижте екранна снимка на фигура 11 по-долу.

Въпросителният знак ще създаде параметър за SalesID . Всеки SalesID стойност, идваща от CDCSplitter ще се използва за изтриване на редове в FactSportsCarSales таблица.

След това в Преподаване на колони раздел, съпоставете SalesID колона на таблицата към параметъра (Param_0 ) Вижте Фигура 12.

Накрая щракнете върху OK.

Г. Добавете OLE DB дестинация за вмъкване на записи

Първо плъзнете ОЛЕ DB дестинация . След това го означете Вмъкване на записи . Свържете това към CDC разделителя . След това изберете InsertOutput когато се появи подкана за прозорец. Вижте Фигура 14 за основните настройки.

Следвайки номерираните стъпки на фигура 13, по-долу са подробностите:

  1. Първо изберете OLE DB връзката, която създадохме на фигура 7.
    След това изберете FactSportsCarSales таблица с факти.
  2. Накрая щракнете върху OK .
E. Добавете OLE DB команда за актуализиране на записи

Плъзнете друга OLE DB команда и го означете Актуализиране на записи. След това го свържете към CDC разделителя . Той автоматично ще избере UpdateOutput изход. Мениджърите на връзки настройката на раздела трябва да е същата като на фигура 11.

Но Component PropertiesSQLCommand трябва да има стойност като тази:

UPDATE [dbo].[FactSportsCarSales]
   SET [ClientID] = ?
      ,[SportsCarID] = ?
      ,[PurchaseDate] = ?
      ,[Quantity] = ?
      ,[UnitPrice] = ?
 WHERE [SalesID]= ?

Броят на въпросителни знаци в кода по-горе ще ви каже колко параметъра да използвате, започвайки от Param_0 .Позицията на параметрите от Param_0 до Параметр_5 се подрежда въз основа на тяхното място в кода. И така, Param_0 isfor ClientID , Параметр_1 е за SportsCarID , и така нататък.

Вижте Съпоставянето на колони на фигура 15.

След конфигуриране на CDC на ниво база данни и таблица, начинът да тествате дали CDC работи е чрез добавяне и промяна на редове. И така, нека добавим някои записи към таблицата.


USE SportsCarSales
GO

INSERT INTO SportsCarSales (ClientID, SportsCarID, PurchaseDate, Quantity, UnitPrice)
	VALUES (1, 1920, '02/03/2022', 1, 845000.0000),
	(5, 1920, '01/22/2022', 1, 845000.0000),
		(54, 1920, '01/15/2022', 1, 845000.0000),
		(62, 1920, '02/04/2022', 1, 845000.0000);
GO

За да видите дали това е записано в CDC, е чрез заявка в cdc.dbo_sportsCarSales_CT таблица.

SELECT * FROM cdc.dbo_sportsCarSales_CT;

Вижте резултатите от улавянето на данни за промяна след командата INSERT на фигура 15.

Така че записа вложките. Това е добре.

Сега опитайте да стартирате пакета SSIS по-рано. Резултатът трябва да бъде същият като фигура 16 по-долу.

Фигура 16 . Резултат по време на изпълнение на пакета SSIS за нарастващо натоварване с помощта на CDC.

И накрая, запитване на резултатите в FactSportsCarSales таблица разкрива същия набор от 4 записа.

Нарастващо натоварване в SSIS с помощта на колони за дата и час

Инкременталното натоварване в SSIS с помощта на DateTimecolumns е друг начин за събиране на данни на стъпки. Ако случайно правите ETL в таблица без CDC, това е следващата ви опция.

Изходната таблица може да има Променена или Последна актуализация колона като тази на фигура 17.

За да направите заявка за промените, трябва да знаете максималния Променен стойност на колоната от местоназначението. След това потърсете всички записи от източника, които имат по-голямо от Променено стойност на колона от местоназначението.

Типичните съставки на тази техника са показани на Фигура 18.

Моля, следвайте указанията как да готвите този тип нарастващо натоварване. Следните са подтемите за този раздел:

  • Създаване на пакета за инкрементално натоварване на SSIS с колони DateTime
  • Резултати по време на изпълнение на пакета

Създаване на пакета за инкрементално зареждане на SSIS с колони DateTime

Нашата цел е да заредим SportsCars таблица в dimSportsCars таблица с измерения в друга база данни. Следното е обобщение на стъпките:

ЕТАП 1. Създайте 2 OLE DB мениджъра на връзки
СТЪПКА 2. Създайте 2 пакетни променливи
СТЪПКА №3. Добавете Изпълнение на SQL задача в контролния поток
СТЪПКА #4. Добавете Задача за поток от данни

Да започнем.

СТЪПКА №1. Създайте 2 OLE DB мениджъра на връзки

Първата OLE DB връзка е от транзакционна база данни. И настройките са прости, както е показано на Фигура 19.

След това създайте друга OLE DB връзка към склада за данни. Това трябва да е същото като на фигура 7.

СТЪПКА №2. Създайте 2 пакетни променливи

Първата променлива ще съдържа датата на последната промяна от dimSportsCars таблица с размери. След това вторият ще задържи персонализираната SQL заявка.

А. Създайте променливата User::sportsCars_lastUpdate
  1. В Променливи щракнете върху Добавяне на променлива .
  2. Наречете го sportsCars_lastupdate .
  3. Задайте типа данни на DateTime .
Б. Създайте User::sqlCommand променлива
  1. В Променливи щракнете върху Добавяне на променлива .
  2. Наименувайте го sqlCommand .
  3. Задайте типа на String .
  4. Щракнете върху бутона с многоточия, за да създадете Израза . Вижте Фигура 21 за Конструктор на изрази прозорец и действителния низов израз.
  5. Щракнете върху OK .

SQL низът трябва да бъде така:

"SELECT  SportsCarID, StyleID, ManufacturerID, Model, UnitPrice, created, modified 
FROM sportsCars
WHERE modified > '" + (DT_WSTR, 50) @[User::sportsCars_lastupdate]  + "' 
ORDER BY SportsCarID;"

Забележете, че ние задаваме клаузата WHERE на Променено largerthan Потребител::sportsCars_lastupdate .

Ще има повече подробности за настройката на 2-те променливи в следващите стъпки.

СТЪПКА №3. Добавете Изпълнение на SQL задача в контролния поток

Тази задача ще поиска таблицата на местоназначението, за да получи последната Променена стойност на датата. Плъзнете Изпълнение на SQL задача към Контролния поток. След това го означете Получаване на дата на последна промяна от DW . След това вижте настройките на фигура 21.

Важните свойства, които трябва да зададете тук, са Връзка , SQLStatement и ResultSet свойства.

Задайте Връзка свойство към втората OLE DB връзка, зададена в СТЪПКА #1. След това задайте SQLStatement свойство на кода по-долу.

select max(modified) as LastUpdate from dimSportsCars

След това задайте ResultSet свойство на единичен ред .

И накрая, трябва да картографирате Последната актуализация псевдоним на колона (вижте кода по-горе) към User::sportsCars_lastupdate променлива. Вижте екранна снимка на фигура 22.

Накрая щракнете върху OK за да запазите новите настройки.

СТЪПКА №4. Добавете задача за поток от данни

Плъзнете Задача за поток от данни към Control Flow и свържете Изпълнение на SQL задача към него. След това маркирайте Задача за поток от данни Актуализиране на измерението dimSportsCars . След това следвайте стъпките, за да добавите компоненти към Задачата за поток от данни .

Задачата за поток от данни има няколко стъпки в него:

A. Добавете OLE DB източник
Б. Добавете трансформация за търсене, за да сравните източника с местоназначението
C. Добавете OLE DB команда за актуализиране на записи
Г. Добавете OLE DB дестинация за вмъкване на записи

Сега да започнем.

A. Добавете OLE DB източник

Този OLE DB източник ще поиска изходната таблица за променените записи. Вижте настройките на фигура 23.

След числата на фигура 23, ето подробностите:

  1. Първо посочете OLE DB връзката, която създадохме. Вижте Фигура 20.
  2. След това задайте Режим за достъп до данни към SQL команда от променливата .
  3. След това изберете променливата User::sqlCommand, която създадохме по-рано. Вижте Фигура 21.
  4. Накрая кликнете върху OK .
Б. Добавете трансформация за търсене, за да сравните източника с целта

Сега трябва да имаме начин да сравним таблиците с източник и дестинация. Можем да използваме Търсене Компонент на трансформация, за да направите това. Това ще извърши свързване между двете таблици.

Така че, плъзнете Търсене Трансформация в потока от данни и я наречете Класифицирайте промяната . След това го свържете с OLE DB източник по-рано. Щракнете двукратно върху него. Вижте Фигура 24 за настройка на Общи страница.

Задайте падащото меню на Пренасочване на редовете към изход без съвпадение както се вижда на фигура 24. Това означава, че ще използваме редовете, които нямат съвпадение. И в този случай това е за откриване на редове, присъстващи в източника, но не и в местоназначението.

След това щракнете върху Връзка страница в левия панел на Редактор за трансформация на търсене . След това вижте Фигура 25 за това какво да зададете.

На фигура 26 трябва да посочите OLE DB връзката за целевата таблица. (Вижте Фигура 7). След това задайте SQL заявката на кода по-долу.

SELECT SportsCarID from dimSportsCars

Нуждаем се само от SportsCarID колона за сравнение, така че използвахме заявка вместо цялата таблица.

След това щракнете върху Колони страница, за да зададете съпоставянето на колоната с ключ за заявка източник към местоназначението. Вижте Фигура 26 за картографирането.

Както се вижда на фигура 26, трябва да има линия от източника до местоназначението с помощта на SportsCarID ключова колона. И двете ключови колони ще бъдат използвани за сравнението.

Накрая щракнете върху OK .

В. Добавете OLE DB команда за актуализиране на записи

Тази част ще актуализира записите, които отговарят на SportsCarID ключови стойности от Търсене Трансформация.

Така че, плъзнете OLE DB команда в потока от данни и го наречете Update dimSportsCars . След това го свържете с Търсене Трансформация по-рано. Когато се появи подкана, задайте Изход до Изход за търсене на съвпадение . След това щракнете върху OK .

Щракнете двукратно върху OLE DB команда и задайте свойствата в Мениджъри на връзки раздел. Вижте Фигура 27.

Фигура 27 показва, че трябва да настроите Диспечер на връзки към целевата база данни (вижте фигура 8). След това щракнете върху Свойства на компонента раздел. Вижте Фигура 28 за настройките на свойствата.

Свойството SQLCommand е настроено на:

UPDATE dimSportsCars
SET StyleID = ?, ManufacturerID = ? , MODEL = ? , UnitPrice = ? , modified = ?
WHERE SportsCarID = ?

Вече направихме нещо подобно по-рано. Въпросителните знаци са заместители на параметри. И ако съпоставим правилната колона източник, ще бъде зададена съответната целева колона. Вижте съпоставянията на фигура 29.

Накрая щракнете върху OK .

Г. Добавете OLE DB дестинация за вмъкване на записи

Тази част ще вмъкне нови записи, намерени в SportsCars таблица в dimSportsCars размери.

Така че, плъзнете ОЛЕ DB дестинация компонент и го наименувайте Вмъкване на нови записи в dimSportsCars. Щракнете двукратно върху него и задайте връзката и целевата таблица. Вижте Фигура 30.

Както е показано на Фигура 30, задайте връзката към склада за данни (Фигура 8) и изберете dimSportsCars таблица с размери.

След това щракнете върху Mappings страница, за да видите дали колоните са съпоставени съответно. Тъй като имената на колоните са еднакви както в източника, така и в целта, те ще бъдат картографирани автоматично.

Накрая щракнете върху OK .

Резултати по време на изпълнение на пакета

След като пакетът е завършен, ето екранна снимка на резултата на фигура 31.

Процесът актуализира 8 реда и добави 1 нов ред в dimSportsCars таблица с размери.

Нарастващо натоварване в SSIS с помощта на търсене

Друг метод за нарастващо натоварване е да сравните източника от целта, за да видите какво трябва да бъде вмъкнато, актуализирано и изтрито. И това е вашата опция, ако няма колона DateTime и няма CDCon и двете таблици. Един от начините да направите това е да използвате Търсене Трансформация.

Типичните съставки за този подход са показани на Фигура 32.

Обърнете внимание, че простият подход на фигура 32 е приложим за таблици, които не позволяват твърдо изтриване. Ако е необходимо да се обработват изтривания, може да е приложимо обединяване с обединяване с пълно присъединяване.

Има 2 подтеми за този раздел:

Създаване на пакета SSIS за инкременталното натоварване на SSIS с помощта на търсене
Резултати по време на изпълнение на пакета

Нека се потопим.

Създаване на пакета SSIS за нарастващо натоварване на SSIS с помощта на търсене

Нашата цел тук е да заредим редовете на Производители таблица в dimManufacturers размери.

Това предполага, че имате готов празен SSIS пакет.

Следва обобщението на стъпките:

ЕТАП 1. Създайте 2 OLE DB връзки
СТЪПКА 2. Добавете задача за поток от данни

Да започнем с примера.

СТЪПКА №1. Създайте 2 OLE DB връзки

Можете да се обърнете към Фигура 19 за източника и Фигура 7 за целта. Тук използваме същите мениджъри на връзки.

СТЪПКА №2. Добавете задача за поток от данни

Плъзнете Задача за поток от данни в контролния поток и го наречете Актуализиране на таблицата с размери на производителите. Щракнете двукратно върху него и следвайте следващите стъпки. По-долу са обобщени стъпките в Задачата за поток от данни .

A. Добавете OLE DB източник
Б. Добавете Търсене Трансформация за сканиране за нови записи
В. Добавете ОЛЕ DB дестинация за вмъкване на записи.
Г. Добавяне на друго търсене Трансформация за сканиране за промени
E. Добавете OLE DB команда за да актуализирате целевата таблица

А. Добавете OLE DB източник

Плъзнете OLE DB източник и го етикетирайте Производители . Задайте Диспечер на връзки както се вижда на фигура 33.

Б. Добавете трансформация за търсене, за да сканирате за нови записи

Това Търсене Transformation ще сканира за записи, които не съществуват в целта въз основа на ИД на производител ключова колона. И всички несъвпадащи редове са кандидати за вмъкване на таблица.

Плъзнете Търсене transformation и го наречете Потърсете dimManufacturers. След това щракнете двукратно върху него.

Настройките за Общи страницата трябва да е същата като на фигура 24. Междувременно задайте връзката към склада за данни и използвайте заявка за Връзки настройки на страницата. Вижте Фигура 34.

В. Добавете OLE DB дестинация за вмъкване на записи

Плъзнете ОЛЕ DB дестинация и го наречете Вмъкване на нови записи. Свържете го с Търсене Трансформация и изберете Търсене без съвпадение изход когато се появи подкана. Щракнете двукратно върху него и задайте връзката и целевата таблица, както се вижда на фигура 35.

Таблицата източник и целевата таблица имат едни и същи имена на колони и те ще се съпоставят автоматично. Вижте Фигура 36.

Накрая щракнете върху OK .

Г. Добавете друга трансформация за търсене, за да сканирате за промени

За разлика от предишния Търсене Трансформация, този ще сканира за промени в Производител колона. И ако има промени, той ще бъде кандидат за актуализиране на таблицата.

Плъзнете още едно Търсене Трансформация и я наречете Променени записи за търсене. Свържете го с първото Търсене Трансформация. Общият страницата за това търсене трябва да е същата като на фигура 24.

Междувременно, Връзката страницата трябва да изглежда като фигура 37 по-долу.

Междувременно забележете съпоставянията на фигура 38.

Фигура 38 показва съпоставяния чрез Производител име. Ако не е равно, има промяна в източника. И трябва да се копира в целта.

Е. Добавете OLE DB команда за актуализиране на целевата таблица

Настройките трябва да са същите като на Фигура 29, с изключение на SQLCommand . Командата UPDATE трябва да бъде така:

UPDATE dimManufacturers
set manufacturer = ?
where manufacturerID = ?

Съответно коригирайте съпоставянията на колоните спрямо параметрите.

Резултати по време на изпълнение на пакета

Свършен? След това стартирайте пакета. Ще видите резултатите по време на изпълнение, същите като на Фигура 39.

Най-добрият инструмент за зареждане на SSIS данни

Всички примери, които имахме по-рано, използват готови компоненти, които идват от Microsoft. Въпреки че е достатъчно добър за някои проекти, какво ще стане, ако трябва да интегрирате както облак, така и източници на база данни чрез SSIS?

Това е мястото, където компонентите на Devart SSIS влизат в игра. Тези SSIS компоненти са удобни за използване. И предлагат високопроизводително зареждане на данни, използвайки специфични за източника на данни оптимизации и разширено кеширане. Те също така имат 40+ източника на данни, включително любими на RDBMS като MySQL, PostgreSQL и Oracle. Включени са и облачни услуги като Salesforce, HubSpot, Google Analytics и много други. Така че, струва си да опитате да заредите милиони записи в SSIS с помощта на Devart SSIS Components.

Защо не пример?

Използване на компоненти на Devart SSIS за нарастващо натоварване

Нека опитаме да репликираме dimManufacturers таблица в MySQL и използвайте Търсене на Devart и Дестинация компоненти за MySQL. Рецептата е показана на Фигура 40.

Нека започнем с добавяне на нов пакет SSIS към вашия проект на Visual Studio Integration Services. След това добавете Data FlowTask и щракнете двукратно върху него. След това следвайте стъпките по-долу.

Преди това ето обобщение на стъпките:

ЕТАП 1. Добавете OLE DB източник
СТЪПКА 2. Добавете Devart MySQL Connection Manager
СТЪПКА №3. Добавете Devart MySQL Търсене за да сканирате за нови записи
СТЪПКА #4. Добавете още Devart MySQL Търсене Трансформация за сканиране за промени
СТЪПКА #5. Добавете Devart MySQL Destination за вмъкване на записи
СТЪПКА №6. Add another Devart MySQL Destination to update records

STEP #1. Add an OLE DB Source

This will connect to the SQL Server database we had earlier. Please refer to Figure 8. Then, set the table to dimManufacturers .

STEP #2. Add a Devart MySQL Connection Manager

We need this connection for the destination database and table. So, in the Connection Managers window, right-click and select New Connection . Then, select the DevartMySQL Connection Manager type. Then, configure the database access as shown in Figure 41. Notice the simpler interface to connect. Though you can go to the Advanced tab and see more properties there.

I’m running MySQL 8 in my local machine and there’s a copy of the same database in SQL Server, but the rows are older.

STEP #3. Add a Devart MySQL Lookup Transformation to Scanfor New Records

Drag a Devart MySQL Lookup and name it Compare Source to Target . Then, connect it to the Devart MySQL Connection Manager earlier. Now, follow the configuration in Figure 42.

Following the numbers in Figure 42, the following are the details:

  1. First, select the Devart MySQL Connection Manager created in STEP #2.
  2. Then, select the dimmanufacturers маса.
  3. In Lookup Columns , mark checked the ManufacturerID колона.
  4. Then, in Input Columns , select ManufacturerID .
  5. Then, select ManufacturerID in Reference Columns .
  6. Finally, click OK .

ЗАБЕЛЕЖКА :If you encounter a duplicate name error, go to Advanced Editor. And then, click Input and Output Properties . Rename either the Input or Output Column to a different name.

STEP #4. Add another Devart MySQL Lookup Transformation toScan for Changes

This second MySQL Lookup will scan forrecords that changed.

Drag another Devart MySQL Lookup andlabel it Get Records that Changed. Connect it to thefirst Devart MySQL Lookup . Then, choose Lookup Match Output .

The setup is the same as in Figure 42. But choose the Manufacturer column instead of ManufacturerID . Do this for Lookup Columns , Input Columns , and Reference Columns .

STEP #5. Add a Devart MySQL Destination to Insert Records

This step will insert records from thesource that have no match in the target.

So, drag a Devart MySQL Destination and label it Insert New Records. Connect it to the first Devart MySQL Lookup . Double-click it and configure the Connection Manager . See Figure 43.

In Figure 43, you need to set the connection to the MySQL connection manager we did in STEP #2. Then, click Component Properties . See the configuration in Figure 44.

After setting the TableName to dimmanufacturers ,click Column Mappings . Since both the source and target tables havethe same column names, the columns are automatically mapped.

Finally, click OK .

STEP #6. Add Another Devart MySQL Destination to UpdateRecords

Unlike the other Devart MySQLDestination , this will update records that changed from the source.

So, drag another Devart MySQL Destination and label it Update Existing. Connect it to the second Devart MySQL Lookup Transformation. And select Lookup No Match Output when a prompt appears. The setup is the same as in STEP #5 except for the Component Properties . See Figure 45 on what to change.

Using the Devart MySQL Destination is dead easy than using an OLE DB Command. There’s no need to map parameters to columns. It also works for a Delete operation. This is unlike an OLE DB Destination that works for inserts only.

Package Runtime Results

See the runtime results in Figure 46.

Заключение

That’s it.

You learned 3 ways to do incremental load in SSIS by using the following:

  • Change Data Capture
  • DateTime Columns
  • Lookup Transformation

You also learned how to do it using DevartSSIS Components.

Though our examples are simplified to makethe principle easier to understand as possible, there’s room for improvement.We didn’t use a staging table to store all changes, whether insert, update, ordelete. This is recommended for very large data, especially when the target isin another server. You can also add an executeprocess task in SSIS for special scenarios.

Anyway, if you like this post, please shareit on your favorite social media platforms.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на JavaFX таблици за организиране на данни

  2. Система за автоматично изпращане на имейл за изпращане на обобщен отчет на базата данни

  3. Въведение в бавно променящите се размери (SCD)

  4. ПРЕГЛЕД:Разширение SentryOne Plan Explorer за Azure Data Studio

  5. Мониторинг на архивиране в различни инстанции