SPIS TREŚCI

• Witryna e-commerce w XXII Krokach

• Podręcznik Projektanta Blockchain

• Kurs Pisania Biznesowego

• Strategia Marketingowa

• Strategia Marketingowa II

• Jak poprawić swój biznes

• 50 Kroków Do Sukcesu

• 101 sposobów na poprawę wydajności biznesu




Słowniczek Biznesmena






Międzynarodowe Instytucje Finansowe

















Numer 02 (74) / 2023




Odwiedzin: 35591
Dzisiaj: 31
On-line: 1
Strona istnieje: 2311 dni
Ładowanie: 0.345 sek


[ 4550 ]


1. Business Intelligence dla każdego
2. Metody Agile dla projektów BI
3. Podstawy SQL
4. Inicjalizacja projektu - instalacja bazy danych i źródła ERP
5. Modelowanie danych dla rozwiązań BI

6. Podstawy ETL

Dlaczego potrzebujemy procesu ETL?

Można się zastanawiać, skoro mamy już dane w naszych bazach danych, dlaczego nie skierować naszych narzędzi do raportowania na te bazy i zacząć pracować w raportach i dashboardach, prawda? Cóż, życie zwykle nie jest takie łatwe. Przede wszystkim nigdy nie zaleca się bezpośredniego łączenia z operacyjnym systemem danych. Zapytania generowane przez narzędzia do raportowania, a nawet przez użytkowników, mogą być bardzo czasochłonne podczas zbierania zasobów potrzebnych systemom operacyjnym. Powodów jest jednak więcej. Czasami danych nie da się wykorzystać w taki sposób, w jaki są one przechowywane w systemie operacyjnym i wymaga pewnego rodzaju transformacji, której nie da się wykonać w narzędziu do raportowania lub w czystym SQL. A czasami, uwierzcie nam, zazwyczaj tak jest, zwłaszcza gdy firma ma rozsądną wielkość, musimy zintegrować dane ze źródeł zewnętrznych: dostawców, punktów sprzedaży, różnych baz danych, plików Excel lub zwykłych plików tekstowych, a nawet danych z Internet. W tym scenariuszu potrzebujemy sposobu na połączenie danych, skonsolidowanie ich i przechowywanie w formacie, który możemy przeszukiwać. Ponadto, w większości przypadków będziemy musieli przejść przez etap czyszczenia danych, ponieważ dane z systemów źródłowych nie zawsze są kompletne, poprawne lub nadające się do przechowywania. Takie podejście ma wiele zalet. Oczywiście komplikuje to sprawę, ponieważ wymaga od nas opracowania tych procesów, ale w zamian unikamy uderzania w systemy operacyjne; możemy również modyfikować nasze dane, aby odpowiadały naszym potrzebom, a jeśli chcemy, możemy stosować różne zasady przechowywania danych, co zapewnia nam niespotykany dotąd stopień elastyczności.

Szczegóły rozwiązania

Zanim zagłębimy się w szczegóły, chcemy przedstawić Wam nasz pomysł na końcowy przepływ danych. Mamy nasz system transakcyjny oparty na Odoo, w którym zbierzemy kilka tabel i pobierzemy je na obszar przejściowy. Z tego obszaru przejściowego wykonamy całą agregację czyszczenia, filtrowanie i manipulacje potrzebne do wypełnienia naszych końcowych stolików. Jest to zwykle najczęstsze podejście, jeśli chodzi o pobieranie i ładowanie danych. To podejście jest zwykle wybierane spośród innych, ponieważ nie wywiera presji na system operacyjny.Jeśli zapytamy ponownie, Odoo, system transakcyjny, może mieć wpływ na wydajność. Dzięki temu rozwiązaniu wszystkie operacje będą wykonywane na bazach danych staging i dwh, które nie są częścią systemu operacyjnego, więc obciążenie pojawi się na tych bazach. Zwykle ekstrakcja będzie prowadzona w nocy lub poza godzinami szczytu, więc proces przesyłania danych, który odbywa się między obszarem transakcyjnym a strefą postojową, nie wpływa na system operacyjny na godziny pracy, które mają być godzinami krytycznymi; oraz godziny, w których system jest pod większą presją. Stąd ostateczny schemat rozwiązania będzie podobny do tego, co widać na rysunku



Pakiety ETL typu open source

Mamy dobre bazy danych typu open source, ale prawdopodobnie mamy jeszcze lepsze pakiety ETL typu open source. W tej książce przyjrzymy się dwóm narzędziom i chociaż bardziej skoncentrujemy się na Pentaho Data Integrator (znanym również jako Kettle), zobaczymy również kilka przykładów użycia Talend Open Studio. Wybraliśmy tych dwóch, ponieważ są wystarczająco dojrzali, cały czas ewoluują i są szeroko stosowane, więc cieszą się dużym wsparciem społeczności. Istnieje kilka komercyjnych narzędzi ETL, ale uwierz nam, jeśli nie masz bardzo konkretnych wymagań, których nie można spełnić za pomocą jednego z bezpłatnych narzędzi, nie ma żadnego powodu, aby za nie płacić. Zwykle są łatwe w zarządzaniu, wydajne i mają niekończący się zestaw wtyczek do łączenia z dowolnym źródłem danych, jaki możesz sobie wyobrazić, wszystko za darmo. Możliwe jest również, że jeśli korzystasz z jakiejś komercyjnej bazy danych w swojej firmie, uwzględniłeś licencję na korzystanie z własnego narzędzia ETL, tak jak ma to miejsce w przypadku Microsoft SQL Server i narzędzia SS Integration Services.

Pobieranie i instalowanie integracji danych Pentaho

Aby rozpocząć, musimy najpierw pobrać i zainstalować narzędzie Pentaho Data Integration (od teraz PDI lub Kettle). Możemy pobrać plik PDI zip na ich stronie internetowej: http://community.pentaho.com/projects/dataintegration/ Kliknij sekcję pobierania, a to przeniesie Cię na dół strony internetowej, gdzie wyświetlana jest najnowsza wersja, która wynosi 6,1 w momencie pisania. Kliknij nazwę wersji, a otworzy się nowe okno, które uruchomi pobieranie. Plik jest dość duży, prawie 700 MB, więc przed rozpoczęciem pobierania upewnij się, że masz przyzwoite połączenie z Internetem. Po zakończeniu pobierania będziemy mieć plik ZIP z kilkoma programami, w rzeczywistości bibliotekami i klasami Java. Na potrzeby tego rozdziału, ponieważ będziemy projektować zadania i transformacje (później), będziemy używać komputera z systemem Windows, z interfejsem graficznym. Bez problemu możemy również korzystać z dowolnego systemu Windows lub Linux, o ile mamy zainstalowane środowisko Java JRE w naszym systemie (wersja 8 załatwi sprawę). Wejdź na stronę Oracle i pobierz ją, jeśli nie masz jej zainstalowanej na swoim komputerze. Później, aby zaplanować zadania, które projektujemy, zainstalujemy PDI na naszym serwerze Linux, ale ponieważ nie zainstalowaliśmy tam żadnego komponentu X Window, niemożliwe byłoby użycie edytora graficznego do zaprojektowania naszych zadań i transformacji. Podsumowując, serwer jest w porządku do uruchamiania zadań, ale do ich projektowania potrzebujemy komputera z interfejsem graficznym. Po rozpakowaniu pliku PDI-ce-6.1.0.1-196.zip (lub coś podobnego, w zależności od aktualnej wersji) w dowolnym miejscu na naszym komputerze, możemy uruchomić edytor GUI, klikając dwukrotnie plik Spoon. Upewnij się, że wybierasz odpowiedni dla swojego środowiska. Jeśli korzystasz z Linuksa, powinieneś wybrać spoon.sh i przed uruchomieniem go uczynić go wykonywalnym za pomocą polecenia chmod. Jeśli jesteś w systemie Windows, po prostu uruchom Spoon.bat. Jeśli skrypt może zlokalizować java w twoim systemie, program zostanie uruchomiony. Jeśli masz problemy z uruchomieniem go w systemie Windows, sprawdź następujące porady na stronie internetowej:

Edytuj plik Spoon.bat i:
Zamień w ostatnim wierszu "start javaw" tylko na "java".
Dodaj "pauzę" w następnym wierszu.
Zapisz i spróbuj ponownie

Jeśli wszystko idzie dobrze, powinniśmy zobaczyć ekran podobny do pokazanego na rysunku .



Jeśli zobaczysz okno repozytorium z prośbą o utworzenie repozytorium, kliknij na razie anuluj. Utworzymy jeden później. Ważne jest, abyśmy w tym momencie zrozumieli, w jaki sposób rozmieszczone jest główne okno PDI. Cztery główne obszary, o których musimy wiedzieć, to:
v 1. Karta Projekt lub karta Widok. Pierwszym jest dodanie nowych operacji do płótna, a drugim wyświetlenie już dodanych komponentów, połączeń itd.
2. Zakładka przekształceń i zleceń pozwala nam przełączać się z jednej przekształcenia lub opracowywanego zlecenia do drugiego.
3. Trzeci to miejsce, w którym możemy wybrać dowolną nową operację i przeciągnąć ją na płótno
4. Czwarta część to płótno. Wszystkie nasze operacje i przepływy muszą być zdefiniowane w kanwie. Kiedy otwieramy PDI po raz pierwszy, powinno mieć puste płótno, ale następnym razem otworzy te, nad którymi pracowaliśmy wcześniej.

Zrozumienie koncepcji ETL

