Da li volite da ponavljate rutinske operacije iznova i iznova? Tako da ne znam. Ali svaki put u SQL klijentu kada sam radio sa Rostelecom skladištem, morao sam ručno registrovati sve spojeve između tabela. I to uprkos činjenici da su se u 90% slučajeva polja i uslovi za spajanje tabela poklapali od zahteva do zahteva! Čini se da svaki SQL klijent ima funkcije automatskog dovršavanja, ali za skladišta to ne radi uvijek: oni rijetko uključuju jedinstveno ograničenje i strani ključ kako bi poboljšali performanse, a bez toga program neće znati kako su entiteti povezani sa svakim od njih. drugo i šta vam može ponuditi.
Nakon što sam prošao kroz poricanje, ljutnju, cjenkanje, depresiju i približavanje prihvatanju, odlučio sam – zašto ne bih pokušao sam implementirati autofill s blackjackom i to na pravi način? Koristim dbeaver klijent, napisan na java-i, ima open source verziju zajednice. Sazreo je jednostavan plan:
- Pronađite klase u izvornom kodu koje su odgovorne za automatsko dovršavanje
- Preusmjerite ih da rade s vanjskim metapodacima i odatle izvlače informacije o spajanjima
- ??????
- PROFIT
Prilično sam brzo shvatio prvu stvar - pronašao sam zahtjev u alatu za praćenje grešaka za podešavanje automatskog popunjavanja iu povezanom
Za rad sa json-om odlučio sam koristiti biblioteku
Na kraju sam uspeo da ispravim greške u izgradnji: registrovao sam biblioteku ne u pom.xml, već u manifest.mf manifestu, kako zahteva OSGI, navodeći je kao import-package. Nije najljepše rješenje, ali funkcionira. Tada se pojavilo sljedeće iznenađenje. Ako razvijate u Intellij Idea, ne možete jednostavno otići i započeti otklanjanje grešaka u svom projektu zasnovanom na eclipse platformi: neiskusni programer bi trebao patiti ništa manje od analitičara bez dovršavanja upita. U pomoć su priskočili sami programeri dabrova, koji su na wikiju naznačili sve plesove s tamburom koje je potrebno izvesti. Najneugodnije je to što ni nakon svih ovih skvotova, projekat nije želio da se pokrene u debug-u sa json bibliotekom povezanom preko import-paketa (uprkos činjenici da je još uvijek uspješno montiran u gotov proizvod).
Do tada sam već shvatio neugodnost korištenja json-a za svoj zadatak - na kraju krajeva, metapodaci su trebali biti uređivani ručno, a format xml je za to bolje prilagođen. Drugi argument u korist xml-a je prisustvo svih potrebnih klasa u JDK-u, što je omogućilo prestanak borbe sa eksternom bibliotekom. Sa velikim zadovoljstvom sam prebacio sve metapodatke iz json u xml i počeo uređivati logiku autocomplete.
Primjer metapodataka
<?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>
Kao rezultat toga, I
Kada su napravljene promjene u kodu, postavilo se pitanje - ko će ispuniti datoteku metapodacima? Ima puno entiteta u spremištu, skupo je sami registrovati sve veze. Kao rezultat toga, odlučio sam da ovaj zadatak dodijelim svojim kolegama analitičarima. Postavio sam datoteku metapodataka u svn, odakle se vrši preuzimanje u lokalni direktorij sa programom. Princip je sljedeći: da li se novi entitet pojavio u spremištu? Jedan analitičar unosi moguće spojeve u fajl, urezuje izmene, ostali se sami proveravaju i uživaju u radnom automatskom dovršavanju: zajednica, akumulacija znanja i sve to. Proveo radionicu o korištenju programa za kolege, napisao članak u Confluenceu - sada kompanija ima još jedan praktičniji alat.
Rad na ovoj funkciji mi je dao razumijevanje da se ne treba bojati petljati s projektima otvorenog koda - oni po pravilu imaju jasnu arhitekturu, pa će čak i osnovno poznavanje jezika biti dovoljno za eksperimente. A uz određenu dozu upornosti, moći ćete se čak i riješiti omraženih rutinskih operacija, štedeći si vrijeme za nove eksperimente.
izvor: www.habr.com