Cum se face o actualizare bulk a bazei de date cu FME?

By November 28, 2018 FME

FME oferă multiple funcționalități și vă permite să vă conectați la o bază de date pentru a executa diverse operațiuni pe aceasta. Permiteți-ne să vă arătăm modul în care se poate face o actualizare bulk a unei baze de date!

Configurarea Conexiunii FME la Baza de Date

Când doriți să citiți sau să scrieți dintr-o bază de date – inclusiv actualizările bazei de date – aveți nevoie de autorizare. FME definește parametrii de autorizare utilizând un instrument de conectare. Este accesată prin meniul Tools> FME Options din FME Workbench. Deci, deschideți Workbench, selectați Tools> FME Options și veți obține acest dialog:

FME_aktualizacja1

După ce faceți click pe database Connections veți obține o listă cu conexiunile disponibile. Dacă doriți să creați una nouă, apăsați butonul plus și se va deschide fereastra de dialog:

FME_aktualizacja2

Introduceți detaliile bazei de date, testați și apoi salvați. Acum aveți o conexiune definită, o puteți folosi oriunde doriți în FME. Deci, să o folosim mai întâi pentru a insera unele date într-o bază de date.

Inserarea de Date într-o Bază de Date cu FME

Încă nu aveți înregistrări în baza dvs. de date, deci începeți să încărcați unele date în ea. Opțiunea de generare este disponibilă în pagina de start a FME Workbench sau puteți utiliza comanda rapidă Ctrl + G. Aceasta deschide fereastra de dialog principală pentru definirea unei translații:

FME_aktualizacja3

Am completat câmpurile pentru a defini o translație a datelor despre parcele din Cracovia. Translația se face din formatul SHP în PostGIS (o bază de date standard PostgreSQL cu o extensie spațială). Partea spațială nu este necesară – aceeași configurație funcționează pentru date fără o componentă spațială. Conexiunea la baza de date pe care ați selectat-o este cea definită mai devreme. Faceți click pe OK și dialogul respectiv creează un spațiu de lucru (workspace) care arată astfel:

FME_aktualizacja4

Fiecare obiect din stânga este o tabelă, un layer sau o clasă în datele sursă. Fiecare obiect din partea dreaptă este o tabelă din baza dvs. de date.

Setarea Parametrilor Bazei de Date

Când se utilizează bazele de date, setările principale pentru fiecare tabelă sunt accesate făcând click pe pictograma conectorului pe acele obiecte, cum ar fi:

FME_aktualizacja5

Numele tabelei este primul parametru, astfel încât să o puteți redenumi pentru a avea nume diferit; și puteți alege, deasemenea, ce schemă (Table Qualifier) să scrieți.

Dar cel mai important parametru (Feature Operation) indică faptul că introduceți date și puteți alege și modul în care este creată tabela:

 

FME_aktualizacja6

Puteți alege să creați tabela, indiferent dacă există (Drop and Create), creați-o dacă nu există deja (Create if Needed), doar adăugați  la cea existentă  (Use Existing) sau goliți-o dacă deja există (Truncate Existing).

Opțiunea utilizată depinde de scenariul în care lucrați, dar în acest caz – pentru a crea și completa o tabelă – utilizați Create if Needed. Avantajul Drop and Create este că dacă un alt utilizator are deja o tabelă cu acel nume (și nu ați verificat), vă asigurați mai întâi că nu îi veți șterge  conținutul.

Executați scriptul și FME va încărca datele:

fme_aktualizacja7Desigur, într-un anumit moment, în viitor, s-ar putea să găsiți sursa datelor modificată și trebuie să actualizați datele pe baza setului de date ce a fost modificat.

Actualizarea Înregistrărilor într-o Bază de Date, cu FME

Să presupunem că primiți un set de date numit Dzialki_update. Cea mai simplă modalitate de a vă actualiza baza de date este să rulați același proces ca mai sus, dar să utilizați funcția Drop and Create ca operațiune în tabelă. În acest fel, înlocuiți totul:

FME_aktualizacja8

Dar aceasta se bazează pe Dzialki_update fiind setul complet de date de înlocuire. Ce se întâmplă dacă aceasta conține numai înregistrările care necesită o actualizare? În acest scenariu puteți alege pur și simplu operațiunea UPDATE (în loc de INSERT) și alegeți să folosiți Use Existing table:

FME_aktualizacja9

Rețineți că atunci când alegeți actualizarea, devine disponibil un alt parametru: Match Columns. Aveți nevoie de aceasta pentru a defini ce caracteristică actualizează fiecare înregistrare. În acest caz, aveți un atribut numit ID_DZIALKI în datele sursă și un câmp (coloană) numit ID_DZIALKI în tabela din baza de date; acesta este atributul pe care îl selectați:

FME_aktualizacja10

Deci, dacă o caracteristică de intrare are atributul ID_DZIALKI = 12, atunci conținutul său este utilizat pentru a actualiza înregistrarea bazei de date unde ID_DZIALKI = 12.