Aby zrozumieć ogólny projekt ETL, najpierw musimy zrozumieć kilka pojęć i obiektów używanych przez narzędzia ETL; zostały one przedstawione w tym podrozdziale, wraz ze sposobem ich tworzenia lub wykorzystania w PDI. Zwykle wszystkie ETL mają źródła i cele danych, czyli miejsce, w którym dane się znajdują i gdzie musimy się połączyć, aby je odczytać lub zapisać; wykonać na tych danych pewne akcje i manipulacje, które są pogrupowane w komponenty zwykle określane jako transformacja oraz komponent wyższego poziomu, który jest koordynatorem przepływu pomiędzy wszystkimi transformacjami, który jest zwykle nazywany zadaniem lub przepływem pracy. Nadszedł właściwy czas, aby przyjrzeć się tym komponentom dogłębnie.

Repozytoria i połączenia

Jak w większości narzędzi ETL, repozytorium to metadane, w których będą przechowywane wszystkie nasze obiekty PDI. Repozytorium przechowuje zadania, transformacje, połączenia i wiele więcej. Jeszcze kilka lat temu w PDI istniały dwa rodzaje repozytoriów, Kettle Database Repository i Kettle File Repository, ale ostatnio dodano kolejny, Pentaho Repository. Ten najnowszy jest nowym zalecanym przez Pentaho, o ile jest najlepszy podczas pracy na dużym wdrożeniu. Ponieważ tak nie jest w naszym przypadku, oceniliśmy dwie opcje, korzystając z repozytorium bazy danych Kettle lub repozytorium plików Kettle. W środowisku biznesowym sensowne jest przechowywanie repozytorium w relacyjnej bazie danych. Zwykle upraszcza to sprawę, ponieważ nie musimy kopiować zadań i transformacji do folderów, ale pozwala Kettle zarządzać nimi automatycznie. Musimy pamiętać, aby cały czas tworzyć kopię zapasową tego schematu bazy danych, ponieważ jeśli zostanie utracony, stracimy wszystkie wdrożenia Kettle. Ponieważ dopiero poznajemy PDI i nie chcemy tracić czasu na tworzenie nowych schematów baz danych, skorzystamy z łatwiejszego w zarządzaniu repozytorium plików. Zasadniczo zdefiniujemy folder w naszym systemie, aby usunąć zadania i transformacje. Należy jednak pamiętać, że do działania PDI nie jest konieczne tworzenie żadnego repozytorium. Możemy pracować bezpośrednio z plikami, a to zwykle najłatwiejszy sposób w środowisku nieprodukcyjnym. Aby utworzyć repozytorium, wykonaj następujące kroki: Z menu Narzędzia wybierz Repozytorium, a następnie Połącz lub naciśnij CRL-R; spowoduje to, że repozytorium będzie wyglądać tak, jak pokazano na rysunku, teraz nadal będzie puste.



W prawym górnym rogu okna dialogowego znajduje się znak plus; kliknijmy go, a pojawi się nowe okno dialogowe z pytaniem, jaki typ repozytorium chcemy utworzyć. Możesz to zobaczyć na rysunku



Dla opcji repozytorium bazy danych wybierzemy drugą opcję. Aby pracować z repozytorium plików, wybierz trzecie. W naszym projekcie na razie będziemy pracować z plikami, ale zdecydowanie zalecamy korzystanie z opcji bazy danych w środowisku produkcyjnym.

Uwaga: Jeśli wybrałeś repozytorium bazy danych, pamiętaj o utworzeniu schematu bazy danych i przygotowaniu nazwy użytkownika i hasła do tego schematu, ponieważ będą one potrzebne do skonfigurowania repozytorium bazy danych Kettle.

Teraz musimy zdefiniować nasze połączenie z bazą danych. I tu pojawia się pierwszy problem. Nadal nie zdefiniowaliśmy żadnego połączenia. Nie stanowi to problemu, ponieważ możemy go utworzyć, klikając przycisk Nowy na ekranie. Jeśli spojrzysz na Typ połączenia, nie znajdziesz MariaDB, ale to nie jest problem, jak wyjaśniliśmy w poprzednim rozdziale: Sterowniki MySQL są w 100% kompatybilne. Wybierzmy więc MySQL, a następnie jesteśmy gotowi do utworzenia połączenia. Użyję bazy danych o nazwie repo, z repozytorium użytkowników i repozytorium haseł. Sprawdź na rysunku pola, które należy wypełnić.



Um, jeszcze nie skończyliśmy! Teraz nadeszły "złe" wieści. Domyślnie PDI jest dostarczane bez sterowników umożliwiających łączenie się ze zbyt wieloma bazami danych, w tym MariaDB i MySQL. Aby móc nawiązać połączenie, będziemy musieli pobrać dla niego sterownik Java. Jeśli go nie pobierzemy i nie spróbujemy się połączyć lub przetestować połączenia, zobaczymy komunikat podobny do tego na rysunku , informujący, że nie można znaleźć sterownika.



Aby uzyskać sterownik, musimy przejść do strony internetowej MySQL, na której znajduje się sterownik Java, po prostu przejdź do następującej strony: http://dev.mysql.com/downloads/connector/j/ w przeglądarce i pobierz plik zip ze sterownikiem. Jeśli używasz Linuksa, możliwe, że ten sterownik jest już zainstalowany na twoim komputerze; jeśli nie, możesz spróbować uruchomić dowolnego menedżera pakietów, aby go pobrać i zainstalować, lub wykonać tę samą procedurę, aby skopiować go do ścieżki klasy programu. Po pobraniu interesuje nas głównie plik jar o nazwie mniej więcej tak: mysql-connector-java-5.1.39-bin.jar. Następnie skopiuj ten plik do ścieżki lib swojej instalacji PDI. Następnie kliknij Anuluj w oknie dialogowym połączenia z bazą danych w PDI i zamknij PDI, ponieważ w przeciwnym razie nie będzie działać. Ponownie uruchamiamy plik wykonywalny Spoon i tym razem, jeśli skopiowaliśmy plik we właściwe miejsce, możemy przetestować połączenie i powinniśmy zobaczyć komunikat podobny do tego:

Connection to database [PDIRepo] is OK.
Hostname : localhost
Port : 3306
Database name : repo

Mamy gotowe pierwsze połączenie. Należy pamiętać, że połączenia zawsze działają w ten sam sposób. Nie ma znaczenia, czy jest to repozytorium, czy połączenie danych. Procedura ich zakładania jest zawsze taka sama. Upewnij się, że masz sterownik w folderze lib, wybierz odpowiedni smak bazy danych i uzupełnij szczegóły, odpowiednio nazywając połączenie z bazą danych! Jeśli zdecydujemy się na repozytorium plików, musimy tylko wybrać folder nadrzędny, w którym utworzymy nasze repozytorium, którym może być dowolny folder na twoim komputerze; nadaj mu nazwę, a następnie opis. Spójrz na rysunek , aby uzyskać szczegółowe informacje:



Następnie klikamy OK, a repozytorium zostanie utworzone i zostaniemy przekierowani z powrotem do ekranu powitalnego.

Transformacje, rdzeń Kettle

Transformacje wraz z zadaniami, które zobaczymy później, to obiekty, których używamy do definiowania operacji na danych. Zwykle zadanie zawiera jedną lub więcej transformacji, dlatego lepiej jest je najpierw zrozumieć. Transformacja to łańcuch kroków. Krok to czynność, która będzie wykonywana zwykle na danych. Ale nie ogranicza się to tylko do tego. Mamy kroki, które wchodzą w interakcję ze zmiennymi (wewnętrznymi z PDI lub zmiennymi systemowymi), inne, które wchodzą w interakcje z plikami, a jeszcze inne po prostu manipulują danymi, z którymi mamy do czynienia. W Kettle są dziesiątki różnych kroków. Niektóre z nich działają bezpośrednio w silniku PDI, podczas gdy inne działają w systemie plików lub systemie operacyjnym, a nawet z zewnętrznymi lub zdalnymi narzędziami: interakcja z bazami danych, plikami płaskimi, plikami Excel, plikami dostępu, xml, serwerami WWW… a nawet systemem zmienne. Nie będziemy komentować wszystkich kroków PDI, ponieważ będzie to wymagało co najmniej jednej całej książki, zobaczymy tylko część z nich. Zasadniczo skoncentrujemy się na krokach, których potrzebujemy. Kroki są pogrupowane według kategorii, w zależności od funkcji, którą wykonują. Mamy wejście, wyjście, transformację, przepływ narzędzi, skrypty, wyszukiwanie, łączenie, a nawet kroki Big Data. Zasadniczo będziemy pracować z krokami wejścia i wyjścia, odczytywać i zapisywać dane z bazy danych i plików zewnętrznych, a także użyjemy niektórych kroków transformacji, które pozwolą nam zmodyfikować nasze dane, niektóre kroki przepływu (zwłaszcza krok filtrowania wierszy) i prawdopodobnie użyjemy niektórych kroków narzędzi, które zasadniczo nam na to pozwalają operować plikami: spakować je, wysyłać e-maile, zapisywać pliki dziennika i tak dalej. Istnieje inny zestaw kroków, zwany skryptami, który jest niezwykle potężny. Pozwala nam określić kod bezpośrednio w kroku. Ten kod można napisać w języku SQL, JavaScript lub Java.

Transformacje muszą być umieszczone w określonej kolejności na płótnie. A następnie muszą być połączone, aby wyjście z poprzednika było wejściem późniejszej transformacji. Czasami możliwe jest określenie więcej niż jednego wyjścia. W takim przypadku PDI zapyta nas, czy chcemy zduplikować dane wyjściowe między późniejszymi zadaniami, czy też chcemy skopiować dane wyjściowe do każdego kolejnego kroku. Możliwe jest również posiadanie wyjść warunkowych. Niektóre kroki dzielą dane wejściowe między dwa wyjścia, w zależności od określonego warunku logicznego. Jeżeli warunek jest spełniony, wejście spełniające warunek zostanie przesłane do jednego kroku, natomiast wejście niespełniające warunku zostanie przekierowane do innego kroku. Zobaczymy to później na przykładzie transformacji.

Zadania, czyli jak zorganizować zestaw przekształceń w przepływie pracy

