sql >> Databáze >  >> RDS >> Database

Přírůstkové zatížení v SSIS

Lidé stále více spěchají. Chtějí svá data téměř hned. A co víc, data jsou stále větší a větší. Takže nemůžete používat staré dobré techniky, protože jsou „dost dobré“. Musí to být rychlé. A kroky ETL nejsou výjimkou. Zde hraje roli přírůstkové zatížení. A pokud jste na této stránce, pravděpodobně hledáte přírůstkové zatížení v SSIS.

A na to se zaměřujeme v tomto článku. Provedeme srovnání a příklady, které krok za krokem vysvětlí přírůstkové zatížení dat v SSIS. A buďte si jisti, že vám z toho nic neláme hlavu.

Zde je to, co je pro vás připraveno:

  • Co je plná zátěž a přírůstková zátěž v ETL?
  • Co je přírůstkové zatížení dat v SSIS?
  • Rozdíly mezi plným a přírůstkovým zatížením v SSIS
  • Přírůstkové zatížení v SSIS pomocí CDC nebo Change Data Capture
  • Přírůstkové načítání v SSIS pomocí sloupců DateTime
  • Jak provést přírůstkové načtení v SSIS pomocí vyhledávání
  • Nejlepší nástroj pro načítání dat SSIS

Každá sekce bude mít podsekce. Kliknutím na odkazy můžete přejít na požadované téma.

Než začneme s příklady, porovnejme přírůstkové zatížení s jeho opakem, plným zatížením.

Co je úplné zatížení a přírůstkové zatížení v ETL

Bez ohledu na to, jaké nástroje ETL používáte, mají plné a přírůstkové zatížení stejný význam. Pojďme si je popsat níže.

Plné zatížení v ETL

Jak název napovídá, Full Load v ETL načítá VŠECHNA data ze zdroje do cíle. Před načtením všeho ze zdroje je cílová tabulka zkrácena. Proto je tato technika známá také jako destruktivní zátěž . Tato technika je také jednodušší. A to také zajišťuje nejvyšší integritu dat. Ale velikost vašich dat je dnes větší než včera. Takže pokud to použijete na stále rostoucí data, proces se časem zpomalí.

Případy použití plného zatížení ETL

  • Velikost zdrojových dat je malá a v příštích letech se výrazně nezvýší. Příklady zahrnují seznam barev, několik kategorií/klasifikací, seznam zemí a měst a mnoho dalších.
  • Je těžké říci, co je ve zdroji nové nebo změněné.
  • Data musí být od zdroje do cíle naprosto stejná
  • Historie dat je irelevantní a častěji se přepisuje

Přírůstkové zatížení v ETL

Mezitím je přírůstkové zatížení také, jak naznačují názvy. Ze zdroje do cíle budou načtena pouze data, která se změnila. To se provádí postupně v průběhu času. Ty, které se nezměnily, zůstanou tak, jak jsou. To je trochu obtížné. Musíte zajistit, aby byly všechny změny shromážděny a načteny do cíle. To však poběží rychleji než plné zatížení u velmi velkých dat.

Případy použití přírůstkového zatížení ETL

  • Velikost dat je velmi velká a u velkých sad výsledků bude dotazování velmi pomalé
  • Změny lze snadno dotazovat
  • Smazaná data je třeba uchovat v cíli, jako je systém auditu

Co je přírůstkové zatížení v SSIS

Základní složky přírůstkového zatížení v SSIS jsou znázorněny na obrázku 1.

Přírůstkové načítání v SSIS má tendenci být složitější v závislosti na vašich požadavcích. Ale jednoduchá „karta s recepty“ na obrázku 1 obsahuje to, co potřebujete k „vaření“ dat v krocích. Zachycení změn v datech je náročná část. Pokud si nedáte pozor, můžete cíl zkazit.

V následujících částech uvidíte, jak provést přírůstkové zatížení v SSIS s příklady. Patří mezi ně použití ChangeData Capture (CDC), sloupců DateTime a vyhledávání. Uvidíte také, jak se to dělá pomocí komponent Devart SSIS.

V další části porovnáme přírůstkové zatížení s plným zatížením SSIS.

