Kuinka lopettaa saman tekeminen

Haluatko toistaa rutiinitoiminnot yhä uudelleen ja uudelleen? Joten en. Mutta joka kerta SQL-asiakkaassa työskennellessäni Rostelecom-tallennustilan kanssa, minun piti rekisteröidä kaikki taulukoiden väliset liitokset manuaalisesti. Ja tämä siitä huolimatta, että 90 %:ssa tapauksista taulukoiden liittämisen kentät ja ehdot olivat samat kyselystä toiseen! Vaikuttaa siltä, ​​​​että missä tahansa SQL-asiakkaassa on automaattisen täydennystoiminnot, mutta varastoissa se ei aina toimi: ne sisältävät harvoin ainutlaatuisen rajoitteen ja vierasavaimen suorituskyvyn parantamiseksi, ja ilman tätä ohjelma ei tiedä kuinka entiteetit liittyvät kuhunkin. muuta ja mitä se voi tarjota sinulle.

Kuinka lopettaa saman tekeminen

Käytyäni läpi kieltämisen, vihan, neuvottelut, masennuksen ja lähestyvän hyväksyntää päätin - miksi en itse yrittäisi toteuttaa automaattista täyttöä blackjackilla ja tehdä sitä oikein? Käytän Java-kielellä kirjoitettua dbeaver-asiakasta, sillä on avoimen lähdekoodin yhteisöversio. Yksinkertainen suunnitelma on kypsynyt:

  1. Etsi lähdekoodista luokat, jotka vastaavat automaattisesta täydennyksestä
  2. Ohjaa heidät työskentelemään ulkoisten metatietojen kanssa ja hakemaan tietoja liitoksista
  3. ???
  4. VOITTO

Tajusin ensimmäisen kohdan melko nopeasti - vianseurantaohjelmasta löysin pyynnön säätää automaattista täyttöä ja siihen liittyvää tehdä löysi SQLCompletionAnalyzer-luokan. Katsoin koodia ja sitä tarvitsen. Jäljelle jää vain kirjoittaa se uudelleen niin, että kaikki toimii. Odotin vapaata iltaa ja aloin miettimään toteutusta. Päätin kirjoittaa taulukkolinkkisäännöt (metadata) json-kielellä. Minulla ei ollut käytännön kokemusta tämän muodon kanssa työskentelystä ja nykyinen tehtävä nähtiin mahdollisuutena korjata tämä puute.

Päätin käyttää kirjastoa työskennelläkseni jsonin kanssa json-yksinkertaista Googlelta. Tästä alkoi yllätykset. Kuten kävi ilmi, dbeaver todellisena sovelluksena kirjoitettiin Eclipse-alustalle OSGi-kehyksen avulla. Kokeneille kehittäjille tämä asia helpottaa riippuvuuksien hallintaa, mutta minulle se oli enemmän kuin pimeää magiaa, johon en selvästikään ollut valmis: tuon tarvitsemani luokat tavalliseen tapaan otsikon json-simple-kirjastosta. muokattu luokka, määritä se pom.xml:ssä, jonka jälkeen projekti kieltäytyy kategorisesti kokoamasta normaalisti ja kaatuu virheiden kanssa.

Lopulta onnistuin korjaamaan rakennusvirheet: en rekisteröi kirjastoa pom.xml-tiedostoon, vaan manifest.mf-luetteloon OSGI:n edellyttämällä tavalla ja määritin sen tuontipaketiksi. Ei kaunein ratkaisu, mutta toimii. Sitten ilmestyi seuraava yllätys. Jos kehität Intellij Ideassa, et voi vain mennä ja aloittaa projektisi virheenkorjausta Eclipse-alustan perusteella: kokemattoman kehittäjän pitäisi kärsiä vähintään analyytikon kanssa ilman kyselyn loppuun saattamista. Majavan kehittäjät itse tulivat apuun ja ilmoittivat wikissä kaikki tanssit tamburiinilla, jotka on tehtävä. Ärsyttävintä on, että edes kaikkien näiden kyykkyjen jälkeen projekti ei halunnut käynnistyä debugissa json-kirjaston ollessa kytkettynä tuontipaketin kautta (huolimatta siitä, että se koottiin silti onnistuneesti valmiiksi tuotteeksi).

Tuolloin olin jo ymmärtänyt jsonin käytön haitan tehtävässäni - metatiedot piti kuitenkin muokata manuaalisesti ja xml-muoto sopii tähän paremmin. Toinen argumentti xml:n puolesta oli kaikkien tarvittavien luokkien läsnäolo JDK:ssa, mikä mahdollisti taistelun ulkoisen kirjaston kanssa. Suurella ilolla siirsin kaikki metatiedot jsonista xml:ään ja aloin muokata automaattisen täydennyksen logiikkaa.

Esimerkki metatiedoista

<?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>

Tämän seurauksena I tehnyt muutoksia SQLUtils- ja SQLCompletionAnalyzer-luokkiin. Ideana on tämä: jos ohjelma ei löytänyt sopivia automaattisen täydennyksen ehdotuksia peruslogiikalla, se tarkistaa mahdollisten liitosten olemassaolon ulkoisen xml-tiedoston avulla. Tiedosto itsessään tallentaa taulukkopareja, jotka osoittavat kentät, joihin nämä taulukot on linkitettävä. Tietueiden eff_dttm ja exp_dttm sekä loogisen poiston lipun deleted_ind teknisiä voimassaolopäiviä koskevat rajoitukset on asetettu oletusarvoisesti.

Kun koodiin tehtiin muutoksia, heräsi kysymys - kuka täyttää tiedoston metatiedoilla? Arkistossa on paljon entiteettejä, on kallista rekisteröidä kaikki yhteydet itse. Tämän seurauksena päätin antaa tämän tehtävän analyytikotovereilleni. Lähetin metatietotiedoston svn:llä, josta kassalla tehdään ohjelma paikalliseen hakemistoon. Periaate on tämä: onko arkistoon ilmestynyt uusi kokonaisuus? Yksi analyytikko syöttää mahdolliset liitokset tiedostoon, tekee muutokset, loput tarkistavat itsensä ja nauttivat toimivasta automaattisesta täydennyksestä: yhteisöstä, tiedon keräämisestä ja kaikesta muusta. Johti työpajan ohjelman käytöstä kollegoille, kirjoitti artikkelin Confluencessa - nyt yrityksellä on yksi kätevämpi työkalu.

Tämän ominaisuuden parissa työskenteleminen antoi minulle ymmärryksen, että avoimen lähdekoodin projekteja ei tarvitse pelätä - niillä on pääsääntöisesti selkeä arkkitehtuuri ja jopa peruskielen tuntemus riittää kokeiluihin. Ja tietyllä määrällä sinnikkyyttä voit jopa päästä eroon vihatuista rutiinitoiminnoista, mikä säästää aikaasi uusiin kokeiluihin.

Lähde: will.com

Lisää kommentti