Zadania w Kettle to kontenery przekształceń i połączonych działań, które są również określane poprzez przeciąganie i upuszczanie kroków na płótnie zadania. Jednak rodzaje kroków, które możemy znaleźć w widoku zadania, różnią się nieco od tych, które możemy znaleźć w widoku transformacji. W widoku zadania mamy kilka kroków pogrupowanych według kategorii. Ogólne, które są głównymi składnikami zadań, Poczta, Zarządzanie plikami, Warunki (do kontroli przepływu), Skrypty, Ładowanie masowe, BigData, Modelowanie, XML, Narzędzie, Przesyłanie plików i Szyfrowanie plików - najważniejsze. Każda praca musi mieć punkt wyjścia. Dobrą praktyką jest użycie kroku sukcesu na końcu. A do debugowania możemy użyć Dummy Step. Zobaczymy więcej później. Krok początkowy możemy znaleźć w grupie ogólnej, więc aby rozpocząć projektowanie pracy, musimy przeciągnąć i upuścić krok początkowy na kanwę. Po wykonaniu tej czynności możemy dodać kroki transformacji, które będą wykonywały większość pracy, i połączyć je, przesuwając mysz nad krokiem, czekając sekundę i klikając znak "wyjdź" w kroku. Po kliknięciu nie klikaj ponownie i przeciągnij i upuść mysz do następnego kroku. Po wykonaniu tej czynności zostanie utworzone łącze między pierwszym krokiem a drugim. Należy zauważyć, że istnieją alternatywne sposoby łączenia kroków. Można wybrać dwa kroki, kliknąć prawym przyciskiem myszy pierwszy (źródłowy) i kliknąć "New Hop". Spowoduje to utworzenie dokładnie tego samego przeskoku. Po utworzeniu przeskoku możemy go edytować, usunąć lub wyłączyć. Aby to zrobić, po prostu kliknij prawym przyciskiem myszy strzałkę przeskoku, a pojawi się menu kontekstowe z tymi działaniami. Jak wyjaśniliśmy wcześniej, istnieją kroki, które mogą tworzyć warunkowe przeskoki, które są wykonywane przez ocenę wyrażenia iw zależności od wyniku, wykonanie jednego lub drugiego kroku. W ogólnych przypadkach większość kroków będzie oznaczona jako bezwarunkowa, więc nad strzałką pojawi się ikona kłódki. Oznacza to, że krok docelowy zostanie wykonany niezależnie od wyniku kroku poprzedniego. Proces łączenia etapów transformacji jest dokładnie taki sam. Będziemy tworzyć przeskoki we wszystkich naszych Pracach i Transformacjach.

Utwórz i udostępnij połączenie

Aby rozpocząć programowanie z PDI, jeśli chcemy łączyć się z bazami danych, tak jak w naszym przypadku, musimy najpierw utworzyć połączenia. Aby utworzyć połączenie w PDI, możemy wykonać te same kroki, co wcześniej, kiedy wyjaśniliśmy, jak skonfigurować połączenie z metadanymi nowego repozytorium. W tej książce będziemy używać głównie dwóch połączeń. Jeden do PostgreSQL, w którym rezyduje Odoo, a drugi do bazy danych MySQL, która będzie hostować hurtownię danych. Teraz jest dobry moment, aby utworzyć te dwa połączenia i pozwolić im ustawić się na pozostałą część książki. Gdy stworzymy, udostępnimy go, aby wszystkie nasze zadania i transformacje mogły z niego korzystać, bez konieczności definiowania nowego w każdym zadaniu lub transformacji. Zobaczmy, jak to zrobić. Przed rozpoczęciem zainstalowaliśmy już złącze Java MySQL, jeśli postępowaliśmy zgodnie z instrukcjami w sekcji łączenie z repozytorium. Ale do połączenia metadanych Odoo potrzebujemy biblioteki java PostgreSQL. Domyślnie ten jest dostarczany z programem, przynajmniej w najnowszych wersjach, ale jeśli masz problemy z połączeniem, upewnij się, że sterownik znajduje się w odpowiednim folderze. W menu Plik kliknij Nowy, a następnie w nowym menu kliknij Połączenie z bazą danych. Pojawi się menu podobne do poprzedniego. W zakładce Ogólne upewnimy się, że wybieramy połączenie PostgreSQL oraz uzupełnimy znane nam już dane, takie jak nazwa użytkownika, nazwa bazy danych, hasło oraz adres IP serwera, na którym znajduje się baza danych. Następnie nadajemy połączeniu nazwę, na przykład Odoo, a następnie możemy kliknąć przycisk Test, aby upewnić się, że możemy się połączyć bez żadnych problemów. Jeśli wszystko idzie dobrze, powinniśmy zobaczyć pomyślny komunikat informujący, że można nawiązać połączenie. Klikamy OK i nasze połączenie zostanie utworzone. Od tego momentu pozostaje już tylko jeden krok, czyli w zasadzie udostępnienie połączenia. To jest proste zadanie. W lewym widoku upewnij się, że masz wybraną kartę Widok zamiast Projektowanie, a następnie poszukaj folderu o nazwie Praca lub Transformacje, w zależności od tego, czy otworzyłeś pracę lub transformację w kanwie. Wewnątrz znajdziesz swoją obecną pracę lub transformację, aw środku ponownie zobaczysz folder o nazwie Połączenia z bazą danych. Jeśli przeglądasz folder, powinieneś zobaczyć swoje nowe połączenie. Możesz zobaczyć ikonę połączenia z bazą danych na rysunku.



W tym momencie wszystko, co musimy zrobić, to kliknąć prawym przyciskiem myszy połączenie i kliknąć udostępnij. Jeśli wszystko idzie dobrze, jedyne, co zauważymy, to to, że nazwa połączenia jest pogrubiona. Oznacza to, że nasze połączenie jest teraz współdzielone i mimo to, jeśli nie zauważymy niczego szczególnego, będziemy mogli go używać we wszystkich naszych zadaniach i transformacjach. Jeśli nie widzisz ich w innych zadaniach lub transformacjach, zamknij je i otwórz ponownie. Powinieneś być teraz w stanie zobaczyć połączenie.

Uwaga: Domyślnie, jeśli pracujesz w środowisku opartym na repozytorium, połączenia są automatycznie udostępniane, więc nie ma potrzeby wykonywania tych kroków. Jeśli pracujesz z izolowanymi plikami, jest to konieczne.

Globalny obraz

Chcemy przeprowadzić analizę na podstawie tego, jakie produkty sprzedajemy. Pomysł polega na tym, że po przeprowadzeniu tej analizy będzie można odpowiedzieć na niektóre z tych pytań: które produkty są najczęściej sprzedawane, który pracownik osiąga najlepsze wyniki i jaka jest ewolucja naszej sprzedaży rok po roku. Aby móc przeprowadzić tę analizę, musimy zdefiniować proces ETL, który pobiera pewne dane z naszego systemu operacyjnego, przetwarza je i przechowuje w naszej hurtowni danych. Później będziemy mogli podłączyć kilka wymyślnych narzędzi graficznych do naszej małej bazy danych hurtowni danych i przeprowadzić analizę, która pomoże nam uzyskać odpowiedzi na nasze pytania. W tej części skupimy się na pierwszej części, czyli wydobyciu danych z Odoo i załadowaniu ich do naszej bazy danych hurtowni danych. Kroki będą następujące: załaduj wszystkie powiązane tabele produktów, których potrzebujemy do naszej analizy; załadować tabele dotyczące klientów i pracowników, dzięki czemu możemy śledzić produkty sprzedane przez pracownika lub zakupione przez klientów, a nawet razem; dane dotyczące sprzedaży, które utworzą naszą podstawową tabelę faktów; a następnie będziemy potrzebować szeregu czasowego, aby nadać temu wszystkiemu jakiś sens. Jak wyjaśniliśmy, chcemy zobaczyć ewolucję sprzedaży, a także inne trendy czasowe, na przykład sprzedaż sezonową i inne aspekty, dlatego musimy zbudować harmonogram, ponieważ wyodrębnianie tylko dat w prostym formacie nie jest odpowiednie i nie pozwoli nam na agregację według tygodnia, miesiąca, kwartału ani roku. Zacznijmy od tabel związanych z produktami.

Tabele produktów, kategorii produktów i kategorii nadrzędnych produktów

W modelu znajdują się trzy tabele, które są powiązane z produktami i ich kategoriami. Tabela t_l_product, t_l_category i t_l_parent_category. Nie są to dokładnie te same tabele, które możemy znaleźć w metadanych Odoo, ale są one podobne. Aby je wygenerować, potrzebujemy tylko trzech tabel z Odoo, jak widzieliśmy w ostatniej części rozdziału 5. Te tabele nazywają się product_category, product_product i product_template. Bezpośrednio pobierzemy te trzy tabele do obszaru przemieszczania, a następnie zbudujemy zapytania, aby je wygenerować. Możemy to uwzględnić w poprzedniej transformacji lub stworzyć nową. Ponieważ pracujemy tylko z obszarem przejściowym, możemy zgrupować je wszystkie w tej samej transformacji. Przeciągnij i upuść krok wprowadzania danych z tabeli na obszar roboczy i nie łącz go nigdzie. To będzie pierwsza gałąź naszej transformacji. Ponieważ nie wymuszamy kluczy podstawowych w obszarze przejściowym, możemy je ładować równolegle bez żadnych błędów. Kliknij dwukrotnie krok wprowadzania tabeli, wybierz połączenie Odoo z utworzonymi wcześniej metadanymi i kliknij przycisk Get SQL Statement. W nowym oknie dialogowym wyświetl folder Tables i poszukaj pierwszej tabeli o nazwie product_product. Wybierz tabelę i kliknij OK. PDI zapyta nas teraz, czy chcemy uwzględnić nazwy pól w zapytaniu SQL. Jeśli zdecydujemy się ich nie uwzględniać, zostaną one zastąpione gwiazdką, ale zwykle nie jest to dobra praktyka, więc odpowie TAK. Zostanie wygenerowane zapytanie podobne do tego:

