Dodawanie kolumny do tabeli

By 17 stycznia, 201920 maja, 2020Zrób to sam

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.

fme_dodawanie_kolumn

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.

fme_dodawanie_kolumn2

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).

fme_dodawanie_kolumn3

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.

fme_dodawanie_kolumn4

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.

fme_dodawanie_kolumn5

10. Uruchomienie skryptu

Uruchamiamy skrypt.

fme_dodawanie_kolumn6

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

fme_dodawanie_kolumn7

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.