Database
 sql >> Baza danych >  >> RDS >> Database

Obciążenie przyrostowe w SSIS

Ludzie coraz bardziej się spieszą. Chcą swoich danych prawie teraz. Co więcej, dane stają się coraz większe. Nie możesz więc używać starych dobrych technik, ponieważ są „wystarczająco dobre”. Musi być szybki. A kroki ETL nie są wyjątkiem. Tutaj do gry wchodzi przyrostowe obciążenie. A jeśli jesteś na tej stronie, prawdopodobnie szukasz przyrostowego obciążenia w SSIS.

I na tym skupiamy się w tym artykule. Zamierzamy dokonać porównań i przykładów, aby krok po kroku wyjaśnić przyrostowe ładowanie danych w SSIS. Zapewniamy, że nie złamie ci głowy, gdy to rozgryziesz.

Oto, co Cię czeka:

  • Co to jest pełne i przyrostowe obciążenie w ETL?
  • Co to jest przyrostowe ładowanie danych w SSIS?
  • Różnice między pełnym obciążeniem a przyrostowym obciążeniem w SSIS
  • Przyrostowe ładowanie w SSIS za pomocą CDC lub zmiany przechwytywania danych
  • Przyrostowe ładowanie w SSIS przy użyciu kolumn DateTime
  • Jak wykonać przyrostowe ładowanie w SSIS za pomocą funkcji Lookup
  • Najlepsze narzędzie do ładowania danych SSIS

Każda sekcja będzie miała podsekcje. Możesz przejść do odpowiedniego tematu, klikając linki.

Zanim zaczniemy od przykładów, porównajmy obciążenie przyrostowe z jego przeciwieństwem, pełnym obciążeniem.

Co to są pełne obciążenie i przyrostowe obciążenie w ETL

Bez względu na to, jakich narzędzi ETL używasz, obciążenia pełne i przyrostowe mają to samo znaczenie. Opiszmy je poniżej.

Pełne obciążenie w ETL

Jak sama nazwa wskazuje, Full Load in ETL ładuje WSZYSTKIE dane ze źródła do miejsca docelowego. Tabela docelowa jest obcinana przed załadowaniem wszystkiego ze źródła. Dlatego ta technika jest również znana jako Destructive Load . Ta technika jest również łatwiejsza do wykonania. Zapewnia to również najwyższą integralność danych. Ale rozmiar Twoich danych dzisiaj jest większy niż wczoraj. Tak więc, jeśli użyjesz tego na stale rosnących danych, proces będzie z czasem wolniejszy.

Przypadki użycia pełnego obciążenia ETL

  • Rozmiar danych źródłowych jest niewielki i nie zwiększy się znacząco w nadchodzących latach. Przykłady obejmują listę kolorów, kilka kategorii/klasyfikacji, listę krajów i miast oraz wiele innych.
  • Trudno powiedzieć, co jest nowe lub zmienione w źródle.
  • Dane muszą być dokładnie takie same od źródła do miejsca docelowego
  • Historia danych jest nieistotna i jest częściej nadpisywana

Przyrostowe obciążenie w ETL

Tymczasem Incremental Load jest taki, jak sugeruje nazwa. Tylko zmienione dane zostaną załadowane ze źródła do miejsca docelowego. Odbywa się to stopniowo w czasie. Te, które się nie zmieniły, pozostaną bez zmian. To trochę trudne do zrobienia. Musisz upewnić się, że wszystkie zmiany zostały zebrane i załadowane do miejsca docelowego. Ale to będzie działać szybciej niż pełne ładowanie na bardzo dużych danych.

Przypadki użycia przyrostowego obciążenia ETL

  • Rozmiar danych jest bardzo duży i zapytania będą bardzo powolne dla dużych zestawów wyników
  • Zmiany są łatwe do zapytania
  • Usunięte dane muszą być przechowywane w miejscu docelowym, takim jak system kontroli

Co to jest przyrostowe obciążenie w SSIS

Podstawowe składniki przyrostowego obciążenia w SSIS pokazano na rysunku 1.

Ładowanie przyrostowe w usługach SSIS jest zwykle bardziej złożone w zależności od wymagań. Ale prosta „karta z przepisem” na rysunku 1 zawiera to, czego potrzebujesz, aby „ugotować” dane w przyrostach. Wychwytywanie zmian w danych to trudna część. Możesz zepsuć miejsce docelowe, jeśli nie będziesz ostrożny.

W kolejnych sekcjach zobaczysz, jak wykonać przyrostowe ładowanie w SSIS z przykładami. Obejmują one używanie ChangeData Capture (CDC), kolumn DateTime i odnośników. Zobaczysz również, jak to się robi przy użyciu komponentów Devart SSIS.