SELECT
id
, create_date
, weight
, default_code
, name_template
, create_uid
, message_last_post
, product_tmpl_id
, barcode
, volume
, write_date
, active
, write_uid
FROM product_product

Teraz nadszedł czas, aby kliknąć przycisk Podgląd, aby upewnić się, że możemy pobrać dane z Odoo. Jeśli wszystko idzie dobrze, zostanie wyświetlona siatka z danymi. Kliknij Zamknij po sprawdzeniu. Przed zamknięciem kroku zmień nazwę kroku na product_product name. W tej chwili pobieramy tylko tabele do naszego obszaru przejściowego, więc nie przeprowadzamy jeszcze żadnej transformacji. W tym celu musimy teraz tylko upuścić krok danych wyjściowych tabeli w obszarze roboczym. Połącz oba kroki, przeciągając i upuszczając strzałkę wyjściową z wejścia tabeli do kroku wyjścia tabeli. Czas skonfigurować kilka znanych rzeczy. W tym celu nazwiemy wyjście i nazwę tabeli docelowej jako stg_product_product. Dobierzemy odpowiednie połączenie i zaznaczymy pole wyboru Truncate Target Table. Teraz prawie skonfigurowaliśmy nasze miejsce docelowe, ale znowu musimy utworzyć strukturę tabeli. Tym razem niestety PDI popełnia błąd. Jeśli naciśniemy przycisk SQL i spróbujemy utworzyć tabelę za pomocą tej instrukcji, zobaczymy, że trzy kolumny dat zostały zdefiniowane jako typy UNKNOWN, jak widać w poniższym fragmencie kodu:

CREATE TABLE stg_product_product
(
id INT
, create_date UNKNOWN
, weight DOUBLE
, default_code LONGTEXT
, name_template LONGTEXT
, create_uid INT
, message_last_post UNKNOWN
, product_tmpl_id INT
, barcode LONGTEXT
, volume DOUBLE
, write_date UNKNOWN
, active BOOLEAN
, write_uid INT
);

W tym momencie mamy kilka możliwych opcji:

•  Popraw instrukcję tworzenia tabeli, wybierając odpowiednie typy danych i uruchom ją ręcznie w naszej docelowej bazie danych z pomocą dowolnego klienta.
•  Usuń te pola, ponieważ nie potrzebujemy ich dla naszego modelu i nie ma potrzeby pobierania ich z metadanych.

Każda z dwóch określonych opcji powinna działać. Ale ponieważ celem tej książki jest wyjaśnienie rzeczy we właściwy sposób i wyjaśnienie, jak radzić sobie z nieoczekiwanymi rzeczami, wybierzemy pierwsze możliwe rozwiązanie. Zaktualizowana instrukcja tworzenia dla tego jest pokazana poniżej:

CREATE TABLE stg_product_product
(
id INT
, create_date DATETIME
, weight DOUBLE
, default_code LONGTEXT
, name_template LONGTEXT
, create_uid INT
, message_last_post DATETIME
, product_tmpl_id INT
, barcode LONGTEXT
, volume DOUBLE
, write_date DATETIME
, active BOOLEAN
, write_uid INT
)

Uruchom tę instrukcję w pomostowej bazie danych i ponownie uruchom transformację. Jeśli wszystko idzie dobrze, powinieneś zobaczyć, jak kończy się pomyślnie. Wróć do pomostowej bazy danych i uruchom następujące zapytanie, aby upewnić się, że rekordy zostały dołączone, a formaty dat są zachowane:

select * from stg_product_product;

Powtórz tę samą procedurę dla tabel product_template i product_category.

Uwaga: Aby ułatwić sobie zadanie, możesz wybrać z wciśniętym klawiszem Control w obu krokach (wejście i wyjście tabeli) oraz skopiować i wkleić w obszarze roboczym. Następnie musisz tylko edytować kilka rzeczy, zmieniając nazwy tabel zarówno w kroku wejściowym, jak i wyjściowym, i jesteś gotowy do pracy.

Prawdopodobnie napotkasz ten sam problem z typem danych UKNOWN, z jakim mieliśmy do czynienia wcześniej. Po prostu zmień je na typ DATETIME w tworzonych skryptach tabeli i jesteś gotowy do pracy.

? Tabele klientów i krajów klientów

Sposób, w jaki poradzimy sobie z tymi dwoma tabelami, jest prawie taki sam, jak w przypadku produktów. Pierwszym krokiem będzie pobranie ich do postoju z naszych metadanych Odoo, a następnie zrobimy inną transformację, aby pobrać wymagane dane z tabeli pomostowej i zgromadzić je w naszej hurtowni danych. Ponownie, istnieje wiele strategii, takich jak obcięcie + wstawienie i wstawienie (połączenie między aktualizacją a wstawieniem, istniejące klucze są aktualizowane, wstawiane są nowe) najczęstsze. W książce nie ma wystarczająco dużo miejsca, aby szczegółowo opisać każdą transformację, ale kroki, które należy wykonać, są bardzo podobne do tych w poprzednim zestawie tabel. W takim przypadku początkowo będziemy szukać jednej tabeli w metadanych Odoo: res_partner, która zawiera informacje o pracownikach, własnej firmie, dostawcach, klientach itp. W tej tabeli znajdują się pola, które pomagają nam określić, jakiego rodzaju podmiotem jest każdy wpis w tabeli, na przykład pole company_type, które określa, czy podmiotem jest osoba, czy firma, lub nadmiarowa flaga is_company. Kolumny dostawca, klient i pracownik mogą również służyć do dostosowywania danych, które pobieramy z metadanych, i unikania pobierania danych, których nie potrzebujemy.

Stwórz transformację klienta

Kiedy już znamy procedurę, cały czas są to te same kroki. Jak widać, wyraźnie potrzebujemy trzech tabel, aby móc wypełnić dwie, które mamy w naszej hurtowni danych. Są to hr_employee, res_country i res_currency. Aby Ci pomóc, podamy Ci kilka wskazówek. Jeśli zaczynałeś w res_partner, jesteś na dobrej drodze, ale przeczytanie danych z tej tabeli nie wystarczy. Oto kilka wskazówek, jak postępować:

•  Aby uzyskać pozostałe dane dla t_l_cust_country, w res_partner znajduje się kolumna o nazwie country_id będąca kluczem obcym tabeli res_country, z której możemy pobrać kraj pracownika.
•  W tej samej tabeli res_country mamy inną kolumnę, currency_id, która jest kluczem obcym do res_currency, w którym możemy uzyskać nazwę waluty faktur klienta.

Pozostawiamy tobie, jak utworzyć transformację, aby pobrać te trzy tabele w obszarze przejściowym, ale jak zwykle kod jest dostępny w repozytorium github, więc zawsze możesz porównać swój wynik z dostarczonym przez nas rozwiązaniem, a jeśli nie w stanie go uruchomić, masz działającą kopię do użycia.

Tabele pracowników i kategorii pracowników oraz działów pracowników

Jeśli pomyślnie zakończyliśmy transformację klienta, pracownik nie będzie miał przed nami tajemnic. Musimy powtórzyć dokładnie te same kroki, które wykonaliśmy poprzednio, ale zamiast używać flag w tabeli res_partner do zbierania klientów, musimy teraz użyć hr_employee do pobrania danych naszych pracowników. Zwróć uwagę, że może być konieczne zainstalowanie aplikacji "Katalog pracowników" w Odoo, nie po to, aby mieć przykładowe dane, ale sprawdzić je w interfejsie, na wszelki wypadek, gdybyśmy chcieli się bawić. Będzie to pomocne w tym ćwiczeniu. Jest jednak dodatkowy krok: aby zebrać opis funkcji pracownika, czyli rolę pracownika, musimy połączyć tabelę hr_employee z hr_jobs za pomocą kolumny job_id, aby zebrać pole name z tej ostatniej tabeli, które jest rolą przez pracownika w firmie. Następnie musimy zebrać trochę danych z działu hr_department, aby zebrać dział pracowników. Ale w tym momencie jedyne, co musimy zrobić, to określić, skąd wziąć te pola, abyśmy mogli bezpośrednio pobrać wszystkie trzy tabele do naszego obszaru pomostowego, a po ostatecznej transformacji wykonamy łączenia.

Tabela faktów: jak stworzyć transformację dla sprzedaży

Do tej pory większość przekształceń była prosta. Sprawy staną się teraz nieco bardziej skomplikowane, ale nie martw się, stopniowo będziemy zwiększać złożoność. Mamy teraz wszystkie wymiary oprócz czasu. Skoncentrujmy się teraz na uzyskaniu bardziej znaczących danych oraz danych potrzebnych do analizy spostrzeżeń naszej firmy. Aby zrozumieć tę transformację, najpierw musimy zrozumieć, w jaki sposób będziemy podchodzić do sprzedaży w naszej firmie. Wyjaśniliśmy to już w rozdziale 5, ale dla odświeżenia utworzymy zamówienia dla naszych klientów, a kiedy zamówienie będzie gotowe, dostarczymy towar i wystawimy fakturę naszym klientom. Ta faktura jest oczywista i będzie zawierała pewną liczbę produktów zgodnych z liniami produktów oraz łączną kwotę zafakturowaną na linię pozycji, w tym podatki. Następnie mamy wszystkie relacje z naszymi tabelami wymiarów, takie jak produkty, pracownicy, klienci i ręczna tabela statusu. Jest to wymagane, aby powiązać zamówienie i fakturę z naszymi wymiarami, abyśmy mogli zapytać bazę danych, aby dowiedzieć się, kto co sprzedał, komu i jakie produkty są najczęściej sprzedawanymi. Aby skonstruować tę tabelę, musimy pobrać dane z kilku tabel w metadanych Odoo. To są:

•  Dla danych zamówienia musimy pobrać dane z sale_order i sprzedaż_zamówienie_online.
•  W przypadku faktur linia_konta_faktury i_linia_faktury_konta.
•  Dla relacji między dwiema tabelami sale_order_line_invoice_rel.
•  Ze względów podatkowych chcemy również pobrać plik account_tax i konto_oline_faktury_podatek.

Przed pobraniem tych tabel tutaj musimy najpierw o tym pomyśleć. Jeśli stoły nie są bardzo duże, możemy w całości pobrać je na naszą inscenizację. Jednak czasami tak nie jest, a nasze stoły mogą być bardzo duże. W takim przypadku zamiast pobierania pełnych tabel możemy zastosować warunek do niektórych pól ze znacznikiem czasu, takich jak pole write_date, i pobrać tylko najnowsze dane. W tym celu postępujemy zgodnie ze standardową procedurą: przeciągamy i upuszczamy krok wprowadzania tabeli do naszego płótna, wybieramy tabelę jak zwykle, a następnie odpowiadamy twierdząco na pytanie, czy chcemy, aby wszystkie kolumny były określone w klauzuli select. Następnie musimy tylko dodać dodatkowe zdanie na końcu zapytania, aby pobrać tylko najnowsze dane. Jeśli procesy ładowania działają dobrze każdego dnia, będziemy pracować nad rozdziałem planowania i możemy zdecydować się na pobieranie danych z poprzedniego dnia. Jako środek bezpieczeństwa, jeśli dobrze współpracujemy z procesami wstawiania aktualizacji, które ładują dane z obszaru pomostowego do hurtowni danych, możemy pobrać dane z dwóch dni, na wypadek, gdybyśmy mieli dzień wolny od pracy i z jakiegokolwiek powodu proces się nie powiódł. Pobaw się trochę z częścią czasową równania. Znasz lepiej niż my swoje wymagania, a także bierzesz pod uwagę ilość danych, które wydobywasz. Oświadczenie powinno być podobne do następującego:

SELECT
id
, origin
, create_date
, write_uid
, team_id
, client_order_ref
, date_order
, partner_id
, create_uid
, procurement_group_id
, amount_untaxed
, message_last_post
, company_id
, note
, "state"
, pricelist_id
, project_id
, amount_tax
, validity_date
, payment_term_id
, write_date
, partner_invoice_id
, user_id
, fiscal_position_id
, amount_total
, invoice_status
, "name"
, partner_shipping_id
FROM sale_order
where write_date > current_date - INTERVAL '2' DAY;

Mając to na uwadze, możemy zrobić to samo dla reszty zestawu tabel, więc pobieramy tylko te dane, które są naprawdę potrzebne do naszej inscenizacji. Tylko pamiętaj, że musisz upewnić się, że wybrałeś opcję obcinania tabeli docelowej w danych wyjściowych tabeli, aby nie dodawać danych w tabeli pomostowej. W przypadku pozostałych czterech tabel wymienionych na początku tego punktu możemy postępować według dokładnie tego samego schematu. Teraz nadszedł czas, aby przejść do bardziej złożonych rzeczy: tworzenia wymiaru czasu.

Tworzenie wymiaru czasu

Czas przejść do bardziej skomplikowanych spraw. Z tego rozdziału dowiesz się, czego prawie zawsze będziesz potrzebować w każdym procesie ETL. Jeśli pamiętasz z poprzedniego rozdziału, w którym widzieliśmy model ER dla hurtowni danych, są tam cztery tabele czasu. Spośród tych tabel najpierw interesuje nas wypełnienie tabeli t_h_time, która zawiera pięć pól. Są to dzień, miesiąc, kwartał, semestr i rok. Po wypełnieniu tego, pomyślimy o tym jako wypełnieniu pozostałych trzech, ponieważ te zostaną ukończone bezpośrednio z głównego. Zanim zaczniemy pisać transformację w celu wygenerowania tych danych, musimy zdefiniować kilka ważnych rzeczy. Są to:

•  Zdefiniuj, jaki będzie nasz pierwszy dzień w tabeli, a jaki ostatni. Możemy to zdefiniować dynamicznie lub statycznie. Jeśli zdecydujemy się na pierwszą opcję, będziemy musieli skorzystać z etapu scalania, ponieważ dane będą każdego dnia inne. Aby uprościć sprawę, wybierzemy stały zakres dat, ponieważ nie będziemy codziennie przeładowywać tej tabeli. Będziemy używać strategii ładowania raz, przez cały czas trwania projektu.
•  Zdefiniuj formaty pól i klucz podstawowy tabeli. Aby wybrać klucz podstawowy tabeli, nie mamy zbyt wielu możliwości wyboru. To musi być unikatowa wartość, a jedyna z pięciu to kod dnia. Wybranym formatem będzie RRRRMMDD, który jest łatwy do odczytania, i unikamy przechowywania dat w naszym systemie, zwłaszcza jako części klucza podstawowego, co zwykle nie jest dobrą opcją, zarówno ze względu na wydajność, jak i zrozumienie i użyteczność.
Uświadomienie sobie tych rzeczy pomoże nam i uprości proces ETL dla tabeli wymiarów czasu. Zaczynajmy! Pierwszym krokiem jest otwarcie PDI, jeśli mamy je zamknięte, następnie powinniśmy przejść do Plik, następnie w podmenu kliknąć Nowy, a następnie Nowa transformacja. Otworzy się puste płótno transformacji.

Wygeneruj tyle dni, ile potrzebujemy do przechowywania

Pierwszym krokiem jest utworzenie wpisu dla każdego dnia, który chcemy zapisać. W poprzednim wprowadzeniu zdecydowaliśmy, że nie będziemy aktualizować tabeli wymiarów czasu. W tym kroku musimy więc uwzględnić długi okres czasu. Biorąc pod uwagę, że otworzyliśmy nasz sklep 1 stycznia 2016 roku, mamy nadzieję, że sklep będzie działał przez co najmniej 10 lat. Musimy więc utworzyć 365 dni (w przybliżeniu) * 10 lat = 3650 wpisów w naszej tabeli. Po jednym na każdy dzień tego 10-letniego okresu. PDI posiada wygodny krok do generowania wierszy na podstawie zakresu wprowadzonego przez dewelopera. Jak być może myślisz, krok nazywa się Generowanie wierszy i można go znaleźć w kroku grupy danych wejściowych. Możemy skorzystać z przeglądarki lub wyszukać go ręcznie w folderze Input. W każdym razie musimy przeciągnąć go z zakładki Projekt na płótno. Gdy mamy krok w naszym kanwie, czas go edytować, aby skonfigurować go do naszych potrzeb. Po prostu kliknij go dwukrotnie, a otworzy się nowy ekran, na którym możemy wypełnić wiele szczegółów i dostroić go.Wypełnimy go, jak pokazano na rysunku



Pierwszym wymaganym polem jest Step Name i powinniśmy je odpowiednio nazwać. Chociaż możemy pozostawić wartość domyślną, zwykle nie jest to dobra praktyka, ponieważ prawdopodobnie w pewnym momencie będziemy musieli zmodyfikować lub ponownie przyjrzeć się tej transformacji i trudno będzie to zrozumieć. Zdecydowaliśmy się nazwać to: Generuj wiersze dnia. Możesz użyć dowolnej nazwy, o której myślisz. Bardzo ważne jest również drugie pole. Będzie to liczba wygenerowanych wierszy. Ponieważ chcemy wygenerować dane z 10 lat, wpiszmy 3653 dni, czyli dokładnie tyle samo dni, które upłynęły między 1 stycznia 2016 r. a 31 grudnia 2025 r. Pozostałe pola pozostawmy nietknięte. Siatka jest wówczas wyświetlana w dolnej części okna dialogowego. Tutaj tworzymy kolumny danych, które chcemy wygenerować. Ponieważ chcemy wygenerować zestaw wierszy dla każdego dnia w kalendarzu, w zasadzie potrzebujemy teraz tylko jednej kolumny, dnia. Później zajmiemy się miesiącem, semestrem, kwartałem i rokiem. Po prostu skup się na przygotowaniu pierwszego dnia, a następnie możemy manipulować danymi, aby wygenerować inne potrzebne nam kolumny. Tak więc jedyne, czego potrzebujemy, to wpis w siatce. W kolumnie nazwa wpiszemy TodaysDate, w Type wpiszemy Date aw formacie wpiszemy rrrrMMdd, który zapisze naszą datę w wygodnym formacie. Nie martw się o typ daty, możemy go później zmienić, a właściwie musimy, ponieważ nadal musimy operować datą, aby uzyskać inne pola. Ostatnią, ale bardzo ważną kolumną jest kolumna Wartość. Wprowadź tutaj wartość początkową w poprawnym formacie rrrrMMdd. W naszym przypadku będzie to 20160101, co przekłada się na 1 stycznia 2016. Przed przejściem do kolejnych kroków i przed kliknięciem OK upewnij się, że okno dialogowe jest takie samo, jak pokazano na rysunku powyżej. Nadszedł czas, aby upewnić się, że wszystkie dane wychodzące z tego kroku są poprawne i zgodne z tym, co zdefiniowaliśmy. Aby przeglądać dane bez ich uruchamiania, możemy kliknąć przycisk Podgląd, a na ekranie pojawi się nowe okno dialogowe z danymi. Domyślnie wyświetlany jest podgląd tylko pierwszych 1000 wierszy. Upewnij się, że odpowiadają one formatowi, który wybraliśmy, jak pokazano na rysunku . Nie martw się, że cały czas powtarzamy dokładnie ten sam rząd, ponieważ tego oczekujemy. Następnie w kolejnym kroku będziemy operować na każdym wierszu, aby wygenerować odpowiednie dane.