Este destul de simplu, dar pentru a adăuga o mică complexitate (nu prea mult) există și o condiție WHERE pe care o puteți utiliza. Aceasta vă permite să definiți potrivirile în care atributul și numele câmpurilor nu sunt aceleași, dar permite, de asemenea, adăugarea de condiții suplimentare utilizând numele câmpului:

FME_aktualizacja11

Aici, de exemplu, actualizați înregistrările în care ParcellNumber = parcellID, dar numai în cazul în care câmpul cu numărul casei este “14”. Astfel, înregistrările din afara acestei zone nu sunt actualizate, chiar dacă ID-ul parcelei se potrivește.

Deci, faceți actualizări în acest fel și este destul de simplu – dar dacă doriți să ștergeți înregistrări?

Ștergerea de Date dintr-o Bază de Date, cu FME

Să presupunem că setul de date Dzialki_deletions este o listă de înregistrări pe care trebuie să le ștergeți din tabela din baze de date, în loc să le adăugați. Pentru aceasta, pur și simplu schimbați operațiunea de la UPDATE la DELETE:

FME_aktualizacja12

Obțineți același parametru Match Column (sau condiția WHERE) pentru a defini ce caracteristici de intrare ar trebui să ștergă înregistrările existente, iar acest lucru este din nou ușor de definit. Deci, ștergerile nu sunt mai complexe decât actualizările; principala întrebarea este ce se întâmplă când doriți să ștergeți simultan și să actualizați simultan înregistrările?

Actualizarea ȘI Ștergerea Înregistrărilor Bazei de Date cu FME

Să presupunem că unele dintre caracteristicile de intrare sunt actualizări, în timp ce altele sunt ștergeri:

FME_aktualizacja13

Evident, nu puteți seta parametrul de operare atât pentru DELETE cât și pentru UPDATE pentru întreaga tabelă. Ceea ce puteți face în schimb este să etichetați fiecare caracteristică cu operația pe care o va efectua. Faceți acest lucru folosind un atribut numit fme_db_operation:

FME_aktualizacja14

Puteți adăuga un atribut fiecărui stream de date utilizând un transformer AttributeCreator. Numele atributului este fme_db_operation. Pentru un lot de date setați valoarea la UPDATE. Celălalt set de date va avea valoarea DELETE. Acesta este modul în care etichetați fiecare caracteristică cu propria sa operațiune.

Mai trebuie să setați tipul de operațiune pe tabelă. Dar de data aceasta, în loc să alegeți Insert, Update sau Delete, alegeți opțiunea etichetată fme_db_operation:

FME_aktualizacja15

Acum, când rulați scriptul, caracteristicile etichetate UPDATE actualizează înregistrări din baza de date, în timp ce caracteristicile etichetate DELETE șterg înregistrările bazei de date. Match Column (sau condiția WHERE) oferă o potrivire între caracteristici și înregistrări.

Una dintre ipoteze este că știți deja ce caracteristici sunt șterse și care sunt actualizări. În exemplul de mai sus, datele sursă sunt deja împărțite în două. Dacă nu sunteți sigur de asta, atunci este posibil să aveți nevoie să faceți ceea ce se numește Change Detection

Change Detection și Database Updates cu FME

În Change Detection aveți un nou set de date și doriți să îl comparați cu înregistrările existente pentru a găsi ce s-a modificat. Iată un astfel de scenariu:

FME_aktualizacja16

Arată destul de simplu, și de fapt este. Ați adăugat un cititor (Readers> Add Reader) pentru a citi conținutul existent al tabelei din baza de date și un transformer UpdateDetector pentru a compara aceste înregistrări cu setul de date public.dzialki, pentru a identifica unde au avut loc schimbările. Puteți detecta modificări fie asupra valorii câmpului, fie asupra conținutului spațial sau asupra ambelor.

Apoi rămâne de făcut doar scrierea rezultatelor înapoi în tabela din baze de date. Nu trebuie nici măcar să creați atributul fme_db_operation; UpdateDetector a făcut asta pentru dvs. Trebuie doar să verificați dacă tabela este setată cu operațiunea corectă (fme_db_operation) și că este setat Match Column.

FME_aktualizacja17

Ce se întâmplă dacă fiecare caracteristică are o coloană de potrivire diferită? În acest caz, puteți să vă scrieți potrivirea sub forma unei condiții WHERE și să o salvați ca atribut. Apoi utilizați acel atribut pentru potrivire în parametrii din tabelă:

FME_aktualizacja18

Rezumat

În acest scenariu am folosit baza de date PostgreSQL, dar majoritatea bazelor de date au o interfață identică în FME – lucrul cu un alt tip de fișier nu ar trebui să fie o problemă. Sperăm că ghidul pe care l-am pregătit va fi util pentru dvs. iar instrucțiunile noastre vă vor ajuta să actualizați bazele de date. Mult succes!

Sursa: https://blog.safe.com/2018/10/beginners-database-updates-evangelist180/

 

Aveți nevoie de ajutor în utilizarea FME?

Contactați-ne!