SSIS – Tworzenie prostego pakietu ETL

Posted: 12/05/2010 in Business Intelligence, MSDN, SQL Server 2008, SSIS
Tags: , , ,

Aby utworzyć jakikolwiek pakiet ETL (Extract, Transform, Load) należy uruchomić SSBIDS, czyli SQL Server Business Intelligence Development Studio. Następnie klikamy w File -> New -> Project (CTRL + Shift + N) i wybieramy Integration Services Project. Nadajemy mu nazwę oraz odpowiednią ścieżkę.

Po kliknięciu OK, Visual Studio utworzy nam projekt z pakietem *.dtsx. Następnie wchodzimy w Properties Window (lub wciskamy F4) i zmieniamy LocaleID na English (United States).

Teraz przejdźmy do dodawania plików płaskich i ustawiania zadań przepływu informacji.

W oknie Connection Managers klikamy prawym przyciskiem myszy i wybieramy New Flat File Connection.

W polu Connection manager name wpisujemy nazwę połączenia. Następnie klikamy Browse i wybieramy plik płaski z którego będziemy korzystać (przykładowe pliki powinny znajdować się w C:\Program Files\Microsoft SQL Server\100\Samples\Integration Services\Tutorial\Creating a Simple ETL Package\Sample Data folder). Locale zmieniamy ponownie na English (United States) a Code page ustawiamy na 1252 (ANSI – Latin I).