Ok, mamy teraz tyle rzędów, ile dni musimy dodać do tabeli końcowej, ale nadal te informacje są dość bezużyteczne. Mamy 1 stycznia 2016, powtarzający się wszędzie i nie tego chcemy. Bez smutków. PDI zapewnia nam kolejny krok transformacji o nazwie Add Sequence. Użyteczność tego kroku jest kluczowa, ponieważ pozwoli nam stworzyć sekwencję, zaczynając od żądanej liczby, w naszym przypadku zero, i operować na przychodzących danych i tej sekwencji. Widzisz to, prawda? Tak! dodamy datę plus kolejny numer i zapiszemy je jako dane wyjściowe nowego dnia. Zaczniemy więc od 1 stycznia 2016 r. i będziemy dodawać jeden dzień więcej do każdego wpisu w danych kroków. Zobaczmy, jak zastosować tę logikę w kroku PDI. Na karcie Projekt wyszukaj folder Przekształć, aw środku znajdziemy krok Dodaj sekwencję. Następnie musimy przeciągnąć i upuścić go na płótno. Przed edycją kroku zawsze dobrze jest powiązać go z poprzednim krokiem, który mamy, ponieważ niektóre kontrole kroku polegają na odczytaniu danych (zwykle metadanych o danych, które pochodzą) z poprzednich kroków, a bez tego nie ma sposób, w jaki PDI może z nich korzystać. Aby połączyć oba kroki, klikamy pierwszy, aw nowym menu, które się pojawi, naciskamy przycisk wyjścia i przeciągamy strzałkę nad drugim krokiem. Po zakończeniu upuszczamy mysz, a łącze zostanie utworzone tak, jak widzieliśmy wcześniej. Możemy teraz dwukrotnie kliknąć drugi krok i skonfigurować go. Ponownie musimy to nazwać, więc tym razem użyjemy "Dodaj sekwencję dni" jako nazwy opisowej. Nazwa wybranej przez nas wartości to nazwa_wartości, ale może to być dowolna nazwa. Pozostałe pola pozostawiamy bez zmian oprócz start at value, które zamiast 1 zmienimy na 0, gdyż inaczej pierwszym dniem naszej tabeli kalendarza będzie 2 stycznia 2016, a to nie jest pożądany wynik . Niestety ten krok nie ma przycisku Podgląd, ale nie powinno to powstrzymać nas przed podglądem. Na szczęście istnieje inny sposób podglądu danych na każdym kroku, choć wymaga to przeprowadzenia transformacji. Kliknij prawym przyciskiem myszy ten drugi krok i poszukaj opcji podglądu. Kliknij go, a pojawi się okno dialogowe. Następnie kliknij Szybkie uruchamianie. Spowoduje to uruchomienie transformacji do tego momentu i pokaże nam wyniki na ekranie. Upewnij się, że wynik jest taki sam jak na rysunku.



Jak widzimy, dodano nową kolumnę zawierającą wygenerowaną sekwencję oraz poprzednie dane. Możesz sobie wyobrazić, co zrobimy w następnym kroku, prawda? Sprawy zaczynają się już wyjaśniać. Czas nacisnąć przycisk Zatrzymaj, aby zatrzymać wykonanie naszej transformacji. Uwaga: nigdy nie wahaj się korzystać z opcji podglądu wierszy tyle razy, ile chcesz. Konieczność modyfikacji kilku kroków, ponieważ przenosimy nieprawidłowe dane z poprzednich kroków, może być bardzo denerwująca. Upewnij się, że wynik każdego kroku jest tym, co próbujesz osiągnąć, często korzystając z opcji podglądu. Następnym krokiem, jak być może się zastanawiasz, jest oczywiście dodanie dwóch kolumn do nowej kolumny. To najtrudniejszy krok, ponieważ podsumowuje poprzednie i gdzie będziemy musieli upewnić się, że wszystko jest odpowiednio dostrojone, aby mieć to, czego potrzebujemy. Gdybyśmy zamiast daty wykonali już konwersję na liczbę, dodanie 31 do 20160101 wygenerowałoby niepoprawną datę jako 32 dzień stycznia, który nie istnieje, dlatego najpierw działamy, a potem konwertujemy.

Używanie kalkulatora do obliczania niektórych innych pól

Przejdźmy do interesującego kroku. Jesteśmy gotowi do użycia jednego z najpotężniejszych wbudowanych kroków w PDI. Krok kalkulatora. Poszukaj go w folderze Transform i przeciągnij i upuść na płótnie. Jako nazwę kroku wybraliśmy Generuj kolumny czasu, ale możesz użyć dowolnej nazwy. Tak jak w poprzednim kroku, upewnij się, że między drugim a trzecim krokiem zostało utworzone łącze. W tym momencie powinniśmy mieć łańcuch trzech kroków, połączonych jeden po drugim. Krok kalkulatora jest podobny do tego, co widzieliśmy do tej pory. Posiada siatkę, w której możemy zdefiniować pola. Pola te określają gdzie będą nasze kroki wyjściowe. Aby wygenerować kroki wyjściowe, możemy użyć wbudowanych funkcji i/lub pól z poprzedniego kroku lub zmiennych, które zobaczymy później. Zacznijmy tworzyć nowe pole wyjściowe. Ostateczny wygląd kalkulatora powinien wyglądać tak, jak na rysunku . Ale zobaczmy wyjaśnienie każdego pola.



W nowej kolumnie pola wpisz Day_id. Będzie to nazwa naszej pierwszej kolumny w danych wyjściowych tego kroku. Pod kolumną obliczeń kliknij rozwijane pole i poszukaj operacji o nazwie Data A + B dni, która pozwoli nam dodać liczbę do daty, którą już mamy. Aby to zadziałało, mamy teraz trzy kolumny, zwane Polem A, Polem B i Polem C. Pole A zawsze będzie polem wyjściowym lub wynikiem operacji. Pole A będzie pierwszym parametrem dla operacji, a pole B drugie. Należy zauważyć, że istnieją operatory, które działają tylko z jednym parametrem. W takim przypadku wystarczy użyć kolumny Pola B i pozostawić pustą kolumnę Pola C. Ponieważ nasza operacja to C= A+B, musimy wypełnić wszystkie trzy kolumny. W kolumnie Pole A wybieramy z rozwijanej listy TodaysDate. Tak nazwaliśmy wygenerowaną datę w pierwszym kroku. W polu B wybierzemy valuename, czyli sposób, w jaki nazwaliśmy sekwencję w naszym drugim kroku. W polu C wybieramy tę samą nazwę, którą nadaliśmy naszej nowej kolumnie Day_id, ponieważ chcemy w niej przechowywać wynik obliczeń. W polu Typ wartości wybierzemy datę, ponieważ nadal potrzebujemy formatu daty dla innych operacji na kolumnach. Upewnij się, że kolumna maski konwersji jest ustawiona na rrrrMMdd, ponieważ jest to nasz pożądany format. W ten sposób mamy prawie gotowe pierwsze pole tabeli (pierwsza kolumna). Ale jeśli pamiętasz, tabela docelowa miała pięć pól, więc wciąż mamy cztery do zrobienia. Na szczęście dla nas PDI ponownie udostępnia zestaw wbudowanych funkcji, które pozwolą nam łatwo obliczyć pozostałe pola. Month_id, Quarter_id, Semester_id i Year_id to pozostałe pola, które do tej pory musimy dodać. Nie ma z tym problemu, ponieważ wystarczy podać obliczenia, a wynik jest bezpośredni. W przypadku id_miesiąca interesuje nas numer miesiąca w roku, więc styczeń będzie równy 1, luty będzie równy 2 i tak dalej. W kolumnie obliczeniowej musimy wybrać Month of Date A, a pole A będzie miało wartość Day_id, ponieważ obliczamy ją na podstawie naszej sekwencji dni. Typ wartości będzie liczbą całkowitą, ponieważ jest to oczywiste. Dla Quarter_id użyjemy tej samej logiki. Istnieje obliczenie o nazwie Quarter of Date A, a my również określimy Day_id w kolumnie fieldA. Ponownie typem danych jest liczba całkowita. Z Semester_id mamy problem, ponieważ Kettle niestety nie ma wbudowanej funkcji do obliczania semestru. Musimy więc znaleźć sposób na określenie semestru. Ponownie szkoda, że nie możemy zastosować funkcji MOD w naszej kolumnie Semester, ponieważ przy łatwej operacji bylibyśmy w stanie to obliczyć. Zatem tym razem nie możemy użyć kalkulatora do obliczenia tego pola, więc użyjemy myślnika, co oznacza, że pozostawimy pole puste. Rozwiążemy to później. Year_id ponownie ma łatwe rozwiązanie, ponieważ istnieje obliczenie o nazwie Year of Date A, a jego wynikiem jest liczba całkowita.

Obliczanie bardziej złożonych pól i usuwanie niepotrzebnych

