Pentaho - praca z datami
Jak odczytywać daty, konwertować do innego formatu i inne operacje na datach w Pentaho Kettle
Odczyt dat i ich konwersja sprawia wiele problemów niedoświadczonym użytkownikom. Bez zbędnej gadaniny - przejdźmy prosto do tematu.
Odczyt daty
Przy czytaniu plików (Tekstowe, pliki Excela) daty w kolumnie mogą mieć jeden z przykładowych formatów (tylko mała próbka jak mogą być one zapisane):
2023-10-26
26/10/2023
10/26/23 14:15
26/Oct/23 5:43 AM
Często krok odczytujący plik, np. "Text file input" potrafi automatycznie, poprawnie zinterpretować format daty i zaproponować właściwy w opcjach "Format". Czasami jednak musimy ręcznie wstawić tam właściwy. Np. jeśli nasze daty zapisane są w formacie "2023-10-26", w polu "Format" wpisujemy maskę "yyyy-MM-dd". Upewnij się że odczytywana data ma typ danych "Date" - jeśli będzie to "String", nie będziesz mógł użyć takiej informacji jako daty w następnych krokach.
Amerykański zapis daty jest często "dziwaczny" i nie dość że miesiąc występuje tam na początku, często zapisany jest słownie skrótem lub pełną nazwą miesiąca. Dodatkowo nie rzadko godzina występuje w formacie dwunastogodzinnym z następującą po nim określeniu czy chodzi o rano czy popołudnie; AM, PM. I tak gdybyśmy chcieli odczytać datę "26/Oct/23 05:29 AM" musimy użyć maski "dd/MMM/yy h:mm a".
Uwaga, powyższa maska może nie zadziałać jeśli masz system operacyjny w polskiej wersji. Popularne formaty dat zostały wymienione w tym dokumencie Pentaho: https://help.hitachivantara.com/Documentation/Pentaho/9.3/Products/Common_Formats
Apache Flink - przetwarzanie danych
Domyślnym sposobem tworzenia aplikacji Apache Flink jest użycie Flink SQL. Ułatwia on tworzenie aplikacji przetwarzania strumieniowego przy użyciu standardowego SQL. Łatwo jest nauczyć się Flink, jeśli kiedykolwiek pracowałeś z bazą danych lub systemem podobnym do SQL, zgodnym z ANSI-SQL 2011.
Podobnie jak w przypadku wszystkich silników SQL, zapytania Flink działają na szczycie tabel. Różnią się one jednak od tradycyjnej bazy danych, ponieważ Flink nie zarządza danymi składowanymi w statycznych tabelach; zamiast tego jego zapytania działają w sposób ciągły na danych zewnętrznych (z tabel baz danych lub plików powstają tabele dynamiczne w programie Flink a po przetworzeniu danych mogą być z powrotem zapisane do tradycyjnych tabel baz danych i do plików).
Potoki przetwarzania danych Flink zaczynają się od danych źródłowych. Dane źródłowe tworzą wiersze obsługiwane podczas wykonywania zapytania; są to dynamiczne tabele Flink, do których odwołuje się klauzula FROM zapytania. Mogą to być topiki Kafki, bazy danych, systemy plików lub dowolny inny system z którego Flink wie jak korzystać.
Zanim zaczniesz czytać dalej, upewnij się że przeczytałe(a)ś wcześniejsze artykuły jak zainstalować Apache Flink [uruchomienie-apache-flink-w-windows] i jak utworzyć pierwszą aplikację w tym środowisku [pierwsza-transformacja-w-apache-flink]
Raz jeszcze: tabele dynamiczne Flink nie są tabelami baz danych - powstają one poprzez odczytanie tabel baz danych [np MySQL, Oracle], plików [np. CSV] lub pochodzą z innych źródeł [np. Kafka]. Flink używa swoich własnych tabel - przeczytaj o nich więcej na stronie Apache Flink
Tworzymy pierwszą transformację w Apache Flink
Programy i przepływy danych
Podstawowymi programami w Apache Flink są strumienie i transformacje. Koncepcyjnie strumień jest (potencjalnie niekończącym się) przepływem rekordów danych, a transformacja jest operacją, która pobiera jeden lub więcej strumieni wejściowych (źródło) i w rezultacie generuje jeden lub więcej strumieni wyjściowych. W krokach opisanych poniżej stworzymy transformację - batch który pobierze informacje z jednego źródła i zapisze informacje do innego miejsca (nazywanych we Flink 'sinks').
Język i środowisko
Programy Flink można pisać w trzech językach; Scala, Java, Python. Ponieważ Flink napisany jest w Scala, ten język jest najbardziej naturalny. Kodowanie w Java jest także wygodne. Pisanie programów Flik w Python nie jest zbyt wygodne (wymagany interfejs miedzy programem Python a Flink).
Nasz pierwszy program napiszemy w Java. Środowiskiem w którym go stworzymy będzie Eclipse IDE. Program można pobrać ze strony Eclipse - https://www.eclipse.org/ide/.
Opis instalacji i konfiguracji Flink znajdziesz we artykule "Uruchomienie Apache Flink w Windows"
Uruchomienie Apache Flink w Windows
Jak zainstalować Apache Flink w środowisku Windows.
Czym jest Apache Flink pewnie wiesz skoro to czytasz. Dla tych którzy tego nie wiedzą: Apache Flink to otwarta, ujednolicona platforma przetwarzania strumieniowego i przetwarzania wsadowego opracowana przez Apache Software Foundation. Rdzeniem Apache Flink jest rozproszony silnik przepływu danych strumieniowych napisany w Javie i Scali. Flink wykonuje dowolne programy przepływu danych w sposób równoległy i potokowy.
Flink do wersji 1.7.X zawierał w katalogu 'bin' plik 'start-cluster.bat' który pozwalał na uruchomienie Flink w środowisku. Nowe wersje nie zawierają tego pliku - Flink musi być uruchomiony w inny sposób.
Co jest potrzebne do uruchomienia Flink?
GitHub CLI (command line interface)
Instalacja Java
Zainstaluj JRE lub JDK w wersji 11. Flink powinien działać nadal z wersją 8 ale nie jest już oficjalnie wspierana przez nich. Funkcjonowanie z wersją 17 jest w opracowaniu. Utwórz zmienną JAVA_HOME w systemie.
Pobieranie Flink
Pobierając Apache Flink, wybierz "binaries" ze strony produktu a następnie plik z rozszerzeniem 'tgz' (zwykle piewszy z góry), np: 'flink-1.15.0-bin-scala_2.12.tgz'
Rozpakuj flink do docelowego katalogu np. "C:\dev\flink-1.13.6\"
Pobranie GitHub CLI
Pobierając GitHub CLI możesz poprzestać na wersji portable - nie musisz instalować tego programu na stałe. Rozpakuj program do docelowego katalogu: