Uruchamianie skryptów Python w Pentaho PDI
Python jest jednym z najbardziej popularnych języków programowania. Różne statystyki pokazują że jest to albo lider albo zajmuje jedno z trzech miejsc na podium. Dlaczego Python jest tak popularny? Python to język wysokiego poziomu, który charakteryzuje się bardzo prostą składnią. Jest językiem o bardzo szerokim zastosowaniu, pozwalającym na napisanie dosłownie wszystkiego przy użyciu odpowiednich bibliotek lub frameworków. Python jest też często używany jako język skryptowy w aplikacjach napisanych w innych językach. Trzeba podkreślić również fakt, że środowisko Python jest banalnie proste do instalacji a rozszerzanie możliwości przez dodatkowe biblioteki błyskawicznie szybkie i nie absorbujące użytkownika.
Czasami w Pantaho robimy rzeczy które trudno zrealizować używając standardowych komponentów - dlatego bardzo łatwo możemy rozszerzyć możliwości Pentaho wstawiając odpowiedni skrypt napisany w Python'ie.
Przygotowanie środowiska - instalacja Python
Za uruchamianie kodu Python w Pentaho PDI/Pentaho Kettle odpowiedzialny jest krok "CPython Script Executor". Ten krok jest dostępny w Pentaho po zainstalowaniu pluginu o takiej samej nazwie autorstwa Mark Hall. Jednak ten komponent potrzebuje środowiska Python w systemie operacyjnym. Rozpocznij więc od instalacji Python na swoim komputerze.
Jeśli korzystasz z Windows, najłatwiej jest pobrać Python uruchamiając Microsoft Store i wpisaniu "Python" w pasku wyszukiwarki sklepu:
Komponent "CPython Script Executor" potrzebuje jednak kilku pakietów Python by mógł funkcjonować (twórca założył że będzie on używany także do operacji "Machine Learning" wiec potrzebne są dodatkowe pakiety/moduły). Doinstaluj je - po zainstalowaniu Python uruchom wiersz poleceń i wykonaj instalacje:
- pip install scikit-learn
- pip install pandas
- pip install matplotlib
Jeśli nie zostały tu wymienione wszystkie potrzebne pakiety, przy pierwszym uruchomieniu transformacji zawierającej "CPython Script Executor" Pentaho zgłosi błąd dokładnie informując którego pakietu brakuje. Jednym z pomysłów może być zainstalowanie wszystkiego jednocześnie w pakiecie miniconda. Środowisko to jednak często nie instaluje się poprawnie i należy wskazywać w zmiennych ścieżki do bibliotek.
Instalacja pluginu CPython Script Executor
Mając zainstalowany Python i potrzebne pakiety/biblioteki przechodzimy do instalacji plugin'u w Pentaho. Wybierz "Tools=>Marketplace" z menu Pentaho. Wyszukaj plugin "CPython Script Executor". Kliknij "Install". Po instalacji ponownie uruchom Pentaho.
Hitachi Vantara sukcesywnie zraża potencjalnych użytkowników Pentaho Kettle do tego produktu (motywując do używania wersji komercyjnej). W najnowszej wersji 9.4 nie znajdziesz już w menu "Marketplace". Możesz to obejść uruchamiając poprzednie wersje a pobrany plugin, katalog 'steps', z katalogu 'plugins' skopiować do takiego samego katalogu w nowej wersji Pentaho Kettle.
Tworzymy pierwszą transformację z kodem Python
Wybierz "File=>New=>Transformation". W panelu po lewej stronie ekranu, w zakładce "Design" rozpocznij pisać "python". Zobaczysz że w sekcji "Statistics" pojawi się krok nazwany "CPython Script Executor" - wybierz go.
Otworz właściwości tego kroku dwukrotnie na nim klikając. Zakładkę "Configure" pozostaw bez zmian. W "Python Script" wprowadź kod:
#Testowy skrypt
test_value = 'Hello world!'
W dolnym polu "Python variables to get" wpisz zmienną którą zwraca skrypt: test_value. Zapisz zmiany i zamknij okno.
By ten krok się uruchomił, tranformację musi coś zainicjować. Np może to być krok "Generate Rows". Wstaw go przed "CPython Script Executor" (w "Limit" właściwości tego kroku wstaw 1).
Uruchom transformację. W rezultacie wykonania tej transformacji, w dolnym oknie i zakładce "Preview data" zobaczysz rezultat; zmienna "test_value" ma wartość "Hello world!".
Przesyłanie danych do CPython Script Executor
Aby przejąć dane z poprzednich kroków transformacji Pentaho otwórz zakładkę "Configure" i określ z którego kroku w transformacji mają pochodzić dane oraz wpisz jak nazywać się będzie zmienna która przejmie te dane. W polu "Pandas frame name" wpisz nazwę dla DataFrame biblioteki pandas [czytaj więcej czym jest dataFrame].
Pole "Numbers of rows to Process" pozwala Ci definiować zachowanie tego kroku; wybierz 'Row by Row' by przy przesłaniu każdego kolejnego wiersza w strumieniu transformacji uruchamiany był ten krok.
By odczytać dane z DataFrame [tutaj zmienna 'pframe'] użyj następującego polecenia: 'dane = pframe["dane_z_poprzedniego_kroku"][0]' - ('dane_z_poprzedniego_kroku' to pole które jest generowane przez krok wpisany w polu 'Step name').
Zwracanie danych przez CPython Script Executor
Jeśli chcesz by wykonanie skryptu Python'a zwróciło rezultat który będziesz mógł przekazać do następnego kroku, wpisz te zmienne w polu 'Python variables to get'. Opcja 'Continue on unset variables' służy do kontroli zachowania Pythona - jeśli zaznaczysz tę opcję, skrypt nie zgłosi błędu nawet jeśli zmienne są puste. Następna zakładka, 'Output fields' używana jest w przypadku jeśli chcesz ustawić typy zwracanych danych - domyślnie może być pusta.
Bug w CPython Script Executor
Znany problem polega na tym, że czasami ten wtyczka traci połączenie z Pythonem. Dzieje się to czasami, gdy uruchamiasz skrypt z błędami w kodzie. Po ponownym uruchomieniu Pentaho wszystko działa ponownie. Pamiętaj o tym, jeśli jesteś pewien, że twój kod jest poprawny.
Powyższy przykład jest banalny. Ale za wiedząc jak uruchomić kody Python w Pentaho, możesz połączyć te dwa światy robiąc niesamowite rzeczy.