Ok, do tej pory obliczyliśmy prawie wszystko oprócz semestru. Ale jeśli pamiętasz z naszego modelu ERD, mieliśmy cztery harmonogramy. Nadszedł czas, aby przyjrzeć się kolumnom, które musimy wypełnić w innych tabelach. Wcześniej wyjaśniliśmy, że te trzy inne tabele zostaną wypełnione z dużej, którą budujemy, więc musimy mieć wszystkie potrzebne dane również dla tych tabel, zawarte w makrorozkładzie czasowym, który budujemy. Szybkie spojrzenie na diagram pokaże nam, że potrzebujemy opisu miesiąca: styczeń, luty…, a nie tylko liczby, opisu kwartału, który będzie Q1, Q2… i opisu roku. W przypadku roku zwykle nie ma sensu pisanie roku literami, więc w tym celu użyjemy dokładnie tej samej wartości, co numer roku: 2016, 2017 i tak dalej. Tych konwersji nie można wykonać na kroku kalkulatora, więc potrzebujemy czegoś innego. Tutaj przedstawiamy kolejny bardzo ważny krok w PDI. Ten krok jest nazywany wybieraniem wartości, ale zwykle robi znacznie więcej. Pozwala nam przekształcać nasze dane bez konieczności używania jakiegokolwiek fragmentu kodu. Znajdziesz go w grupie Transform. Zobaczmy, jak to działa. Krok Wybierz wartości ma trzy zakładki. Pierwszy, w którym możemy wybrać, które pola z poprzednich kroków chcemy propagować do wyjścia z tego kroku i czy chcemy zmienić nazwę pola, długość lub precyzję. Jest tutaj przydatny przycisk o nazwie Pobierz pola do wyboru, który załaduje wszystkie poprzednie pola do siatki. Następnie możemy usunąć lub dodać, co chcemy, ale zwykle naciśnięcie tego przycisku jest dobrym punktem wyjścia. Upewnij się, że poprzedni krok został już połączony z tym, ponieważ w przeciwnym razie przycisk nie będzie działał. Możemy ponownie użyć przycisku podglądu, aby upewnić się, że wszystko nadal działa. To właściwy czas, aby zobaczyć, jak upuścić pole i nie propagować go do wyjścia z kroku. Jeśli kliknęliśmy przycisk, zobaczysz, że pierwsze pole, którego użyliśmy do wygenerowania naszych dat, nasze sklonowane pole, które zawsze zawiera 20160101, które nazwaliśmy TodaysDate, wciąż podlega naszej transformacji. Ponieważ to pole było używane tylko jako podstawa do dodania numeru kolejnego, a mamy już utworzony dzień, nie jest nam już potrzebny. Tak więc pierwszą rzeczą do zrobienia w tym kroku jest usunięcie pola TodaysDate z siatki. Kliknij go prawym przyciskiem myszy i wybierz Usuń wybrane linie lub naciśnij przycisk Del na klawiaturze. Dokładnie to samo dotyczy pola valuename, które zawiera nasz kolejny numer. Możemy go również usunąć z siatki, ponieważ nie jest już potrzebny.

Uwaga: prawdopodobnie będziesz się zastanawiać, dlaczego nie używamy drugiej zakładki tego kroku o nazwie Usuń. To dobre pytanie i zależy od tego, co wolisz. Jeśli nie wybierzesz pola, to pole nie będzie propagowane, więc jest równoznaczne z jego usunięciem. Której opcji użyć, zależy od Ciebie.

Dobra, podsumujmy. Nadal brakuje nam opisu semestru, opisu kwartału i opisu miesiąca. Zacznijmy od najnowszego. Kolejna funkcja kroku Wybierz wartości znajduje się w trzeciej zakładce. Zakładka Metadane pozwala nam zmienić metadane pola. Metadane pola to wszystkie dane, które wyjaśniają, czym jest pole. W tym przypadku możemy również zmienić typ pola, z numeru na tekst i tak dalej. Tutaj zmienimy nasz dzień w formacie 20160101, aby używać tylko miesiąca, i zmienimy miesiąc z liczby na rzeczywistą nazwę miesiąca w prostym języku angielskim. Aby to osiągnąć, najpierw musimy wrócić do pierwszej zakładki i zduplikować pole Day_id, ponieważ będziemy operować na tym polu i nadal potrzebujemy reprezentacji 20160101, ponieważ potrzebujemy jej dla innej kolumny w bazie danych. Dodajmy więc szóstą nazwę pola w siatce, która będzie używać Day_id jako nazwy pola bazowego, ale zmieni nazwę na MonthName, ponieważ będzie to wynik przekształceń. Kolumny długości i precyzji pozostawiamy puste, ponieważ niczego tam nie zmieniamy. Sprawdź rysunek, aby upewnić się, że pasuje do tego, co tworzysz.



Następnie przechodzimy do trzeciej zakładki, zakładki Metadata i jako nazwy pola używamy nowo utworzonego pola MonthName. Typ tego pola będzie ciągiem, ponieważ planujemy przechowywać tekst, i tutaj pojawia się magia. Kolumna Format pozwala nam określić format wyprowadzanego tekstu. Jeśli użyjemy przycisku rozwijanego, nie zobaczymy go, ale istnieje specjalny format do konwersji części miesiąca daty na tekst. Ten format to MMMM (cztery m wielkimi literami), więc użyjmy tego formatu. Istnieje również inna kolumna, której możemy użyć, kolumna Date Locale, która użyje określonych tutaj ustawień regionalnych do wyświetlenia nazwy. Ponieważ chcemy używać angielskich nazw miesięcy, możemy użyć dowolnego angielskiego ustawienia regionalnego: wystarczy en_us, ale także en_GB i wiele więcej. Wynik powinien być taki sam, jak na rysunku 6.19. Następnie uruchom podgląd, aby upewnić się, że uzyskałeś oczekiwane wyniki.



Na diagramie jest jeszcze jedno pole, o którym jeszcze nie mówiliśmy, ponieważ jest prawie takie samo jak to, które mamy. Jest to skrócona nazwa miesiąca. Na szczęście mamy do tego format MMM, więc musimy powtórzyć dokładnie te same kroki, aby uzyskać nazwę miesiąca, ale z tą różnicą, że tym razem nasza kolumna formatu będzie zawierała tylko trzy M. nazwiemy to pole MonthShort. Zostawiamy to jako ćwiczenie dla Ciebie.

Wykonywanie zaawansowanych manipulacji

Z tym dzielą nas już tylko dwa pola. Nazwa semestru i kwartału. Jak w życiu, istnieje wiele sposobów na wykonanie tego zadania. Tak czy inaczej wymaga od nas przedstawienia nowego kroku. Ponieważ oba kroki są uważane za ważne i powinieneś o nich wiedzieć, przedstawię dwa możliwe sposoby ich wykonania. Pierwszy uprawnia do użycia kroku Formula, który można znaleźć w kroku Scripting, a drugi wykorzystuje prawdopodobnie jeden z najpotężniejszych kroków w Kettle, ale także najtrudniejszy do opanowania, czyli zmodyfikowaną wartość JavaScript, którą można również znaleźć w grupie Skrypty. Skupmy się najpierw na kroku formuły, ponieważ jest on łatwiejszy do zrozumienia. Krok formuły Nadszedł czas, aby przeciągnąć i upuścić krok formuły do płótna i utworzyć łącze między ostatnim krokiem w łańcuchu, którym były wybrane wartości, a nowym usuniętym krokiem. W tym kroku mamy dwa zadania. Jednym z nich jest utworzenie opisu kwartału, który będzie wyglądał jak Q1, Q2 itd., a drugi polega na obliczeniu semestru. Skupmy się na pierwszym. Kliknij dwukrotnie nowo dodany krok formuły. Najpierw nazwij krok. Użyliśmy nazwy "Dodaj dodatkowe pola daty". Ponieważ tworzymy Opis kwartału, w nowym polu umieścimy QuarterDesc jako nazwę. W kroku formuły możemy kliknąć dwukrotnie, a pojawi się wyskakujące okienko. W górnej części ekranu możemy wpisać naszą formułę, natomiast w lewej mamy listę dostępnych nam formuł i przekształceń. Jeśli klikniemy na jedną, w dolnej części okna dialogowego zostanie wyświetlona strona pomocy ze składnią i przykładami dla każdej formuły. Trzeba przyznać, że ten krok nie jest łatwy w użyciu, więc przy odrobinie praktyki możesz napisać formułę bezpośrednio w górnym polu. Użyjemy dwóch funkcji: jedna to formuła konkat, która jest wykonywana za pomocą ampersand & słowo kluczowe; a następnie inny, aby przekonwertować liczbę całkowitą, która jest liczbą porządkową ćwiartki, na tekst, ponieważ funkcja konkat działa z dwoma polami tekstowymi. Należy zauważyć, że do pól, które pochodzą z poprzednich kroków, nie można bezpośrednio odwoływać się za pomocą ich nazw, dlatego musimy je dodać w nawiasach kwadratowych []. Ponadto każdy tekst, który chcemy połączyć, musi być zdefiniowany między podwójnymi cudzysłowami. Wynikowa formuła będzie następująca: "Q" & TEXT([Quarter_id]). Jeśli przejrzymy krok, powinniśmy zobaczyć, że mamy już gotowy opis kwartału. Czas przejść do pozostałego pola, jakim jest Semestr. Istnieje wiele sposobów obliczania semestru. Jednym z nich jest funkcja warunkowa, taka jak instrukcja IF lub CASE. Jeśli wartość miesiąca mieści się w przedziale od 1 do 6, to semestr wynosi 1, w przeciwnym razie 2. Inny próbuje dokonać dzielenia liczby całkowitej numeru miesiąca z przedziału 7 i dodać jeden do wyniku. Ponieważ nie jest to najłatwiejsze i najprostszym podejściem, użyjmy instrukcji warunkowej, aby to obliczyć. Nazwiemy nową dziedzinę Semestr. Aby to obliczyć, użyjemy prostej logiki. Jeśli miesiąc jest mniejszy lub równy 6, to semestr wynosi 1, w przeciwnym razie 2. Formuła powinna wyglądać następująco: IF ([Month_id] <=6; 1; 2). Sprawdź, czy pasuje to do rysunku .



Krok Zmodyfikowana wartość JavaScript

Jest to jeden z najpotężniejszych kroków dostępnych w PDI. Zmodyfikowany krok wartości JavaScript pozwala nam używać kodu JavaScript do wykonywania dowolnych operacji, tworzenia nowych pól i łączenia pól. Oczywiście wymaga to znajomości języka JavaScript, ponieważ musimy używać tego języka, aby wykonać ten krok. Ponieważ celem tej książki nie jest nauczanie języka JavaScript, przedstawimy tylko obliczenia, które wykonaliśmy w tym kroku, aby osiągnąć te same wyniki, co w kroku Formuła. Jeśli przeciągniesz i upuścisz krok i połączysz go w kanwie, możesz zacząć. Kliknij go dwukrotnie, a zobaczysz wpis tekstowy w kroku. Po prostu skopiuj ten kod, a następnie kliknij przycisk na dole o nazwie Pobierz zmienne, który utworzy kroki wyjściowe dla dwóch zdefiniowanych pól.

