JAK UDĚLAT HROMADNOU AKTUALIZACI DATABÁZE S FME?

By 28 listopadu, 201811 března, 2019FME
22-2018-11-28-Grafika_newsy

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:

FME_aktualizacja1

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:

FME_aktualizacja2

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

FME_aktualizacja3

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:

FME_aktualizacja4

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:

FME_aktualizacja5

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:

 

FME_aktualizacja6

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:

fme_aktualizacja7

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:

FME_aktualizacja8

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

FME_aktualizacja9

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:

FME_aktualizacja10

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

FME_aktualizacja11

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:

FME_aktualizacja12

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:

FME_aktualizacja13

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:

FME_aktualizacja14

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:

FME_aktualizacja15

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:

FME_aktualizacja16

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

FME_aktualizacja17

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

FME_aktualizacja18

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?

Kontaktujte nás!