Następnie przechodzimy do zakładki Advanced gdzie będziemy mogli określić typ kolumn pliku oraz ich nazwy. Zmieniamy odpowiednio nazwy kolumn:

  • Column 0
  • – AverageRate

  • Column 1
  • – CurrencyID

  • Column 2
  • – CurrencyDate

  • Column 3
  • – EndOfDayRate

    Początkowo każda z tych kolumn ma wybrany typ danych string [DT_STR], a szerokość kolumny jest równa 50

    Jeśli nie wiesz jaki typ danych wybrać dla poszczególnych kolumn, kliknij przycisk Suggest Types…, za pomocą którego Integration Services powinno samo rozpoznać typ danych i zmienić odpowiednio konfigurację dla kolumn pliku płaskiego (chociaż uważam, że dużo lepiej jest wybrać samemu typ danych w kolumnach).

    Poza tym, w CurrencyID mogą się pojawić różne znaki określające walutę, dlatego lepiej jest użyć typu Unicode string [DT_WSTR]. Podobna zasada dotyczy kolumny z datą – CurrencyDate. Lepiej jest zmienić jej typ na Database timestamp [DT_DBTIMESTAMP]. Po wykonaniu tych zmian, klikamy OK.

    Następnie klikamy ponownie prawym przyciskiem na Connection Managers i wybieramy opcję New OLE DB Connection.

    W przypadku gdy nie mamy jeszcze skonfigurowanego tego połączenia, klikamy na przycisk New, wybieramy nazwę serwera oraz podłączenie do konkretnej bazy danych (w tym wypadku będzie to baza AdventureWorksDW).

    Jeśli chcemy możemy przetestować połączenie klikając na Test connection. Następnie klikamy dwa razy OK.

    Teraz rozwijamy boczny pasek Toolbox (CTRL + Alt + X), wybieramy Data Flow Task i wrzucamy na zakładkę Control Flow.

    W Properties tego elementu zmieniamy LocaleID na English (United States).

    Przechodzimy do zakładki Data Flow i wybieramy z Toolbox’aFlat File Source. Następnie klikamy dwukrotnie na nowo dodanym elemencie. We Flat file connection manager wybieramy nasz plik płaski. Przechodzimy do zakładki Columns i sprawdzamy czy wszystkie nazwy kolumn zgadzają się z tymi które ustawialiśmy poprzednio. Jeśli tak to klikamy OK, wchodzimy we właściwości i zmieniamy (jeśli trzeba) LocaleID zgodnie z wcześniejszymi ustaleniami.

    Teraz wybieramy z Toolbox’a element Lookup. Łączymy element Flat File Source z Lookup’em za pomocą zielonej strzałki a następnie klikamy podwójnie na naszym Lookup’ie. Wybieramy Full cache oraz OLE DB connection manager i przechodzimy do zakładki Connection. Tam wybieramy naszą bazę AdventureWorksDW oraz wymiar [dbo].[DimCurrency].

    Przechodzimy do zakładki Columns, gdzie łączymy ze sobą CurrencyID i CurrencyAlternateKey, a także zaznaczamy check-box przy CurrencyKey.

    Klikamy w OK i jeśli trzeba to zmieniamy LocaleID oraz DefaultCodePage (1252).

    Z Toolbox’a ponownie wybieramy element Lookup i łączymy go za pomocą zielonej strzałki z poprzednim Lookup’em.

    W trakcie łączenia elementów ukaże nam się okno Input Output Selection w którym musimy wybrać jako Output Lookup Match Output.

    Potem klikamy podwójnie na nowym Lookup’ie i w Cache mode wybieramy Partial cache. Przechodzimy do zakładki Connection i wybieramy tabele DimTime (baza oczywiście pozostaje ta co poprzednio).

    Potem przechodzimy do zakładki Columns i łączymy CurrencyDate z FullDateAlternateKey oraz zaznaczamy check-box przy TimeKey.

    No i na koniec już standardowo – LocaleID i CodePage ustawiamy zgodnie z wcześniejszymi zmianami.

    Jedziemy dalej. Wybieramy z Toolbox’a element zwany OLE DB Destination. Wrzucamy go na Data Flow i łączymy zieloną strzałką z ostatnio dodanym Lookup’em. Klikamy dwukrotnie na nowym elemencie i wybieramy bazę AdventureWorksDW. W liście wyboru tabel, wybieramy tabelę faktów [dbo].[FactCurrencyRate]. Następnie przechodzimy do zakładki Mappings i sprawdzamy czy kolumny AverageRate, EndOfDayRate, CurrencyKey oraz TimeKey są dobrze zmapowane. Jeśli tak jest to klikamy OK. W Properties OLE DB zmieniamy (jeśli trzeba) LocaleID i CodePage.

    Jeśli chcemy aby wszystkie nasze „klocki” miały ten sam rozmiar (wizualny) to zaznaczamy je, wchodzimy w menu Format -> Make Same Size -> Both.

    Jeśli chcesz dodać jakiś komentarz, kliknij gdziekolwiek prawym przyciskiem myszy na wolnej przestrzeni Data Flow i wybierz Add Annotation. Łamanie tekstu wykonuje się poprzez wciśnięcie CTRL + Enter w miejscu w którym chcemy zakończyć linię.

    W celu sprawdzenia czy wszystko nam działa należy uruchomić debuggowanie. W tym celu wybieramy z menu Debug -> Start debugging, albo wciskamy F5. Jeśli wszystko przebiegło bezproblemowo (a powinno), naszym oczom ukażą się zielone elementy w Data Flow wraz z informacją o ilości zmatchowanych wierszy.

    _________________________________________________________________________________________

    W taki oto prosty sposób udało nam się stworzyć pierwszy pakiet ETL na podstawie przykładów Microsoft. Później zapoznamy się kolejnymi elementami ETL-a oraz (mam nadzieję) z SSAS i SSRS.

    Komentarze
    1. ssis pisze:

      Dzięki. Fajny artykuł. Na pierwszy rozruch w sam raz.

    2. Thank you for the auspicious writeup. It in fact was a amusement account it.
      Look advanced to far added agreeable from you!
      By the way, how could we communicate?

      • Thanks. I finished writing on this blog, because now I deal with completely different things (non-technical) and I ceased to be up to date with SQL and BI. In which case you want to communicate?

    Skomentuj

    Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

    Logo WordPress.com

    Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

    Zdjęcie z Twittera

    Komentujesz korzystając z konta Twitter. Log Out / Zmień )

    Facebook photo

    Komentujesz korzystając z konta Facebook. Log Out / Zmień )

    Google+ photo

    Komentujesz korzystając z konta Google+. Log Out / Zmień )

    Connecting to %s