Postgres-Pentaho PDI PowerPack

Bazy danych oferują potężną moc błyskawicznego przetwarzania ustrukturyzowanych danych. Wszelkie obliczenia, poszukiwanie informacji, łączenie danych, wybieranie właściwych danych ze zbiorów dzięki bazom danych można wykonać znacznie szybciej niż z użyciem innych formatów. Ale bazy danych, jezyk SQL, nie jest tak elastyczny jak typowe języki programowania. Bazy danych nie oferują też najczęściej tak wygodnego, intuicyjnego GUI jakie oferują narzedzia typu ETL. Jest jeszcze inny problem do pokonania; tworzenie wyrafinowanych, szybko działających, zapytań czy procedur w językach baz danych wymaga ekspeckiej wiedzy którą nabywa się latami. Na szczęście istnieje możliwość połączenia tych dwóch technologii w jednym rozwiązaniu.

Konfigurujemy środowisko PostgresSQL

Jeśli chcemy uruchomić polecenie z linii komend w systemie operacyjnym Windows, jednyna możliwością jest skorzystanie z języków które wspiera Postgres (nie możemy uruchomić skryptu bezpośrednio w systemie operacyjnym). Dla celów tego ćwczenia wybierzemy Python. Pierwszą rzeczą jest naturalnie instalacja środowiska Python na maszynie na której mamy bazę Postgres. Instalacja i konfiguraja środowika Python nie jest przedmiotem tego postu. Jeśli zatem mamy działający Python na maszynie, przystępujemy do etapu drugiego - konfiguracji bazy danych. Jeśli chcemy korzystać z Python'a w Postgresie musimy dodać do kazdej bazy danych obsługę tego języka. Robimy to komendą:

CREATE LANGUAGE plpython3u;

Jeśli wykonanie przebiegło pomyślnie, otrzymamy komunikat:

Query returned successfully in 82 msec.

Nasza baza danych jest gotowa do tworzenia funkcji z użyciem języka Python.

Tworzymy transformacje w Pentaho PDI

Nasza prosta transformacja wygeneruje kilka linii z losowymi danymi a następnie zapisze je do tabeli bazy Postgres.

Przed rozpoczęciem tworzenia transformacji utwórz testową bazę, tabelę oraz stwórz użytkownika bazy danych i utwórz połączenie do bazy danych.

Tworzymy funkcję w Pythonie

Nasza funkcja będzie bardzo prosta - uruchomi ona transformację którą stworzyliśmy powyżej - zapisze do tabeli Postgres kilka rekordów. Wywołamy ja bez parametrów. Treść funkcji:

CREATE OR REPLACE FUNCTION uruchom_pdi() RETURNS text AS
$$
import subprocess
res = subprocess.run("E:/Pentaho/pdi-ce-8.4/data-integration/pan.bat /file:E:/Pentaho/Workspace/Postgres/test.ktr /level:Basic > C:/temp/trans.log", shell=True)
return res
$$ LANGUAGE plpython3u;

Funkcję wywołujemy w następujący sposób:

select uruchom_pdi();

W wyniku jej wykonania Postgres zwróci rezultat:

CompletedProcess(args='E:/Pentaho/pdi-ce-8.4/data-integration/pan.bat /file:E:/Pentaho/Workspace/Postgres/test.ktr /level:Basic > C:/temp/trans.log', returncode=0)

Połączenie bazy danych z ETL'em daje ogromne możliwości eksploracji danych. Możesz w ten sposób pobierać dane zróżnych źródeł (ETL posiada wiele gotowych konektorów do szeregu systemów... WebSerwisy, Bazy SQL i NoSQL, pliki różnych formatów...), tranformować je dużo wygodniej niż na poziomie bazy danych, zapisywać dane po przetworzeniu do różnych formatów i systemów docelowych. Potrzebujesz pomocy? Skontaktuj się z nami.