Porównajmy przyrostowe obciążenie z pełnym obciążeniem w SSIS w następnej sekcji.

Różnica między pełnym obciążeniem a przyrostowym obciążeniem w SSIS

Widziałeś już, jak wygląda obciążenie przyrostowe w SSIS (rysunek 1). Tymczasem oto jak to działa z pełnym obciążeniem SSIS na rysunku 2 poniżej.

Różnica między obciążeniem pełnym a obciążeniem przyrostowym w usługach SSIS tkwi w projekcie pakietu. Projekt z pełnym obciążeniem wymaga mniejszej liczby komponentów przeciąganych do pakietu SSIS. To tak proste, że wymaga niewiele myślenia. Właśnie dlatego z powodu fałszywego poczucia produktywności niektórzy programiści przez większość czasu uciekają się do tej techniki.

Jednak uruchamianie pakietu projektowego z pełnym obciążeniem co noc nie jest wskazane w przypadku dużych ilości danych, powiedzmy 15 TB. Czy myślisz, że skończy się na czas, zanim użytkownicy przybędą rano? Tak się nie stanie, ponieważ próbujesz ponownie wstawić rekordy, które w ogóle się nie zmieniły. Jeśli jest to około 70% danych, potrzebujesz więcej przestojów w zależności od zasobów serwera.

To niedopuszczalne.

Tak więc, im więcej musisz użyć obciążenia przyrostowego w tych scenariuszach. W kolejnych sekcjach dowiesz się, jak szybciej ładować dane za pomocą ładowania przyrostowego.

Przyrostowe ładowanie inSSIS przy użyciu CDC

Najpierw rozważmy użycie Change Data Capture (CDC). Zauważ, że od tego miejsca do następnych 3 przykładów, będziemy używać prostych przykładów. Tak więc projekt opakowania nie zaburzy celu.

Zanim zaczniemy od przykładu, w tej sekcji omówimy następujące kwestie:

  • Po pierwsze, jak włączyć CDC w bazie danych i tabeli
  • Następnie tworzenie pakietu SSIS dla przyrostowego obciążenia SSIS za pomocą CDC
  • Na koniec uruchamianie i sprawdzanie wyników

Rysunek 3 przedstawia elementy składowe tego przykładu.

Zmiana rekordów przechwytywania danych (CDC) wstawia, usuwa i aktualizuje w tabeli. Aby ten przykład zadziałał, potrzebujesz bazy danych i tabeli skonfigurowanej dla CDC.

Jak włączyć CDC w bazie danych i tabeli

Ustawienia bazy danych i tabel domyślnie nie zawierają CDC. Aby utworzyć bazę danych z obsługą CDC, oto składnia 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

Następnie, aby sprawdzić, czy CDC jest rzeczywiście włączone, uruchom to:

select name from sys.databases
where is_cdc_enabled=1

Jeśli pojawi się nazwa bazy danych, którą włączyłeś dla CDC, możesz zacząć. Twoja baza danych obsługuje teraz CDC.

Ale to się nie kończy. Musisz określić, którą tabelę chcesz śledzić pod kątem wszelkich zmian. sp_cdc_enable_table da rade. Poniżej znajduje się tego przykład.

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

Uruchomienie powyższego kodu powinno spowodować wyświetlenie podobnych komunikatów poniżej:

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

Te komunikaty to 2 nowe zadania SQL Server Agent utworzone po włączeniu tabeli dla CDC. Dlatego potrzebujesz SQL Server Agent, aby CDC działał. Zobacz zrzut ekranu na rysunku 4.

Wstawianie, usuwanie i aktualizowanie sportsCarSales tabela automatycznie zapisze zmiany w innej tabeli o nazwie cdc.dbo_sportsCarSales_CT . Ta tabela ma kolumny takie jak w oryginale. Zobacz zrzut ekranu na rysunku 5.

_$operacja Szczególnie interesująca jest kolumna w lewej tabeli. Możliwe wartości dla tej kolumny to 1 (Usuń), 2 (Wstaw), 3 i 4 (Aktualizacja). Aktualizacja wykorzystuje 2 wartości:jedną dla wartości kolumn przed aktualizacja (to 3). A drugi dla wartości kolumn po aktualizacja (to 4). Możesz sprawdzić tę kolumnę podczas sprawdzania wartości przed uruchomieniem pakietu SSIS. Źródło CDCS i Rozdzielacz CDC komponenty używają tej tabeli podczas identyfikowania zmian. Więcej na ten temat w następnej sekcji.

Tworzenie pakietu SSIS dla przyrostowego ładowania SSIS za pomocą CDC