Rozdíl mezi plnou zátěží a přírůstkovou zátěží v SSIS

Již jste viděli, jak vypadá přírůstkové zatížení v SSIS (obrázek 1). Mezitím, zde je návod, jak to jde s plným zatížením SSIS na obrázku 2 níže.

Rozdíl mezi plnou zátěží a přírůstkovou zátěží v SSIS je v designu balíčku. Návrh plného zatížení vyžaduje méně komponent přetažených do balíčku SSIS. Je to tak jednoduché, že je v tom málo přemýšlení. To je důvod, proč z falešného pocitu produktivity mají někteří vývojáři tendenci uchýlit se k této technice většinu času.

Ale provozovat designový balíček s plnou zátěží každou noc není vhodné pro velká data, řekněme 15 TB. Myslíte si, že to skončí včas, než uživatelé ráno dorazí? To se nestane, protože se pokoušíte znovu vložit záznamy, které se vůbec nezměnily. Pokud se jedná o přibližně 70 % dat, budete potřebovat delší prostoje v závislosti na prostředcích serveru.

To je nepřijatelné.

Čím více tedy musíte v těchto scénářích používat přírůstkové zatížení. V následujících částech se dozvíte, jak rychleji načítat data pomocí přírůstkového načítání.

Přírůstkové zatížení v SSIS pomocí CDC

Nejprve zvažte použití Change Data Capture (CDC). Všimněte si, že odsud až po další 3 příklady budeme používat jednoduché příklady. Návrh balíčku tedy neznečistí cíl.

Než začneme s příkladem, bude tato část pokrývat následující:

  • Nejprve, jak povolit CDC v databázi a tabulce
  • Poté vytvoření balíčku SSIS pro přírůstkové načítání SSIS pomocí CDC
  • Nakonec běh a kontrola výsledků

Obrázek 3 ukazuje složky tohoto příkladu.

Change Data Capture (CDC) záznamy vloží, odstraní a aktualizují v tabulce. Než budete moci zprovoznit tento příklad, potřebujete databázi a tabulku, která je nakonfigurována pro CDC.

Jak povolit CDC v databázi a tabulce

Výchozí nastavení databáze a tabulky je bez CDC. Chcete-li vytvořit databázi s podporou CDC, zde je syntaxe 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

Poté, abyste zjistili, zda je CDC skutečně povoleno, spusťte toto:

select name from sys.databases
where is_cdc_enabled=1

Pokud se objeví název databáze, kterou jste povolili pro CDC, můžete začít. Vaše databáze je nyní povolena CDC.

Tady to ale nekončí. Musíte uvést, v jaké tabulce chcete sledovat jakékoli změny. sp_cdc_enable_table udělá ten trik. Níže je uveden příklad.

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

Spuštění výše uvedeného kódu by mělo vést k podobným zprávám níže:

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

Tyto zprávy jsou 2 nové úlohy SQL Server Agent vytvořené po povolení tabulky pro CDC. To je důvod, proč potřebujete SQL Server Agent, aby CDC fungovalo. Viz snímek obrazovky na obrázku 4.

Vkládání, mazání a aktualizace na prodeji sportovních vozů tabulka automaticky zaznamená změny do jiné tabulky s názvem cdc.dbo_sportsCarSales_CT . Tato tabulka má sloupce jako originál. Viz snímek obrazovky na obrázku 5.

_$operace sloupec v levé tabulce je zvláště zajímavý. Možné hodnoty pro tento sloupec jsou 1 (Odstranit), 2 (Vložit), 3 a 4 (Aktualizovat). Aktualizace používá 2 hodnoty:jednu pro hodnoty sloupců před aktualizace (to je 3). A druhý pro sloupcové hodnoty po aktualizace (to je 4). Tento sloupec můžete zkontrolovat při kontrole hodnot před spuštěním balíčku SSIS. Zdroj CDCS a CDC Splitter komponenty používají tuto tabulku při identifikaci změn. Více o nich v další sekci.

Vytvoření balíčku SSIS pro přírůstkové zatížení SSIS pomocí CDC

