Radi znova in znova ponavljate rutinske operacije? Torej ne. Toda vsakič, ko sem delal s shrambo Rostelecom v odjemalcu SQL, sem moral ročno registrirati vse spoje med tabelami. In to kljub dejstvu, da so v 90% primerov polja in pogoji za združevanje tabel sovpadali od zahteve do zahteve! Zdi se, da ima vsak odjemalec SQL funkcije samodokončanja, vendar za shrambe to ne deluje vedno: le redko vključujejo edinstveno omejitev in tuji ključ, da bi izboljšali zmogljivost, brez tega pa program ne bo vedel, kako so entitete povezane z vsako drugo in kaj lahko stori za vašo ponudbo.
Potem ko sem šel skozi zanikanje, jezo, pogajanja, depresijo in približevanje sprejetju, sem se odločil - zakaj ne bi sam poskusil implementirati samodejno izpolnjevanje z blackjackom in to na pravi način? Uporabljam odjemalec dbeaver, napisan v Javi, ima odprtokodno različico skupnosti. Dozorel je preprost načrt:
- Poiščite razrede v izvorni kodi, ki so odgovorni za samodejno dokončanje
- Preusmerite jih k delu z zunanjimi metapodatki in od tam črpajte informacije o pridružitvah
- ???
- DOBIČEK
Prvo točko sem ugotovil precej hitro - v sledilniku hroščev sem našel zahtevo za prilagoditev samodejnega izpolnjevanja in v sorodnem
Za delo z json sem se odločil uporabiti knjižnico
Na koncu mi je uspelo popraviti napake pri gradnji: knjižnice nisem registriral v pom.xml, ampak v manifestu manifest.mf, kot zahteva OSGI, medtem ko sem jo določil kot import-package. Ni najlepša rešitev, a deluje. Nato se je pojavilo naslednje presenečenje. Če razvijate v Intellij Idea, ne morete kar tako začeti odpravljati napak v svojem projektu, ki temelji na platformi eclipse: neizkušen razvijalec bi moral trpeti nič manj kot analitik brez dokončanja poizvedbe. Na pomoč so priskočili sami razvijalci bobra, ki so v wikiju navedli vse plese s tamburinom, ki jih je treba izvesti. Najbolj moteče je to, da se projekt tudi po vseh teh počepih ni hotel zagnati v debug z json knjižnico, povezano preko import-paketa (kljub temu, da je bil še vedno uspešno sestavljen v končni izdelek).
Do takrat sem že spoznal neprijetnost uporabe jsona za svojo nalogo - navsezadnje naj bi se metapodatki urejali ročno, format xml pa je za to bolj primeren. Drugi argument v prid xml je bila prisotnost vseh potrebnih razredov v JDK, kar je omogočilo prenehanje boja z zunanjo knjižnico. Z velikim veseljem sem prenesla vse metapodatke iz json v xml in se lotila urejanja autocomplete logike.
Primer metapodatkov
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tableRelations>
<tableRelation>
<leftTable>dim_account</leftTable>
<rightTable>dim_partner</rightTable>
<joinColumnPair leftColumn="partner_key" rightColumn="partner_key"/>
<joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
</tableRelation>
<tableRelation>
<leftTable>dim_account</leftTable>
<rightTable>dim_branch</rightTable>
<joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
<joinColumnPair leftColumn="branch_key" rightColumn="branch_key"/>
</tableRelation>
</tableRelations>
Posledično sem
Ob spremembah kode se je pojavilo vprašanje - kdo bo datoteko zapolnil z metapodatki? V repozitoriju je veliko entitet, drago je, da sami registrirate vse povezave. Zato sem se odločil, da to nalogo zaupam kolegom analitikom. Datoteko z metapodatki sem objavil v svn, od koder se opravi prevzem v lokalni imenik s programom. Načelo je naslednje: ali se je v repozitoriju pojavila nova entiteta? En analitik vnese morebitne pridružitve v datoteko, potrdi spremembe, ostali preverijo sami in uživajo v delujočem samodokončanju: skupnost, kopičenje znanja in vse to. Izvedel delavnico o uporabi programa za sodelavce, napisal članek v Confluence - zdaj ima podjetje eno bolj priročno orodje.
Delo na tej funkciji mi je dalo razumevanje, da se ni treba bati poigravanja z odprtokodnimi projekti - praviloma imajo jasno arhitekturo in celo osnovno znanje jezika bo dovolj za poskuse. In z določeno mero vztrajnosti se boste lahko celo znebili osovraženih rutinskih operacij in si prihranili čas za nove poskuse.
Vir: www.habr.com