Tym wpisem rozpoczynamy serię artykułów, które będą proponować rozwiązania najczęstszych problemów, do rozwiązania których używacie FME. Mamy nadzieję, że ułatwi Wam to pracę.
Do istniejącej już tabeli w bazie nową kolumnę można dodać używając funkcji AttributeCreator lub AttributeManager z FeatureHolder, który dopilnuje aby operacja została przeprowadzona poprawnie. Z tego artykułu dowiesz się jak używając AttributeManager i FeatureHolder dodać nową kolumnę do istniejącej tabeli w bazie.
Cel
Celem przedstawionego przez nas zadania będzie dodanie nowej kolumny przy użyciu funkcji AttributeManager. Użyjemy jej do trzymania informacji kiedy ostatnio wykonywana była aktualizacja zbioru danych. Za pomocą funkcji DateTimeStamper wypełnimy nowy atrybut dzisiejszą datą. Ewentualnie możesz też policzyć dla niego wartość na podstawie innych atrybutów, lub zostawić pusty.
Dane
Będziemy pracować na plikowej geobazie, w której znajdują się punkty adresowe z Warszawy. Plik SHAPE z punktami adresowymi można pobrać ze strony https://data.gov.pl/.
Wykonanie
1. Uruchomienie FME Workbench
Włączmy FME Workbench.
2. Generowanie skryptu
Wybierzmy opcję Generate Workspace.
3. Ustawienie parametrów danych wejściowych
W generatorze skryptów wybierzmy Esri Geodatabase (File Geodb Open API) jako format i wskażmy jej położenie na dysku.
4. Ustawienie parametrów danych wyjściowych
Format danych wyjściowych również ustawimy na geobazę plikową, użyjemy tej samej bazy, ponieważ będziemy ją aktualizować.
5. Określenie wykonywanej operacji (Feature Operation) i obsługi tabel (Table Handling)
Mamy już wygenerowany skrypt, więc teraz klikając w ikonkę koła zębatego wejdźmy w ustawienia adaptera zapisującego.
W sekcji ogólnej zmieńmy nazwę tabeli na adresy_m_st__Warszawa_DATA.
W sekcji dotyczącej tabeli ustawmy operację (Feature Operation) na wstaw (Insert), oraz w sekcji dotyczącej tabel upewnijmy się, że jeśli taka tabela już istnieje to zostanie ona usunięta i powstanie nowa tabela (Table Handling -> Drop and Create).
Jeśli chcesz dowiedzieć się więcej o opcjach obchodzenia się z tabelami (Table Handling) to zapraszamy do przeczytania naszego innego artykułu o bazach danych.
6. Aktualizacja atrybutów
Przejdź do sekcji atrybuty użytkownika (User Attributes) i ustaw definicję atrybutów (Attribute Definition) na automatyczną. Dzięki temu program automatycznie definiuje listę atrybutów na podstawie danych wejściowych i zmian, które wprowadzamy w skrypcie (na przykład zmiana nazwy, usunięcie).
7. Zamknięcie tabeli źródłowej za pomocą FeatureHolder
Aby uniknąć błędów istniejąca tabela musi zostać zamknięta zanim zostanie usunięta. Rozwiążemy ten problem używając FeatureHolder, który przechowuje wszystkie przetwarzane obiekty, aż do momentu dopóki wszystkie nie zostaną przekształcone, by następnie udostępnić je w ich oryginalnej kolejności.
Dodajmy FeatureHolder i podłączmy go do adaptera czytającego.
8. Tworzenie kolumny z użyciem AttributeManager
Po FeatureHolder dodajmy AttributeManager, którego użyjemy do stworzenia nowej kolumny.
Wejdźmy w ustawienia AttributeManager i kliknijmy w ostatni wiesz, aby dodać nowy atrybut. Nazwijmy go DATA.
9. Dodanie dzisiejszej daty
Dodajmy funkcję DateTimeStamper po AttributeManager, a wyjście z DateTimeStamper podłączmy już do adaptera zapisującego.
Otwórzmy ustawienia funkcji, typ parametru ustawmy na date, oraz wskażmy, że „DATA” ma być atrybutem wynikowym (ResultAttribute). To spowoduje, że do tego atrybutu funkcja zapisze dzisiejszą datę. Zaakceptujmy.
10. Uruchomienie skryptu
Uruchamiamy skrypt.
Po uruchomieniu skryptu tabela będzie miała dodatkową kolumnę z dzisiejszą datą. Możemy to obejrzeć klikając w adapter zapisujący i w lupkę, co otworzy Przeglądarkę.
Wynik
Użyte Transformery:
- FeatureHolder – przechowuje wszystkie przetwarzane obiekty, aż do momentu dopóki wszystkie nie zostaną przekształcone, by następnie udostępnić je w ich oryginalnej kolejności.
- AttributeManager – Umożliwia tworzenie, zmianę nazwy, kopiowanie i usuwanie atrybutów. Możliwe jest ustawianie wartości dla nowych i istniejących atrybutów z wykorzystaniem wszelkiej kombinacji wartości stałych pobieranych z atrybutów, wyrażeń warunkowych i formuł.
- DateTimeStamper – Dodaje informację o dacie i czasie do każdego obiektu w formie nowego atrybutu.