FME nabízí mnoho funkcí a umožňuje se připojit k libovolné databázi a provádět nad ní různé operace. Nechte se provést tím, jak provádět hromadné aktualizace databáze!
Nastavení FME databázového připojení
Pokud chcete číst nebo zapisovat data z/do databáze – včetně aktualizací databáze – potřebujete autorizaci. FME definuje autorizační parametry pomocí nástroje pro připojení. Ten je přístupný v FME Workbench přes Tools > FME Options. Takže spusťte Workbench, vyberte Tools > FME Options a zobrazí se toto dialogové okno:
Po kliknutí na položku Database Connections (databázové připojení), dostanete seznam dostupných připojení. Chcete-li vytvořit nové, stiskněte tlačítko plus a zobrazí se toto dialogové okno:
Zadejte údaje o databázi, otestujte je a uložte. Nyní máte definované spojení, které můžete použít kdekoliv v FME. Nejprve ho pojďme využít pro vložení některých dat do databáze.
Vkládání dat do databáze s FME
Dosud nemáte v databázi žádné záznamy, takže začneme s načítáním některých dat. Možnost generovat najdete na úvodní stránce FME Workbench nebo můžete použít zkratku Ctrl + G. Otevře se základní dialog pro definování převodu: Generate Workspace (vytvořit pracovní prostor).
Vyplnili jsme pole pro definici převodu dat o parcelách v Krakově. Převod je ze SHP souboru do PostGIS (standardní PostgreSQL databáze s prostorovým rozšířením). Prostorová složka není nutná – stejné nastavení funguje i pro data bez prostorové informace. Vybrané databázové připojení je definováno výše. Klepněte na tlačítko OK a vytvoří se pracovní prostor, který vypadá takto:
Každý objekt nalevo je tabulka, vrstva nebo třída ve zdrojových datech. Každý objekt napravo je tabulka v databázi.
Nastavení parametrů databáze
Při používání databází je klíčové nastavení pro každou tabulku přístupné kliknutím na ikonu ozubeného kola, jako například:
První parametr je název tabulky, který můžete měnit a tabulku přejmenovat. Můžete si zvolit, které schéma (Table Qualifier) také zapsat.
Nejdůležitější parametr (Feature Operation) říká, že vkládáte data (Insert) a můžete zvolit, jakým způsobem je tabulka vytvořena:
Můžete si vybrat tvorbu tabulky bez ohledu na to, zda již existuje (Drop and Create), vytvořit ji, pokud ještě neexistuje (Create if Needed), pouze přidat do stávající tabulky (Use Existing) nebo ji vyprázdnit, pokud již existuje (Truncate Existing).
To, které nastavení použijete, závisí na scénáři, ve kterém pracujete, ale v tomto případě – k vytvoření a vyplnění tabulky – použijte Create if Needed. Výhoda oproti Drop and Create je ta, že pokud už jiný uživatel tabulku s tímto jménem má (a vy jste to nezkontrolovali), tak aspoň nesmažete její obsah.
Spusťte Workspace a FME načte data:
Samozřejmě, v určitém okamžiku se může stát, že se zdroj dat změní a je třeba podle této změny data aktualizovat.
Aktualizace záznamů v databázi s FME
Řekněme, že obdržíte dataset s názvem Dzialki_update. Nejjednodušší způsob, jak databázi aktualizovat, je znovu udělat proces zmíněný výše, ale k vytvoření tabulky použít funkci Drop and Create. Tímto způsobem nahradíte všechno:
Ale v tu chvíli spoléháte na to, že Dzialki_update je úplnou náhradou původního datasetu. Co když ale obsahuje pouze záznamy, které potřebují aktualizaci? V tom případě můžete jednoduše změnit operaci na UPDATE (místo INSERT) a použít existující tabulku (Use Existing):
Všimněte si, že když vyberete aktualizaci, bude k dispozici další parametr: Match Columns (propojovací sloupce). Ten potřebujete abyste definovali, které záznamy aktualizují které. V tomto případě máte ve zdrojových datech atribut s názvem ID_DZIALKI a sloupec nazvaný ID_DZIALKI v databázové tabulce, takže vyberete tento atribut:
Pokud má příchozí prvek hodnotu atributu ID_DZIALKI = 12, jeho obsah se použije k aktualizaci záznamu databáze, kde ID_DZIALKY = 12.
To je jednoduché, abychom přidali trochu složitosti (ne mnoho), je zde také klauzule WHERE, kterou můžete použít. Umožňuje definovat přiřazení v případě, že atributy a názvy polí nejsou shodné a také umožňuje přidat další podmínky s využitím názvů polí.
Zde například aktualizujete záznamy, kde ParkNumber = parkid, ale pouze tam, kde neighborhoodname je “14“. Takže záznamy mimo tuto oblast nejsou aktualizovány, a to ani v případě, že se ID parku shoduje.
Zde provádíme aktualizace, to je jednoduché – ale co když chceme záznamy odstranit?
Mazání záznamů z databáze s FME
Předpokládejme, že datová sada Dzialki_deletions je seznam záznamů, které chcete z tabulky v databázi odstranit, ne přidat. Jednoduše změníte operaci z UPDATE na DELETE:
Dostanete opět parametr Match Column (nebo klauzuli WHERE) a nastavíte, které vstupující prvky mají odstranit které existující záznamy, což je opět snadné definovat. Takže odstranění není o nic složitější než aktualizace. Zásadní otázkou je, co se stane, když chcete současně odstranit a aktualizovat záznamy?
Aktualizace a odstranění záznamů z databáze s FME
Řekněme, že některé z nových záznamů jsou aktualizace, zatímco jiné mají být odstraněny:
Je zřejmé, že nelze nastavit parametr operace DELETE nebo UPDATE pro celou tabulku. Místo toho každý nový prvek označte funkcí, která se nad ním provede. To se provede pomocí atributu nazvaného fme_db_operation:
Můžete přidat atribut ke každému datovému toku, použitím transformátoru AttributeCreator. Název atributu je fme_db_operation. U jedné dávky nastavte hodnotu na UPDATE. U druhého seskupení dat nastavte hodnotu na DELETE. Tímto způsobem označujete každou funkci vlastním způsobem.
I tak musíte pro tabulku nastavit typ prováděné operace. Tentokrát ale místo Insert, Update nebo Delete, vyberte možnost označenou fme_db_operation:
Když nyní spustíte, prvky označené UPDATE se aktualizují, zatímco prvky označené DELETE se odstraní. Propojovací sloupec (nebo klauzule WHERE) zajistí propojení mezi funkcemi a záznamy.
Jedním z předpokladů je, že již předem víme, které prvky máme odstranit a které aktualizovat. Ve výše uvedeném příkladu jsou zdrojová data rozdělena. Pokud si ale nejste jisti, pak byste měli provést detekci změn (Change Detection).
Zjišťování změn a aktualizace databáze s FME
Při detekci změn máte nový dataset a chcete ho porovnat se stávajícími záznamy, abyste zjistili, co se změnilo. Zde je ukázka:
Vypadá to jednoduše a je to jednoduché. Přidejte čtečku (Readed > Add Reader) ke čtení stávajícího obsahu tabulky databáze a UpdateDetector pro porovnání těchto záznamů s datasetem public.dzialki, abyste zjistili, kde došlo ke změnám. Můžete zjišťovat změny v buď v hodnotách atributů, nebo v prostorovém obsahu, nebo obojí.
Jde pouze o zapsaní výsledků zpět do tabulky databáze. Nemusíte ani vytvářet atribut fme_db_operation; UpdateDetector to udělal za Vás. Musíte pouze zkontrolovat, zda je nastavena správná operace (fme_db_operation) a že je nastaven odpovídající sloupec k propojení.
Co když má každý prvek jiný propojovací sloupec? V takovém případě můžete napsat propojení pomocí klauzule WHERE a uložit jej jako atribut. Poté použijte tento atribut k nastavení propojení.
Shrnutí
V tomto případě jsme použili databázi Postgre SQL, ale většina databází má v programu FME rozhraní totožné – práce s jiným typem souboru by tak neměla být problém. Doufáme, že pro Vás bude článek užitečný a instrukce Vám pomohou s aktualizacemi databází. Hodně štěstí!
Zdroj: https://blog.safe.com/2018/10/beginners-database-updates-evangelist180/
Potřebujete nějakou pomoc s FME?
Mohlo by Vás také zajímat…
FME SERVER JAKO PLATFORMA PRO INTEGRACI PODNIKOVÝCH SYSTÉMŮ? ROZHODNĚ!
EFEKTIVNÍ KONVERZE PROSTOROVÝCH DAT