Proces ETL MS SQL Server Integration Services (SSIS) 3 kwietnia 2014 Opis pliku z zadaniami Wszystkie zadania na zajęciach będą przekazywane w postaci plików PDF sformatowanych jak ten. Będą się na nie składały różne roadzje zadań, ale za każdym razem będą odpowiednio oznaczone: Zadania do wykonania na zajęciach oznaczone są symbolem nie są one punktowane, ale należy je wykonać w czasie zajęć. Punktowane zadania do wykonania na zajęciach oznaczone są symbolem należy je wykonać na zajęciach i zaprezentować prowadzącemu. Zadania do wykonania w domu oznaczone są symbolem - są one punktowane, należy je dostarczyć w sposób podany przez prowadzącego i w wyznaczonym terminie (zwykle do dwóch dni przed kolejnymi zajęciami). Po zakończeniu zajęć proszę o udzielenie odpowiedzi na kilka pytań zebranych w ankietę dostępną pod adresem http://goo.gl/utyhtx 1
1 Dyskusja dotycząca prac domowych Treść Transformacja danych do nowego schematu Internetowa wypożyczalnia filmów schemat gwiazdy 2
2 Million Song Dataset w SSIS 2p. Treść Microsoft SQL Server Integration Services (SSIS) jest platformą przeznaczoną do budowania wydajnych rozwiązań migracji danych, czyli ekstrakcji, transformacji i wczytywania (ang. extract, transform, load ETL) w obszarze hurtowni danych. Funkcje i możliwości SSIS: narzędzia graficzne oraz kreatory projektowania i debugowania, narzędzia modelowania workflow (przepływu pracy), wykonywanie zapytań SQL, narzędzia do ekstrakcji danych z różnych źródeł, narzędzia służące do transformacji, czyszczenia, agregowania, łączenia i kopiowania danych, usługi administracyjne, interfejsy programistyczne (API) dla modelu obiektowego Integration Services. Projekty SSIS tworzymy za pomocą narzędzia Microsft SQL Server Data Tools, które jest część MS SQL Server i MS Visual Studio. 2.1 Proces ETL dla MSD krok po kroku (część I) Krok 1: Stworzenie nowego projektu i połączenia do bazy danych Z okna New Project należy wybrać Integration Services Project. 3
Projektem możemy zarządzać za pomocą widoku Solution Explorer: W widoku Server Explorer dodajemy nowe połączenie dla naszej bazy danych, którą możemy nazwać MSD (jeżeli baza nie istnieje, MS Visual Studio utworzy ją automatycznie). 4
Krok 2: Połączenia do bazy i plików z danymi wejściowymi W widoku Connection Managers tworzymy: OLE DB Connection, które łączy nas do wcześniej zdefiniowanej bazy danych. Flat File Connection, który jest menedżerem połączenia do pliku z informacjami o piosenkach unique tracks.txt. Flat File Connection, który jest menedżerem połączenia do pliku z trójkami odsłuchań triplets sample 20p.txt. Należy pamiętać o odpowiednim ustawieniu separatora dla rozdzielenia kolumn. Pomocne będzie też nadanie nazw i typów kolumnom. Krok 3: Tworzenie tabel users i dates Nasz proces ETL będziemy projektować w widoku Control Flow: Aby dodać zadanie zapytania SQL należy do Control Flow przenieść moduł Execute SQL Task z widoku SSIS Toolbox: 5
W naszym zadaniu będziemy potrzebować zapytania SQL dla tworzenia tabel users, dates i songs. Na tym etapie zatrzymamy się na tych dwóch pierwszych oraz dodatkowo stworzymy tymczasowe tabele tmp users i tmp dates, które później przydadzą nam się do założenia kluczy zastępczych (surrogate keys). Struktura tych tabel będzie nam potrzebna przy edytowaniu kolejnych workflowów, zatem stworzone zadania można wykonać. W tym celu należy je klinąć prawym przyciskiem myszy i wybrać Execute Task. Krok 4: Wczytanie użytkowników i dat z pliku W celu stworzenia workflow dla wczytywania danych z pliku do odpowiednich tabel musimy dodać moduł Data Flow Task do Control Flow. Data Flow Task edytujemy w widoku Data Flow: 6
Nasze zadanie data flow wykorzystuje moduł Flat File Source z ustawionym menedżerem połączenia Triplets Connection Manager (odpowiadającym za połączenie z plikiem triplets sample 20p.txt). Jako, że w pliku z trójkami odsłuchań mamy m.in. informacje o użytkownikach i datach, musimy wykonać dwa podprocesy, które rozdziela moduł Multicast. W pierwszym podprocesie wykorzystujemy OLE DB Destination do zamapowania tekstowego ID użytkownika (z pliku) do naszej tymczasowej tabeli tmp users. Drugi podproces wykonuje podobną operację dla dat, tyle że tutaj musimy dokonać konwersji daty zapisanej w timestampie do daty zapisanej jako dzień, miesiąc i rok. Do tego celu potrzebne nam będą dwa moduły Derived Column: pierwszy konwertuje timestamp do formatu yyyy-mm-dd, a drugi ekstrahuje numer dnia, miesiąca i roku. Do Control Flow musimy też dodać dwa proste Data Flow Tasks (Users Unique Task i Dates Unique Task), które przepiszą wcześniej wyekstrahowane informacje do tabel users i dates. Nasz proces powinien wyglądać w tej chwili następująco: 7
W tym kroku możemy stworzyć jeszcze jeden Data Flow Task o nazwie Triplets Import Task, który połączy nam informacje o użytkownikach, piosenkach i datach wczytując je do tabeli faktów. Wcześniej jednak należy wykonać dwa proste zadania: 2.2 Zadanie 1 - krok 5: Stworzenie tabeli faktów (1p.) Zadanie polega na dodaniu do schematu przepływu (Control Flow) zadania, które stworzy pustą tabelę faktów dla rozważanego problemu Million Song Dataset. Pamiętaj o wczesniejszym usunięciu poprzedniej wersji tabeli (poprzez odpowiednie zapytanie SQL). Uwaga: na tym etapie nie nakładamy kluczy na atrybuty. Połącz utworzone zadanie do zadania data flow o nazwie Triplets Import Task. 2.3 Zadanie 2 - krok 6: Stworzenie tabeli faktów (2p.) Naszym celem jest stworzenie zadań, które zrealizują import piosenek do tabeli songs zawierającej następujące atrybuty: song id, typu int, song text id, typu varchar, track text id, typu varchar, artist, typu varchar, title, typu varchar. Stwórz odpowiednie zadanie przygotowujące tablicę oraz data flow, w którym 1) odwołamy się do Songs File Connection Managera oraz 2) wykorzystamy odpowiednie moduły (które już znasz) do zamapowania danych źródłowych na dane docelowe (dane z pliku unique tracks.txt do tabeli songs). 8
2.4 Proces ETL dla MSD krok po kroku (część II) Krok 7: Wczytanie danych do tabeli faktów W tym kroku edytujemy flow Triplets Import Task, który pozwoli nam zaimportować trójki, biorąc pod uwagę wcześniej zaimportowanych użytkowników i daty. Moduł Flat File Source dostarcza nam dane z pliku triplets sample 20p.txt. Następnie wykorzystujemy moduły Lookup. Tranformacja Lookup wykonuje wyszukiwanie przez połączenie danych w kolumnach wejściowych z kolumnami w danych referencyjnych, tzn. daje nam dostęp do dodatkowych informacji z powiązanej tabeli które bazują na wartościach we wspólnych kolumnach. W naszym przypadku pierwszy lookup pobiera zastępczy ID piosenki bazując na oryginalnym tekstowym ID, natomiast drugi lookup analogicznie pobiera zastępczy ID użytkownika. Dalej dokonujemy podobnej konwersji daty jak w kroku 4 oraz za pomocą trzeciego modułu lookup pobieramy ID daty bazując na dniu, miesiącu oraz roku. OLE DB Destination mapuje te wszystkie informacje na odpowiednie atrybuty w tabeli faktów. 9
Krok 8: Integralność danych Na końcu naszego procesu musimy wprowadzić ograniczenia do naszych danych w celu wymuszania ich integralnoci. Aby to zrobić należy wykonać odpowiednie zapytanie SQL ALTER TABLE w module Execute SQL Task. Finalny schemat procesu ETL można pobrać ze strony przedmiotu. Krok 9: Uruchomienie Aby uruchomić nasz proces ETL należy kliknąć przycisk Start Debugging: 10