Oto kroki tworzenia pakietu SSISpackage z przyrostowym ładowaniem przy użyciu CDC. Zakłada się, że masz już pusty pakiet w programie Visual Studio 2019. Naszym celem jest załadowanie wierszy z sportsCarSales tabeli do FactSportsCarSales tabela faktów w hurtowni danych.

Poniżej znajduje się podsumowanie kroków:

KROK 1. Utwórz 2 menedżerów połączeń z bazą danych
KROK 2. Przeciągnij 2 zadania kontrolne CDC do przepływu sterowania
KROK 3. Przeciągnij zadanie przepływu danych i połącz się z zadaniem kontrolnym CDC

KROK 1. Utwórz 2 menedżerów połączeń z bazą danych

Potrzebujemy tutaj 2 połączeń z bazą danych. Jednym z nich jest połączenie ADO.Net, które powinno wskazywać na bazę danych z obsługą CDC. A następnie utwórz połączenie OLE DB z magazynem danych jako miejsce docelowe. Obie są bazami danych SQL Server 2019. Patrz odpowiednio rysunki 6 i 7. W tym przykładzie obie bazy danych znajdują się na tym samym komputerze. Do połączenia używamy uwierzytelniania Windows.

Tak więc w Menedżerze połączeń kliknij prawym przyciskiem myszy i wybierz Nowe połączenie ADO.Net . Następnie wypełnij ustawienia serwera, uwierzytelniania i bazy danych, jak pokazano na rysunku 6 poniżej.

Następnie utwórz połączenie OLE DB z magazynem danych. W oknie Menedżera połączeń kliknij prawym przyciskiem myszy i wybierz Nowe połączenie OLE DB . Następnie podaj nazwę serwera, uwierzytelnienia i bazy danych. Określ tutaj hurtownię danych.

KROK 2. Przeciągnij 2 zadania kontrolne CDC do przepływu sterowania

Są 2 rzeczy, które musimy zrobić po przeciągnięciu zadania kontrolnego CDC w Przepływie Kontroli.

Oznacz początek CDC

Najpierw musimy skonfigurować zadanie kontrolne CDC, aby oznaczyć CDC Start. A następnie utwórz tabelę stanu CDC. Można to zrobić w jednym oknie konfiguracyjnym. Zobacz Rysunek 8 poniżej.

Postępując zgodnie z ponumerowanymi krokami na Rysunku 9, poniżej znajdują się szczegóły.

  1. Wybierz połączenie ADO.Net, które utworzyliśmy na rysunku 6.
  2. Następnie wybierz Oznacz początek CDC .
  3. Kliknij Nowy aby utworzyć zmienną stanu CDC. Następnie pojawi się okno. Kliknij OK aby utworzyć domyślną nazwę zmiennej User::CDC_State .
  4. Wybierz połączenie ADO.Net, abyśmy mogli przechowywać stan CDC w tej bazie danych.
  5. Kliknij Nowy stworzyć tabelę do przechowywania stanu. Skrypt jest już dla Ciebie stworzony. Więc po prostu kliknij Uruchom w następnym oknie.
  6. Następnie wybierz CDC_State jako nazwę stanu.
  7. Na koniec kliknij OK .

Po skonfigurowaniu tego zadania kontrolnego CDC uruchom pakiet. Nie zobaczysz jeszcze rekordów skopiowanych do innej bazy danych. Ale tabela stanów (dbo.cdc_state ) zostaną wypełnione wartościami początkowymi.

W tym miejscu możesz wyłączyć to zadanie kontrolne CDC lub nadpisać je ponownie nowymi wartościami w następnym zadaniu.

Pobierz zakres przetwarzania