var QuarterDesc = 'Q' + Quarter_id;
var Semester = 0;
if (Month_id <=6){
Semester = 1;
} else{
Semester = 2;
}

Jeśli wszystko jest w porządku, powinieneś zobaczyć to samo, co na rysunku a podgląd powinien dać takie same wyniki, jak w kroku kalkulatora.



Naprawa kilku rzeczy

Jeśli przejrzymy naszą transformację, zauważymy, że mamy powtarzające się wartości dla naszych miesięcy i kwartałów. Jak odróżnić Q1 od 2016 i Q1 od 2017? Tak jak jest teraz, nie jest to możliwe bez patrzenia na inne pola w tym samym rzędzie. To samo dzieje się z miesiącem. Będziemy mieli problem z wstawieniem tych informacji, ponieważ nasze tabele wymiarów muszą zawierać unikalne wartości dla każdego rekordu. Zwykle wymuszamy to za pomocą klucza podstawowego, ale czasami w hurtowni danych nie jest to używane i to proces ETL zawiera logikę pozwalającą uniknąć takich sytuacji. Chcemy również uwzględnić w naszych opisach miesięcy rok, aby był bardziej przejrzysty. Jest wiele miejsc, w których można to naprawić. Możemy to naprawić, gdy zbudujemy ETL, który odczytuje dane z obszaru pomostowego i zapisuje je do hurtowni danych, używając wyrażenia SQL do manipulowania polami; możemy wrócić do poprzednich kroków i tam go rozwiązać; lub możemy dodać dodatkowy krok i rozwiązać go od razu. W zależności od przypadku jedno rozwiązanie może być lepsze od drugiego, ale czasami nie ma to znaczenia. Aby nie komplikować sprawy, poprawmy poprzednie kroki.

1. Wróć do kroku wyboru wartości i zmień formaty dwóch miesięcy MMMM na MMMM rrrr i MMM na MMM rrrr. Zwróć uwagę na spację między M i y.
2. Aby dołączyć rok do miesiąca, albo ponownie używamy nowej formuły lub kroku JavaScript na końcu, albo dokonujemy transformacji metadanych za pomocą kroku Wybierz wartości. My zdecydujemy się na to drugie. W naszym kroku wybierania wartości przechodzimy do zakładki Select & Alter i tworzymy nowy wiersz z nazwą pola Day_id i zmieniamy nazwę na newMonth_id. Następnie przechodzimy do zakładki metadane i dodajemy nowy wiersz o nazwie pola newMonth_id typu string i formacie rrrrMM. Spowoduje to utworzenie nowego formatu miesiąca typu RRRRMM, który jest potrzebny do hurtowni danych, jak zobaczymy później.
3. Ustalenie kwartału jest nieco bardziej skomplikowane, ponieważ nie ma dla niego wzoru daty. Ale możemy to zrobić w naszym kroku JavaScript lub formuły.

a. W kroku formuły najpierw zmodyfikuj opis kwartału, dodając rok na początku. Formuła powinna teraz brzmieć:

TEKST([id_roku]) & "Q" & TEKST([id_kwartalu]). Dzięki temu poprawilibyśmy opis, ale jeszcze nie identyfikator. Utwórz nowy wiersz o nazwie newQuarter_id z następującą formułą: TEKST([Year_id]) & TEKST([Quarter_id]).

b. W przypadku kroku JavaScript musimy wykonać podobną poprawkę. Kod JavaScript zostanie zmieniony na następujący i należy dodać nowy wpis w dolnej siatce, aby propagować newQuarter_id, jak na rysunku



var QuarterDesc = Year_id + 'Q' + Quarter_id;
var newQuarter_id = str2num(num2str(Year_id) +
num2str(Quarter_id))
var Semester = 0;
if (Month_id <=6){
Semester = 1;
} else{
Semester = 2;
}

Semestr nie wymaga żadnej poprawki, ponieważ będziemy przechowywać 1 lub 0, ponieważ nie mamy do tego tabeli wymiarów. Jeśli chcesz uwzględnić również rok, pozostaw to jako ćwiczenie.

Ostatni krok

Teraz, gdy mamy wszystko, czego potrzebujemy, nadszedł czas, aby wygenerować ostatni krok. Cóż, w rzeczywistości dwa ostatnie kroki, ponieważ ten ostatni będzie krokiem wyjściowym bazy danych do przechowywania wyniku tego w naszym schemacie pomostowym. Najpierw musimy przeciągnąć i upuścić kolejny krok wyboru wartości w naszym kanwie. Połączymy go z obecnym łańcuchem kroków i wykorzystamy do podwójnego celu. Po pierwsze, aby wybrać wszystkie pola, które ostatecznie chcemy przechowywać i odrzucić te, które nie są interesujące. Po drugie, możemy również użyć zakładki metadane, aby zmienić typ danych kolumny, jeśli zajdzie taka potrzeba. Możemy również pozwolić, aby ostatni krok, a nawet niejawna konwersja bazy danych, zmieniły typ danych, ale dobrą praktyką jest robienie tego bezpośrednio na ETL, ponieważ inne mogą mieć nieoczekiwane wyniki. Na tym etapie nie musimy propagować kilku pól. Są to Month_id, Quarter_id i Semester_id, ponieważ nie mają pożądanej przez nas formy lub w ogóle nie zawierają danych. Więc albo nie uwzględniamy ich na liście, albo dodajemy je na karcie Usuń. Następnie musimy zmienić nazwy trzech kolumn, aby zastąpić trzy, których nie propagowaliśmy do danych wyjściowych. Zastosuj następujące zmiany nazw:

&buull;  Nazwa pola newMonth_id zostanie zmieniona na Month_id
&buull;  Nazwa pola newQuarter_id zostanie zmieniona na Quarter_id
&buull;  Nazwa pola Semester zostanie zmieniona na Semester_id

Poza tym będziemy też porządkować pola. Nie jest to tak naprawdę obowiązkowe, ale wolimy to zrobić dla jasności. Końcowy stan tego kroku powinien wyglądać tak, jak pokazano na rysunku



Pozostało tylko zmienić teraz dwa pola, więc zapisujemy jedno jako String, chociaż powinno to być liczba całkowita, ale później zrobimy konwersję, czyli Day_id, i kolejne, nowe Month_id, które będzie INT zamiast ciągu znaków. Można je zobaczyć na rysunku



Teraz nadszedł wreszcie moment, aby stworzyć nasz ostatni krok. W tym celu przechodzimy do folderu Wyjście w widoku projektu i przeciągamy i upuszczamy krok wyjściowy tabeli w obszarze roboczym, a następnie łączymy go. W tym kroku musimy skonfigurować kilka rzeczy: odpowiednio nazwać krok; wybranie połączenia do zdefiniowanego przez nas wcześniej obszaru postojowego; wybierając schemat, który w przypadku MySQL/MariaDB jest bazą danych, którą stworzyliśmy, czyli naszą pomostową bazą danych, jako docelową nazwę tabeli ustaw stg_time i zaznacz obciętą tabelę, jak powiedzieliśmy wcześniej, tę tabelę załadujemy tylko raz. Jeśli z jakiegokolwiek powodu chcemy załadować go później, zaznaczając to pole, upewnimy się, że wszystkie poprzednie dane zostaną odrzucone przed dodaniem nowego. Pozostałe opcje możemy pozostawić bez zmian. Jeśli spojrzysz na dolną część okna dialogowego, zobaczysz przycisk o nazwie SQL. Jeśli naciśniesz ten przycisk, zostanie wyświetlona sugerowana instrukcja tworzenia tabeli, a my możemy zdecydować o uruchomieniu jej w naszej pomostowej bazie danych. Jeśli spojrzymy na pola, zobaczymy, że PDI próbowało zdecydować, które typy danych są zdefiniowane dla każdego pola. Czasami nie jest to poprawne lub nieoptymalne, jak tym razem. Ale ponieważ w obszarze przejściowym nie przejmujemy się tym zbytnio, akceptujemy je i naciskamy przycisk wykonania. Tabela zostanie utworzona bez zmian, ale dane nadal nie zostaną załadowane. Wynik powinien wyglądać mniej więcej tak:

SQL executed: CREATE TABLE test.stg_time
(
Day_id TINYTEXT
, Month_id INT
, Quarter_id TINYTEXT
, Semester_id INT
, Year_id INT
, monthName TINYTEXT
, monthShort TINYTEXT
, QuarterDesc TINYTEXT
)
1 SQL statements executed

Możemy teraz zamknąć okno dialogowe, ponieważ wszystko jest w porządku. Następnie wracając do naszej transformacji, nadszedł czas, aby ją uruchomić i załadować dane do obszaru pomostowego. Przejdź do menu akcji i kliknij polecenie Uruchom lub naciśnij klawisz F9. Transformacja rozpocznie się i pojawi się okno dialogowe Uruchom. Pozostaw wszystko jako domyślne i kliknij przycisk Uruchom. Po kilku sekundach transformacja powinna zakończyć się pomyślnie. Na dolnym ekranie PDI poszukaj zakładki Step Metrics i upewnij się, że mamy wygenerowane 3653 wierszy. Możemy teraz przejść do naszej tymczasowej bazy danych i zapytać nową tabelę, aby upewnić się, że dane już tam są:

SELECT *
FROM stg_time

Rezultatem są 3653 rekordy w tabeli. Więc wszystko ok. Po sprawdzeniu ostatecznego wyniku wszystko wygląda w porządku, jak widać na rysunku









.