Zde jsou kroky při vytváření balíčku SSIS s přírůstkovým zatížením pomocí CDC. To předpokládá, že již máte prázdný balíček ve Visual Studiu 2019. Naším cílem je načíst řádky z sportsCarSales zařadit do FactSportsCarSales tabulka faktů v datovém skladu.

Níže je uveden souhrn kroků:

KROK 1. Vytvořte 2 správce připojení k databázi
KROK 2. Přetáhněte 2 CDC Control Task do Control Flow
KROK #3. Přetáhněte úlohu toku dat a připojte se k řídicí úloze CDC

KROK #1. Vytvořte 2 správce databázových připojení

Potřebujeme zde 2 databázová připojení. Jedním z nich je připojení ADO.Net, které by mělo ukazovat na databázi s povoleným CDC. A poté vytvořte připojení OLE DB k datovému skladu jako cíl. Obě jsou databáze SQL Server 2019. Viz obr. 6 a 7 odpovídajícím způsobem. V tomto příkladu jsou obě databáze na stejném počítači. A k připojení používáme ověřování systému Windows.

Takže v Správci připojení klikněte pravým tlačítkem a vyberte Nové připojení ADO.Net . Poté vyplňte nastavení serveru, ověřování a databáze, jak je vidět na obrázku 6 níže.

Poté vytvořte připojení OLE DB k datovému skladu. V okně Správce připojení klikněte pravým tlačítkem myši a vyberte možnost Nové připojení OLE DB . Poté vyplňte server, ověření a název databáze. Zde zadejte datový sklad.

KROK #2. Přetáhněte 2 CDC Control Task do Control Flow

Po přetažení řídicí úlohy CDC v řídicím toku musíme udělat 2 věci.

Označit CDC Start

Nejprve musíme nakonfigurovat CDC Control Task tak, aby označil CDC Start. A pak vytvořte tabulku stavu CDC. To lze provést v jednom konfiguračním okně. Viz obrázek 8 níže.

Po očíslovaných krocích na obrázku 9 následují podrobnosti.

  1. Vyberte připojení ADO.Net, které jsme vytvořili na obrázku 6.
  2. Poté vyberte možnost Označit spuštění CDC .
  3. Klikněte na Nový k vytvoření stavové proměnné CDC. Poté se objeví okno. Klikněte na OK vytvořit výchozí název proměnné User::CDC_State .
  4. Vyberte připojení ADO.Net, abychom mohli uložit stav CDC do této databáze.
  5. Klikněte na Nový k vytvoření tabulky pro uložení stavu. Skript je pro vás již vytvořen. Stačí tedy kliknout na Spustit v dalším okně.
  6. Poté vyberte CDC_State jako název státu.
  7. Nakonec klikněte na OK .

Po konfiguraci této řídicí úlohy CDC spusťte balíček. Záznamy zkopírované do jiné databáze zatím neuvidíte. Ale tabulka stavu (dbo.cdc_state ) budou vyplněny počátečními hodnotami.

Odtud můžete tuto úlohu CDC Control Task zakázat nebo ji znovu přepsat novými hodnotami v další úloze.

Získat rozsah zpracování