Przeciągnij nowe zadanie kontrolne CDC do przepływu kontrolnego lub nadpisz poprzednie. Konfiguracja jest taka sama jak na rysunku 9, z wyjątkiem operacji sterowania CDC (#2). Tym razem wybierz Pobierz zakres przetwarzania . Następnie kliknij OK . Połącz to z zadaniem przepływu danych w KROKU #3 później.

Zaznacz przetworzony zakres

Skonfiguruj drugie zadanie kontrolne CDC tak jak pierwsze, ale tym razem wybierz Oznacz przetworzony zakres dla operacji sterowania CDC. Połącz z tym zadanie przepływu danych w KROKU #3.

Krok 3. Przeciągnij zadanie przepływu danych i połącz się z zadaniem CDCControl

To zadanie przepływu danych wykona wyodrębnianie i ładowanie, jak pokazano na rysunku 3 wcześniej. Zanim zagłębimy się w szczegóły każdego kroku, oto podsumowanie:

A. Dodaj źródło CDC
B. Dodaj rozdzielacz CDC i podłącz go do źródła CDC
C. Dodaj polecenie OLE DB, aby usunąć rekordy
D. Dodaj miejsce docelowe OLE DB, aby wstawić rekordy
E. Dodaj kolejne polecenie OLE DB, aby zaktualizować rekordy

Teraz zanurkujmy.

A. Dodaj źródło CDC

Przeciągnij Źródło CDC komponent z ustawieniami pokazanymi na Rysunku 9 poniżej.

Postępując zgodnie z ponumerowanymi krokami przedstawionymi na rysunku 9, znajdują się następujące szczegóły:

  1. Najpierw wybierz połączenie ADO.Net, które utworzyliśmy na rysunku 6.
  2. Następnie wybierz tabelę z obsługą CDC sportsCarSales .
  3. Wybierz instancję przechwytywania dbo_SportsCarSales .
  4. Następnie wybierz Sieć dla trybu przetwarzania CDC. Zwróci to tylko zmiany netto. Szczegółowy opis każdego trybu przetwarzania znajduje się pod tym linkiem. Możesz także kliknąć Podgląd aby zobaczyć, jakie wiersze zostaną uwzględnione.
  5. Wybierz zmienną stanu CDC, którą utworzyliśmy wcześniej (Rysunek 9).
  6. Na koniec kliknij OK .
B. Dodaj rozdzielacz CDC i podłącz go do źródła CDC

Jedyny wymóg rozgałęźnika CDC jest źródłem CDC poprzedzający go. Podłącz więc Źródło CDC wcześniej do tego komponentu. Spowoduje to oddzielenie zmian od wstawek, aktualizacji i usunięć.

C. Dodaj polecenie OLE DB, aby usunąć rekordy

Najpierw musisz oznaczyć ten komponent jako Usuń rekordy (patrz rysunek 3). Następnie podłącz go do rozdzielacza CDC. Gdy pojawi się monit, wybierz Usuń wyjście dla wyjścia i kliknij OK .

Następnie skonfiguruj polecenie OLE DB menedżery połączeń patka. Zobacz rysunek 10.

Następnie w Właściwościach komponentu określ polecenie DELETE dla SQLCommand własność. Polecenie powinno wyglądać tak:

DELETE FROM FactSportsCarSales
WHERE SalesID = ?

Zobacz zrzut ekranu na rysunku 11 poniżej.

Znak zapytania utworzy parametr dla SalesID . Każdy Identyfikator sprzedaży wartość pochodząca z CDCSplitter będzie używany do usuwania wierszy w FactSportsCarSales tabela.

Następnie w Mapowaniach kolumn zmapuj Identyfikator sprzedaży kolumny tabeli do parametru (Param_0 ) Patrz rysunek 12.

Na koniec kliknij OK.

D. Dodaj miejsce docelowe OLE DB, aby wstawić rekordy

Najpierw przeciągnij Miejsce docelowe OLE DB . Następnie oznacz go etykietą Wstaw rekordy . Podłącz to do rozdzielacza CDC . Następnie wybierz Wstaw wyjście gdy pojawi się monit okna. Patrz Rysunek 14, aby zapoznać się z podstawowymi ustawieniami.

Postępując zgodnie z ponumerowanymi krokami na rysunku 13, poniżej znajdują się szczegóły:

  1. Najpierw wybierz połączenie OLE DB, które utworzyliśmy na rysunku 7.
    Następnie wybierz FactSportsCarSales tabela faktów.
  2. Na koniec kliknij OK .
E. Dodaj polecenie OLE DB do aktualizacji rekordów

Przeciągnij kolejne polecenie OLE DB i oznacz go Aktualizuj rekordy. Następnie podłącz go do rozdzielacza CDC . Automatycznie wybierze UpdateOutput wyjście. Menedżerowie połączeń ustawienie tabulatora powinno być takie samo jak na rysunku 11.

Ale Component PropertiesSQLCommand powinien mieć taką wartość:

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

Liczba znaków zapytania w powyższym kodzie wskazuje, ile parametrów należy użyć, zaczynając od Param_0 .Pozycja parametrów z Param_0 do Param_5 są ułożone na podstawie ich miejsca w kodzie. A więc Param_0 isfor Identyfikator klienta , Param_1 dotyczy SportsCarID i tak dalej.

Sprawdź Odwzorowania kolumn na rysunku 15.

Po skonfigurowaniu CDC na poziomie bazy danych i tabeli, sposobem na sprawdzenie działania CDC jest dodanie i zmiana wierszy. Dodajmy więc kilka rekordów do tabeli.


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

Aby sprawdzić, czy jest to zarejestrowane w CDC, wykonaj zapytanie cdc.dbo_sportsCarSales_CT tabela.

SELECT * FROM cdc.dbo_sportsCarSales_CT;

Sprawdź wyniki przechwytywania danych zmian po poleceniu INSERT na rysunku 15.

Więc nagrał wstawki. To dobrze.

Teraz spróbuj wcześniej uruchomić pakiet SSIS. Wynik powinien być taki sam jak na rysunku 16 poniżej.

Rysunek 16 . Wynik działania pakietu SSIS dla przyrostowego obciążenia przy użyciu CDC.

I na koniec zapytanie o wyniki w FactSportsCarSales tabela pokazuje ten sam zestaw 4 rekordów.

Przyrostowe ładowanie w SSIS przy użyciu kolumn DateTime

Przyrostowe ładowanie w usługach SSIS przy użyciu DateTimecolumns to kolejny sposób gromadzenia danych w przyrostach. Jeśli zdarzy ci się wykonać ETL w tabeli bez CDC, to jest twoja kolejna opcja.

Tabela źródłowa może mieć Zmodyfikowany lub Ostatnia aktualizacja kolumna taka jak na rysunku 17.

Aby zapytać o zmiany, należy znać maksymalną liczbę zmodyfikowanych wartość kolumny z miejsca docelowego. Następnie sprawdź wszystkie rekordy ze źródła, które mają większą wartość niż Zmodyfikowane wartość kolumny z miejsca docelowego.

Typowe składniki tej techniki pokazano na rysunku 18.

Postępuj zgodnie ze wskazówkami, jak przyrządzić ten rodzaj wsadu przyrostowego. Poniżej znajdują się podtematy tej sekcji:

  • Tworzenie pakietu do przyrostowego ładowania SSIS z kolumnami DateTime
  • Wyniki działania pakietu

Tworzenie pakietu do przyrostowego ładowania SSIS z kolumnami DateTime

Naszym celem jest załadowanie SportsCars tabeli do dimSportsCars tabeli wymiarów w innej bazie danych. Poniżej znajduje się podsumowanie kroków:

KROK 1. Utwórz 2 menedżerów połączeń OLE DB
KROK 2. Utwórz 2 zmienne pakietu
KROK 3. Dodaj Wykonaj zadanie SQL w Przepływie Kontroli
KROK 4. Dodaj zadanie przepływu danych

Zacznijmy.

KROK 1. Utwórz 2 menedżerów połączeń OLE DB

Pierwsze połączenie OLE DB pochodzi z transakcyjnej bazy danych. A ustawienia są proste, jak pokazano na rysunku 19.

Następnie utwórz kolejne połączenie OLE DB z magazynem danych. Powinno być takie samo jak na rysunku 7.

KROK 2. Utwórz 2 zmienne pakietu

Pierwsza zmienna będzie zawierać datę ostatniej modyfikacji z dimSportsCars tabela wymiarów. Następnie drugi będzie zawierał niestandardowe zapytanie SQL.

A. Utwórz zmienną User::sportsCars_lastUpdate
  1. W Zmiennych w oknie kliknij Dodaj zmienną .
  2. Nazwij go sportsCars_lastupdate .
  3. Ustaw typ danych na DateTime .
B. Utwórz zmienną User::sqlCommand
  1. W Zmiennych w oknie kliknij Dodaj zmienną .
  2. Nazwij go sqlCommand .
  3. Ustaw typ na Ciąg .
  4. Kliknij przycisk wielokropka, aby utworzyć Wyrażenie . Zobacz Rysunek 21 dla Konstruktora wyrażeń okno i rzeczywiste wyrażenie tekstowe.
  5. Kliknij OK .

Ciąg SQL powinien wyglądać tak:

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

Zauważ, że ustawiliśmy klauzulę WHERE na Zmodyfikowane większy niż User::sportsCars_lastupdate .

Więcej szczegółów na temat ustawiania 2 zmiennych będzie dostępnych w kolejnych krokach.

KROK #3. Dodaj wykonanie zadania SQL w przepływie sterowania

To zadanie spowoduje wysłanie zapytania do tabeli docelowej, aby uzyskać ostatnią zmodyfikowaną wartość daty. Przeciągnij Wykonaj zadanie SQL do przepływu sterowania. Następnie oznacz go etykietą Pobierz datę ostatniej modyfikacji z DW . Następnie zobacz ustawienia na rysunku 21.

Ważne właściwości, które należy tutaj ustawić, to Połączenie , Oświadczenie SQL i Zestaw wyników właściwości.

Ustaw Połączenie właściwość do drugiego połączenia OLE DB ustawionego w KROKU #1. Następnie ustaw SQLStatement do poniższego kodu.

select max(modified) as LastUpdate from dimSportsCars

Następnie ustaw Zestaw wyników właściwość do Pojedynczego wiersza .

Na koniec musisz zmapować LastUpdate alias kolumny (patrz kod powyżej) do User::sportsCars_lastupdate zmienny. Zobacz zrzut ekranu na rysunku 22.

Na koniec kliknij OK aby zapisać nowe ustawienia.

KROK 4. Dodaj zadanie przepływu danych

Przeciągnij zadanie przepływu danych do Przepływu Kontroli i połącz Wykonaj zadanie SQL do niego. Następnie nazwij Zadanie przepływu danych Zaktualizuj wymiar dimSportsCars . Następnie postępuj zgodnie z instrukcjami, aby dodać komponenty do zadania przepływu danych .

Zadanie przepływu danych zawiera kilka kroków:

A. Dodaj źródło OLE DB
B. Dodaj przekształcenie wyszukiwania, aby porównać źródło z miejscem docelowym
C. Dodaj polecenie OLE DB, aby zaktualizować rekordy
D. Dodaj miejsce docelowe OLE DB, aby wstawić rekordy

Teraz zacznijmy.

A. Dodaj źródło OLE DB

To Źródło OLE DB zapyta tabelę źródłową o zmienione rekordy. Zobacz ustawienia na rysunku 23.

Po numerach na Rysunku 23, oto szczegóły:

  1. Najpierw określ utworzone połączenie OLE DB. Zobacz rysunek 20.
  2. Następnie ustaw tryb dostępu do danych do polecenia SQL z zmienna .
  3. Następnie wybierz zmienną User::sqlCommand, którą utworzyliśmy wcześniej. Zobacz rysunek 21.
  4. Na koniec kliknij OK .
B. Dodaj transformację wyszukiwania, aby porównać źródło z miejscem docelowym

Teraz musimy mieć sposób na porównanie tabel źródłowych i docelowych. Możemy użyć Wyszukiwania Komponent transformacji, aby to zrobić. Spowoduje to połączenie między dwiema tabelami.

Przeciągnij więc Wyszukiwanie Transformacja w przepływie danych i nazwij ją Sklasyfikuj zmianę . Następnie podłącz go do Źródła OLE DB wcześniej. Kliknij go dwukrotnie. Zobacz Rysunek 24, aby skonfigurować Ogólne strona.

Ustaw menu rozwijane na Przekieruj wiersze na brak wyników dopasowania jak widać na rysunku 24. Oznacza to, że użyjemy wierszy, które nie mają dopasowania. W tym przypadku służy to wykrywaniu wierszy obecnych w źródle, ale nie w miejscu docelowym.

Następnie kliknij Połączenie w lewym okienku Edytora transformacji wyszukiwania . Następnie zobacz Rysunek 25, co należy ustawić.

Na rysunku 26 musisz określić połączenie OLE DB dla tabeli docelowej. (Patrz Rysunek 7). A następnie ustaw zapytanie SQL na poniższy kod.

SELECT SportsCarID from dimSportsCars

Potrzebujemy tylko SportsCarID kolumny do porównania, więc użyliśmy zapytania zamiast całej tabeli.

Następnie kliknij Kolumny stronę, aby ustawić mapowanie kolumny klucza zapytania źródłowego na miejsce docelowe. Zobacz Rysunek 26 dla mapowania.

Jak widać na rysunku 26, powinna istnieć linia od źródła do celu przy użyciu SportsCarID kluczowa kolumna. Do porównania zostaną użyte obie kluczowe kolumny.

Na koniec kliknij OK .

C. Dodaj polecenie OLE DB, aby zaktualizować rekordy

Ta część zaktualizuje rekordy, które pasują do SportsCarID kluczowe wartości z Wyszukiwania Transformacja.

Przeciągnij więc polecenie OLE DB w przepływie danych i nazwij go Aktualizuj dimSportsCars . Następnie podłącz go do Wyszukiwarki Transformacja wcześniej. Gdy pojawi się monit, ustaw Wyjście do Sprawdź wyniki dopasowania . Następnie kliknij OK .

Kliknij dwukrotnie polecenie OLE DB i ustaw właściwości w Menedżerze połączeń patka. Zobacz rysunek 27.

Rysunek 27 pokazuje, że musisz ustawić Menedżera połączeń do docelowej bazy danych (patrz rysunek 8). Następnie kliknij Właściwości komponentu patka. Zobacz Rysunek 28 dla ustawień właściwości.

Właściwość SQLCommand jest ustawiona na:

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

Zrobiliśmy już coś podobnego wcześniej. Znaki zapytania są symbolami zastępczymi parametrów. A jeśli zmapujemy poprawną kolumnę źródłową, zostanie ustawiona odpowiednia kolumna docelowa. Zobacz mapowania na rysunku 29.

Na koniec kliknij OK .

D. Dodaj miejsce docelowe OLE DB, aby wstawić rekordy

Ta część wstawi nowe rekordy znalezione w SportsCars tabeli do dimSportsCars wymiarowa.

Przeciągnij więc Miejsce docelowe OLE DB i nazwij go Wstaw nowe rekordy w dimSportsCars. Kliknij go dwukrotnie i ustaw połączenie i tabelę docelową. Zobacz Rysunek 30.

Jak pokazano na Rysunku 30, ustaw połączenie z hurtownią danych (Rysunek 8) i wybierz dimSportsCars tabela wymiarów.

Następnie kliknij Odwzorowania page, aby sprawdzić, czy kolumny są odpowiednio zmapowane. Ponieważ nazwy kolumn są takie same w źródle i celu, zostaną one zmapowane automatycznie.

Na koniec kliknij OK .

Wyniki działania pakietu

Teraz, gdy pakiet jest gotowy, oto zrzut ekranu z wynikiem na rysunku 31.

Proces zaktualizował 8 wierszy i wstawił 1 nowy wiersz do dimSportsCars tabela wymiarów.

Przyrostowe obciążenie w SSIS za pomocą wyszukiwania

Inną metodą ładowania przyrostowego jest porównanie źródła z celem, aby zobaczyć, co należy wstawić, zaktualizować i usunąć. I to jest twoja opcja, jeśli nie ma kolumny DateTime i nie ma CDCon w obu tabelach. Jednym ze sposobów, aby to zrobić, jest użycie Lookup Transformacja.

Typowe składniki tego podejścia pokazano na rysunku 32.

Zauważ, że proste podejście przedstawione na rysunku 32 ma zastosowanie do tabel, które nie pozwalają na trwałe usuwanie. Jeśli konieczne jest obsłużenie usunięcia, może być zastosowane połączenie scalające przy użyciu pełnego dołączenia.

W tej sekcji są 2 podtematy:

Tworzenie pakietu SSIS dla przyrostowego obciążenia SSIS za pomocą funkcji Lookup
Wyniki działania pakietu

Zanurzmy się.

Tworzenie pakietu SSIS dla przyrostowego obciążenia SSIS za pomocą wyszukiwania

Naszym celem jest załadowanie wierszy Producentów tabeli do dimManufacturers wymiarowa.

Zakłada się, że masz gotowy pusty pakiet SSIS.

Poniżej znajduje się podsumowanie kroków:

KROK 1. Utwórz 2 połączenia OLE DB
KROK 2. Dodaj zadanie przepływu danych

Zacznijmy od przykładu.

KROK 1. Utwórz 2 połączenia OLE DB

Możesz odnieść się do rysunku 19 dla źródła i rysunku 7 dla celu. Używamy tutaj tych samych menedżerów połączeń.

KROK 2. Dodaj zadanie przepływu danych

Przeciągnij zadanie przepływu danych w Przepływie sterowania i nazwij go Zaktualizuj tabelę wymiarów producentów. Kliknij go dwukrotnie i wykonaj kolejne kroki. Poniżej podsumowano kroki w zadaniu przepływu danych .

A. Dodaj Źródło OLE DB
B. Dodaj wyszukiwanie Transformacja do skanowania w poszukiwaniu nowych rekordów
C. Dodaj Miejsce docelowe OLE DB aby wstawić rekordy.
D. Dodaj kolejne wyszukiwanie Transformacja w poszukiwaniu zmian
E. Dodaj polecenie OLE DB zaktualizować tabelę docelową

A. Dodaj źródło OLE DB

Przeciągnij Źródło OLE DB i oznacz go Producenci . Ustaw Menedżera połączeń jak widać na rysunku 33.

B. Dodaj transformację wyszukiwania, aby wyszukać nowe rekordy

To wyszukiwanie Transformation będzie skanować w poszukiwaniu rekordów, które nie istnieją w miejscu docelowym na podstawie Identyfikatora Producenta kluczowa kolumna. Wszystkie niepasujące wiersze są kandydatami do wstawienia tabeli.

Przeciągnij wyszukiwanie transformacja i nazwij ją Lookup dimManufacturers. Następnie kliknij go dwukrotnie.

Ustawienia Ogólnego strona powinna być taka sama jak na rysunku 24. W międzyczasie ustaw połączenie z hurtownią danych i użyj zapytania dla Połączeń ustawienia strony. Zobacz Rysunek 34.

C. Dodaj miejsce docelowe OLE DB, aby wstawić rekordy

Przeciągnij Miejsce docelowe OLE DB i nazwij go Wstaw nowe rekordy. Połącz go z Wyszukiwarką Przekształć i wybierz Wyszukaj wyniki bez dopasowania gdy pojawi się monit. Kliknij go dwukrotnie i ustaw połączenie i tabelę docelową, jak pokazano na rysunku 35.

Tabele źródłowa i docelowa mają te same nazwy kolumn i będą mapowane automatycznie. Zobacz rysunek 36.

Na koniec kliknij OK .

D. Dodaj kolejną transformację wyszukiwania, aby wyszukać zmiany

W przeciwieństwie do poprzedniej wyszukiwania Transformacja, ten będzie skanować w poszukiwaniu zmian w producentu kolumna. A jeśli pojawią się zmiany, będzie to kandydat do aktualizacji tabeli.

Przeciągnij kolejne wyszukiwanie Transformacja i nazwij ją Rekordy wyszukiwania, które uległy zmianie. Podłącz go do pierwszego wyszukiwania Transformacja. Ogólny strona tego wyszukiwania powinna być taka sama jak na rysunku 24.

Tymczasem Połączenie strona powinna wyglądać jak na Rysunku 37 poniżej.

W międzyczasie zwróć uwagę na mapowania na rysunku 38.

Rysunek 38 przedstawia mapowania przez Producent nazwać. Jeśli nie jest równy, następuje zmiana źródła. I musi zostać skopiowany do celu.

E. Dodaj polecenie OLE DB, aby zaktualizować tabelę docelową

Ustawienia powinny być takie same jak na rysunku 29, z wyjątkiem SQLCommand . Polecenie UPDATE powinno wyglądać tak:

UPDATE dimManufacturers
set manufacturer = ?
where manufacturerID = ?

Dostosuj odpowiednio mapowania kolumn do parametrów.

Wyniki działania pakietu

Zrobione? Następnie uruchom pakiet. Zobaczysz wyniki działania takie same jak na rysunku 39.

Najlepsze narzędzie do ładowania danych SSIS

Wszystkie przykłady, które mieliśmy wcześniej, wykorzystują gotowe komponenty pochodzące od firmy Microsoft. Chociaż jest to wystarczająco dobre dla niektórych projektów, co zrobić, jeśli musisz zintegrować zarówno źródła w chmurze, jak i bazy danych za pośrednictwem SSIS?

W tym miejscu do gry wchodzą komponenty Devart SSIS. Te składniki SSIS są wygodne w użyciu. Oferują też wysokowydajne ładowanie danych przy użyciu optymalizacji specyficznych dla źródła danych i zaawansowanego buforowania. Mają też ponad 40 źródeł danych, w tym ulubione RDBMS, takie jak MySQL, PostgreSQL i Oracle. Dostępne są również usługi w chmurze, takie jak Salesforce, HubSpot, Google Analytics i wiele innych. Warto więc spróbować załadować miliony rekordów w SSIS za pomocą komponentów Devart SSIS.

Dlaczego nie przykład?

Korzystanie z komponentów Devart SSIS do wykonywania przyrostowego ładowania

Spróbujmy odtworzyć dimManufacturers tabeli do MySQL i użyj Lookup Devarta i Miejsce docelowe komponenty dla MySQL. Przepis pokazano na rysunku 40.

Zacznijmy od dodania nowego pakietu SSIS do projektu Visual Studio Integration Services. Następnie dodaj Zadanie przepływu danych i kliknij go dwukrotnie. Następnie wykonaj poniższe czynności.

Zanim to nastąpi, oto podsumowanie kroków:

KROK 1. Dodaj Źródło OLE DB
KROK 2. Dodaj Menedżera połączeń Devart MySQL
KROK 3. Dodaj Devart MySQL Lookup skanować w poszukiwaniu nowych rekordów
KROK 4. Dodaj kolejne Devart MySQL Lookup Transformacja w celu wyszukania zmian
KROK #5. Dodaj Miejsce docelowe Devart MySQL wstawić rekordy
KROK #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 stół.
  3. In Lookup Columns , mark checked the ManufacturerID column.
  4. Then, in Input Columns , select ManufacturerID .
  5. Then, select ManufacturerID in Reference Columns .
  6. Finally, click OK .

UWAGA :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.

Wniosek

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. Salesforce SOQL od Crystal Reports

  2. Trendy w bazach danych 2019 — SQL kontra NoSQL, najpopularniejsze bazy danych, pojedyncze a wielokrotne użycie bazy danych

  3. Jak pomnożyć dwie kolumny w SQL?

  4. Zaczekaj statystyki i magazyn zapytań

  5. Widoki SQL:jak pracować z widokami w SQL?