Buď přetáhnete novou řídicí úlohu CDC do řídicího toku, nebo přepíšete předchozí. Konfigurace je stejná jako na obrázku 9, s výjimkou provozu CDC Control Operation (#2). Tentokrát vyberte Získat rozsah zpracování . Poté klikněte na OK . Připojte to k úloze toku dat v KROKU #3 později.

Označit zpracovaný rozsah

Nakonfigurujte další řídicí úlohu CDC jako první, tentokrát však vyberte Označit zpracovaný rozsah pro ovládání CDC. K tomu připojte úlohu Data Flow v KROKU #3.

Krok č. 3. Přetáhněte úlohu toku dat a připojte se k úloze CDCControl

Tato úloha toku dat provede extrakci a načtení, jak je vidět na obrázku 3 dříve. Než se ponoříme do podrobností každého kroku, zde je shrnutí:

A. Přidejte zdroj CDC
B. Přidejte rozbočovač CDC a připojte jej ke zdroji CDC
C. Přidejte příkaz OLE DB pro odstranění záznamů
D. Přidejte cíl OLE DB pro vkládání záznamů
E. Přidejte další příkaz OLE DB pro aktualizaci záznamů

Nyní se pojďme ponořit.

A. Přidejte zdroj CDC

Přetáhněte Zdroj CDC komponentu s nastavením znázorněným na obrázku 9 níže.

Po očíslovaných krocích na obrázku 9 následují podrobnosti:

  1. Nejprve vyberte připojení ADO.Net, které jsme vytvořili na obrázku 6.
  2. Potom vyberte tabulku s podporou CDC sportsCarSales .
  3. Vyberte instanci zachycení dbo_SportsCarSales .
  4. Poté vyberte Síť pro režim zpracování CDC. Tím se vrátí pouze čisté změny. Podrobný popis každého režimu zpracování naleznete na tomto odkazu. Můžete také kliknout na Náhled abyste viděli, jaké řádky budou zahrnuty.
  5. Vyberte proměnnou stavu CDC, kterou jsme vytvořili dříve (obrázek 9).
  6. Nakonec klikněte na OK .
B. Přidejte CDC Splitter a připojte jej ke zdroji CDC

Jediný požadavek na CDC Splitter je zdroj CDC před ním. Připojte tedy zdroj CDC dříve k této složce. Tím se změny oddělí na vložení, aktualizace a odstranění.

C. Přidejte příkaz OLE DB k odstranění záznamů

Nejprve musíte tuto komponentu označit jako Odstranit záznamy (viz obrázek 3). Poté jej připojte k rozbočovači CDC. Když se zobrazí výzva, vyberte DeleteOutput pro výstup a klikněte na OK .

Potom nakonfigurujte Správce připojení příkazu OLE DB tab. Viz obrázek 10.

Dále v části Vlastnosti součásti zadejte příkaz DELETE pro SQLCommand vlastnictví. Příkaz by měl vypadat takto:

DELETE FROM FactSportsCarSales
WHERE SalesID = ?

Podívejte se na snímek obrazovky na obrázku 11 níže.

Otazník vytvoří parametr pro SalesID . Každé SalesID hodnotu pocházející z CDCSplitter se použije k odstranění řádků v FactSportsCarSales tabulka.

Poté v Mapování sloupců namapujte ID prodeje sloupec tabulky na parametr (Param_0 ) Viz obrázek 12.

Nakonec klikněte na OK.

D. Přidat cíl OLE DB k vložení záznamů

Nejprve přetáhněte Cíl OLE DB . Poté jej označte štítkem Vložit záznamy . Připojte jej k rozbočovači CDC . Poté vyberte InsertOutput když se objeví výzva v okně. Základní nastavení viz Obrázek 14.

Podle očíslovaných kroků na obrázku 13 jsou níže uvedeny podrobnosti:

  1. Nejprve vyberte připojení OLE DB, které jsme vytvořili na obrázku 7.
    Poté vyberte FactSportsCarSales tabulka faktů.
  2. Nakonec klikněte na OK .
E. Přidejte příkaz OLE DB k aktualizaci záznamů

Přetáhněte jiný příkaz OLE DB a označte jej Aktualizovat záznamy. Poté jej připojte k rozbočovači CDC . Automaticky vybere UpdateOutput výstup. Správci připojení nastavení karty by mělo být stejné jako na obrázku 11.

Ale Component PropertiesSQLCommand by měl mít hodnotu takto:

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

Počet otazníků ve výše uvedeném kódu vám řekne, kolik parametrů použít od Param_0 .Pozice parametrů z Param_0 na Param_5 jsou uspořádány na základě jejich místa v kódu. Takže Param_0 isfor KlientID , Param_1 je pro SportsCarID a tak dále.

Podívejte se na Mapování sloupců na obrázku 15.

Po konfiguraci CDC na úrovni databáze a tabulky lze otestovat, zda CDC funguje, přidáním a změnou řádků. Pojďme tedy do tabulky přidat nějaké záznamy.


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

Chcete-li zjistit, zda je to zaznamenáno v CDC, dotazem na cdc.dbo_sportsCarSales_CT tabulka.

SELECT * FROM cdc.dbo_sportsCarSales_CT;

Podívejte se na výsledky zachycení změn dat po příkazu INSERT na obrázku 15.

Takže to nahrálo vložky. To je dobře.

Nyní zkuste balíček SSIS spustit dříve. Výsledek by měl být stejný jako na obrázku 16 níže.

Obrázek 16 . Výsledek runtime balíčku SSIS pro přírůstkové načítání pomocí CDC.

A nakonec dotaz na výsledky v FactSportsCarSales tabulka odhaluje stejnou sadu 4 záznamů.

Přírůstkové zatížení v SSIS pomocí sloupců DateTime

Přírůstkové zatížení v SSIS pomocí DateTimecolumns je další způsob, jak shromažďovat data v přírůstcích. Pokud náhodou děláte ETL v tabulce bez CDC, toto je vaše další možnost.

Zdrojová tabulka může mít Upraveno nebo Poslední aktualizace sloupec jako na obrázku 17.

Dotaz na změny znamená znát maximum Upraveno hodnota sloupce z cíle. Poté dotazujte všechny záznamy ze zdroje, které mají větší než Změněno columnvalue z cíle.

Typické složky této techniky jsou znázorněny na obrázku 18.

Postupujte prosím podle pokynů, jak vařit tento typ přírůstkové náplně. Následují podtémata pro tuto sekci:

  • Vytvoření balíčku pro přírůstkové načtení SSIS se sloupci DateTime
  • Výsledky za běhu balíčku

Vytvoření balíčku pro provádění přírůstkového načítání SSIS se sloupci DateTime

Naším cílem je načíst Sportovní vozy stůl do dimSportsCars tabulka rozměrů v jiné databázi. Následuje shrnutí kroků:

KROK 1. Vytvořte 2 správce připojení OLE DB
KROK 2. Vytvořte 2 proměnné balíčku
KROK #3. Přidejte Spustit úlohu SQL v řídicím toku
KROK 4. Přidejte úlohu toku dat

Začněme.

KROK #1. Vytvořte 2 správce připojení OLE DB

První připojení OLE DB je z transakční databáze. A nastavení je jednoduché, jak ukazuje obrázek 19.

Potom vytvořte další připojení OLE DB k datovému skladu. To by mělo být stejné jako na obrázku 7.

KROK #2. Vytvořte 2 proměnné balíčku

První proměnná bude obsahovat datum poslední změny z dimSportsCars rozměrová tabulka. Poté bude druhý obsahovat vlastní dotaz SQL.

A. Vytvořte proměnnou User::sportsCars_lastUpdate
  1. V části Proměnné klikněte na tlačítko Přidat proměnnou .
  2. Pojmenujte to sportsCars_lastupdate .
  3. Nastavte typ dat na Datum a čas .
B. Vytvořte proměnnou User::sqlCommand
  1. V části Proměnné klikněte na tlačítko Přidat proměnnou .
  2. Pojmenujte jej sqlCommand .
  3. Nastavte typ na Řetězec .
  4. Kliknutím na tlačítko se třemi tečkami vytvořte Výraz . Viz obrázek 21 pro Tvůrce výrazů okno a skutečný řetězcový výraz.
  5. Klikněte na tlačítko OK .

Řetězec SQL by měl vypadat takto:

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

Všimněte si, že jsme nastavili klauzuli WHERE na Upraveno větší než User::sportsCars_lastupdate .

Další podrobnosti o nastavení 2 proměnných budou uvedeny v následujících krocích.

KROK #3. Přidejte úlohu Spustit SQL do toku řízení

Tato úloha se dotáže cílové tabulky, aby získala poslední Upraveno hodnota data. Přetáhněte Spustit úlohu SQL do řídicího toku. Poté jej označte štítkem Získat datum poslední změny z DW . Poté se podívejte na nastavení na obrázku 21.

Důležité vlastnosti, které zde můžete nastavit, jsou Připojení , SQLStatement a Sada výsledků vlastnosti.

Nastavte Připojení vlastnost na druhé připojení OLE DB nastavené v KROKU #1. Potom nastavte SQLStatement vlastnost na kód níže.

select max(modified) as LastUpdate from dimSportsCars

Poté nastavte ResultSet vlastnost na Jeden řádek .

Nakonec musíte namapovat Poslední aktualizaci alias sloupce (viz kód výše) k User::sportsCars_lastupdate variabilní. Viz snímek obrazovky na obrázku 22.

Nakonec klikněte na OK pro uložení nových nastavení.

KROK #4. Přidat úlohu toku dat

Přetáhněte Úlohu toku dat k Control Flow a připojte Execute SQL Task k tomu. Poté označte Úkol toku dat Aktualizujte dimenzi dimSportsCars . Poté postupujte podle pokynů pro přidání komponent do úlohy toku dat .

Úloha toku dat obsahuje několik kroků:

A. Přidat zdroj OLE DB
B. Přidejte vyhledávací transformaci pro porovnání zdroje s cílem
C. Přidejte příkaz OLE DB pro aktualizaci záznamů
D. Přidejte cíl OLE DB pro vkládání záznamů

Nyní začněme.

A. Přidat zdroj OLE DB

Tento zdroj OLE DB bude dotazovat zdrojovou tabulku na změněné záznamy. Viz nastavení na obrázku 23.

Za čísly na obrázku 23 jsou uvedeny podrobnosti:

  1. Nejprve zadejte připojení OLE DB, které jsme vytvořili. Viz obrázek 20.
  2. Potom nastavte Režim přístupu k datům na příkaz SQL z proměnná .
  3. Potom vyberte proměnnou User::sqlCommand, kterou jsme vytvořili dříve. Viz obrázek 21.
  4. Nakonec klikněte na OK .
B. Přidejte vyhledávací transformaci a porovnejte zdroj s cílem

Nyní musíme mít způsob, jak porovnat zdrojové a cílové tabulky. Můžeme použít Vyhledat Transformační komponenta k tomu. To provede spojení mezi 2 tabulkami.

Přetáhněte tedy Vyhledat Transformace v datovém toku a pojmenujte ji Klasifikace změny . Poté jej připojte ke zdroji OLE DB dříve. Poklepejte na něj. Viz Obrázek 24 pro nastavení Obecné stránku.

Nastavte rozbalovací nabídku na Přesměrovat řádky na výstup bez shody jak je vidět na obrázku 24. To znamená, že použijeme řádky, které se neshodují. A v tomto případě je to pro detekci řádků přítomných ve zdroji, ale ne v cíli.

Dále klikněte na Připojení v levém podokně Editoru transformace vyhledávání . Poté se podívejte na Obrázek 25, co je třeba nastavit.

Na obrázku 26 je třeba zadat připojení OLE DB pro cílovou tabulku. (Viz obrázek 7). A poté nastavte dotaz SQL na kód níže.

SELECT SportsCarID from dimSportsCars

Potřebujeme pouze SportsCarID sloupec pro porovnání, takže jsme místo celé tabulky použili dotaz.

Dále klikněte na Sloupce k nastavení mapování klíčového sloupce zdrojového dotazu na cíl. Viz obrázek 26 pro mapování.

Jak je vidět na obrázku 26, měla by existovat čára od zdroje k cíli pomocí SportsCarID klíčový sloupec. Pro srovnání budou použity oba klíčové sloupce.

Nakonec klikněte na OK .

C. Přidejte příkaz OLE DB k aktualizaci záznamů

Tato část aktualizuje záznamy, které odpovídají SportsCarID klíčové hodnoty z Vyhledání Transformace.

Přetáhněte tedy příkaz OLE DB v Data Flow a pojmenujte jej Aktualizovat dimSportsCars . Poté jej připojte k Vyhledat Transformace dříve. Když se zobrazí výzva, nastavte Výstup na Vyhledat výstup shody . Poté klikněte na OK .

Poklepejte na Příkaz OLE DB a nastavte vlastnosti v Správcích připojení tab. Viz obrázek 27.

Obrázek 27 ukazuje, že je třeba nastavit Správce připojení do cílové databáze (viz obrázek 8). Poté klikněte na Vlastnosti součásti tab. Viz Obrázek 28 pro nastavení vlastností.

Vlastnost SQLCommand je nastavena na:

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

Něco podobného jsme již dělali dříve. Otazníky jsou zástupné symboly parametrů. A pokud namapujeme správný zdrojový sloupec, nastaví se odpovídající cílový sloupec. Viz mapování na obrázku 29.

Nakonec klikněte na OK .

D. Přidat cíl OLE DB k vložení záznamů

Tato část vloží nové záznamy nalezené v SportsCars tabulky do dimSportsCars rozměrově.

Přetáhněte tedy Cíl OLE DB komponentu a pojmenujte ji Vložit nové záznamy do dimSportsCars. Poklepejte na něj a nastavte připojení a cílovou tabulku. Viz obrázek 30.

Jak je znázorněno na obrázku 30, nastavte připojení k datovému skladu (obrázek 8) a vyberte dimSportsCars tabulka rozměrů.

Dále klikněte na Mapování stránku, abyste zjistili, zda jsou sloupce odpovídajícím způsobem mapovány. Protože názvy sloupců jsou stejné ve zdroji i v cíli, budou mapovány automaticky.

Nakonec klikněte na OK .

Výsledky za běhu balíčku

Nyní, když je balíček kompletní, zde je snímek obrazovky s výsledkem na obrázku 31.

Proces aktualizoval 8 řádků a vložil 1 nový řádek do dimSportsCars tabulka rozměrů.

Přírůstkové zatížení v SSIS pomocí vyhledávání

Další metodou, jak provést přírůstkové načítání, je porovnat zdroj s cílem, abyste viděli, co je třeba vložit, aktualizovat a odstranit. A toto je vaše možnost, pokud neexistuje sloupec DateTime a žádné tabulky CDCon. Jedním ze způsobů, jak toho dosáhnout, je použít Vyhledat Transformace.

Typické přísady pro tento přístup jsou znázorněny na obrázku 32.

Všimněte si, že jednoduchý přístup na obrázku 32 je použitelný pro tabulky, které neumožňují tvrdé mazání. Pokud je potřeba zpracovat odstranění, může být použito sloučení spojení pomocí úplného spojení.

V této sekci jsou 2 podtémata:

Vytvoření balíčku SSIS pro přírůstkové zatížení SSIS pomocí vyhledávání
Výsledky za běhu balíčku

Pojďme se ponořit.

Vytvoření balíčku SSIS pro přírůstkové zatížení SSIS pomocí vyhledávání

Naším cílem je načíst řady výrobců tabulky do dimManufacturers rozměrově.

To předpokládá, že máte připravený prázdný balíček SSIS.

Níže je uveden souhrn kroků:

KROK 1. Vytvořte 2 připojení OLE DB
KROK 2. Přidat úlohu toku dat

Začněme příkladem.

KROK #1. Vytvořte 2 připojení OLE DB

Můžete se podívat na obrázek 19 pro zdroj a obrázek 7 pro cíl. Zde používáme stejné správce připojení.

KROK #2. Přidat úlohu toku dat

Přetáhněte Úlohu toku dat v Control Flow a pojmenujte jej Aktualizovat tabulku dimenzí výrobce. Poklepejte na něj a postupujte podle následujících kroků. Níže jsou shrnuty kroky v rámci úlohy toku dat .

A. Přidejte zdroj OLE DB
B. Přidejte Vyhledat Transformace pro vyhledávání nových záznamů
C. Přidejte Cíl OLE DB vkládat záznamy.
D. Přidat další Vyhledání Transformace pro skenování změn
E. Přidejte příkaz OLE DB pro aktualizaci cílové tabulky

A. Přidat zdroj OLE DB

Přetáhněte Zdroj OLE DB a označte jej Výrobci . Nastavte Správce připojení jak je vidět na obrázku 33.

B. Přidejte vyhledávací transformaci pro vyhledávání nových záznamů

Toto Vyhledání Transformation vyhledá záznamy, které v cíli neexistují na základě ManufacturerID klíčový sloupec. A všechny neodpovídající řádky jsou kandidáty na vložení tabulky.

Přetáhněte Vyhledat transformace a pojmenujte ji Vyhledejte dimManufacturers. Poté na něj dvakrát klikněte.

Nastavení pro Obecné stránka by měla být stejná jako na obrázku 24. Mezitím nastavte připojení k datovému skladu a použijte dotaz na Připojení nastavení stránky. Viz obrázek 34.

C. Přidat cíl OLE DB k vložení záznamů

Přetáhněte Cíl OLE DB a pojmenujte jej Vložit nové záznamy. Připojte jej k Vyhledat Transformace a vyberte Lookup No Match Output když se objeví výzva. Poklepejte na něj a nastavte připojení a cílovou tabulku, jak je vidět na obrázku 35.

Zdrojové a cílové tabulky mají stejné názvy sloupců a budou se mapovat automaticky. Viz obrázek 36.

Nakonec klikněte na OK .

D. Přidejte další transformaci vyhledávání pro vyhledávání změn

Na rozdíl od předchozího Vyhledání Transformace, tento vyhledá změny v Výrobci sloupec. A pokud dojde ke změnám, bude to kandidát na aktualizaci tabulky.

Přetáhněte další Vyhledat Transformace a pojmenujte ji Vyhledat záznamy, které se změnily. Připojte jej k prvnímu Vyhledání Proměna. Obecné stránka pro toto vyhledávání by měla být stejná jako na obrázku 24.

Mezitím Připojení stránka by měla vypadat jako na obrázku 37 níže.

Mezitím si všimněte mapování na obrázku 38.

Obrázek 38 ukazuje mapování prostřednictvím Výrobce název. Pokud se nerovná, dojde ke změně zdroje. A musí být zkopírován do cíle.

E. Přidejte příkaz OLE DB k aktualizaci cílové tabulky

Nastavení by měla být stejná jako na obrázku 29, kromě SQLCommand . Příkaz UPDATE by měl vypadat takto:

UPDATE dimManufacturers
set manufacturer = ?
where manufacturerID = ?

Upravte odpovídajícím způsobem mapování sloupců na parametry.

Výsledky za běhu balíčku

Hotovo? Poté spusťte balíček. Výsledky za běhu uvidíte stejné jako na obrázku 39.

Nejlepší nástroj pro načítání dat SSIS

Všechny příklady, které jsme měli dříve, používají předpřipravené komponenty, které pocházejí od společnosti Microsoft. I když je to pro některé projekty dost dobré, co když musíte integrovat cloudové i databázové zdroje prostřednictvím SSIS?

Zde vstupují do hry komponenty Devart SSIS. Tyto komponenty SSIS se pohodlně používají. A nabízejí vysoce výkonné načítání dat pomocí optimalizací specifických pro zdroje dat a pokročilého ukládání do mezipaměti. Mají také více než 40 zdrojů dat, včetně oblíbených RDBMS, jako jsou MySQL, PostgreSQL a Oracle. Zahrnuty jsou také cloudové služby jako Salesforce, HubSpot, Google Analytics a mnoho dalších. Takže stojí za to zkusit načíst miliony záznamů do SSIS pomocí komponent Devart SSIS.

Proč ne příklad?

Použití komponent Devart SSIS k provádění přírůstkového zatížení

Zkusme replikovat dimManufacturers tabulky do MySQL a použijte Devartův Lookup a Cíl komponenty pro MySQL. Recept je znázorněn na obrázku 40.

Začněme přidáním nového balíčku SSIS do vašeho projektu Visual Studio Integration Services. Poté přidejte Data FlowTask a dvakrát na něj klikněte. Poté postupujte podle níže uvedených kroků.

Předtím je zde shrnutí kroků:

KROK 1. Přidejte zdroj OLE DB
KROK 2. Přidejte Devart MySQL Connection Manager
KROK #3. Přidejte Devart MySQL Lookup pro vyhledání nových záznamů
KROK 4. Přidejte další Vyhledávání Devart MySQL Transformation to scan for changes
STEP #5. Add a Devart MySQL Destination to insert records
STEP #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 table.
  3. In Lookup Columns , mark checked the ManufacturerID sloupec.
  4. Then, in Input Columns , select ManufacturerID .
  5. Then, select ManufacturerID in Reference Columns .
  6. Finally, click OK .

POZNÁMKA :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.

Závěr

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. Jak mohu dát databázi pod git (řízení verzí)?

  2. Jak modelovat pro snadnou údržbu databáze

  3. Problém hibernace s Oracle Trigger pro generování ID ze sekvence

  4. Jak vypsat cizí klíče tabulky