Kumaha eureun ngalakonan hal anu sarua

Naha anjeun resep ngulang operasi rutin deui sareng deui? Janten kuring henteu. Tapi unggal waktos di klien SQL nalika gawé bareng gudang Rostelecom, kuring kungsi ngadaptarkeun sakabéh ngagabung antara tabel sacara manual. Sareng ieu sanaos kanyataan yén dina 90% kasus widang sareng kaayaan pikeun ngahijikeun tabel coincided ti pamundut ka pamundut! Ieu bakal sigana nu mana wae klien SQL boga fungsi auto-parantosan, tapi pikeun storages teu salawasna jalan: aranjeunna jarang kaasup konstrain unik tur konci asing pikeun ngaronjatkeun kinerja, sarta tanpa ieu program moal nyaho kumaha entitas nu patali jeung unggal. sejen tur naon eta tiasa ngalakukeun pikeun anjeun nawiskeun.

Kumaha eureun ngalakonan hal anu sarua

Ngaliwatan panolakan, ambek-ambekan, tawar menawar, depresi sarta ngadeukeutan ditampa, Kuring mutuskeun - naha henteu coba pikeun nerapkeun autofill kalawan blackjack sorangan sarta ngalakukeun eta jalan katuhu? Kuring nganggo klien dbeaver, ditulis dina java, éta ngagaduhan versi komunitas open source. Hiji rencana basajan geus matured:

  1. Manggihan kelas dina kode sumber nu jawab autocompletion
  2. Alihan aranjeunna pikeun dianggo sareng metadata éksternal sareng narik inpormasi ngeunaan gabung ti dinya
  3. ??????
  4. kauntungan

Kuring terang titik anu mimiti gancang - kuring mendakan pamundut dina tracker bug pikeun nyaluyukeun autofill sareng anu aya hubunganana. komitmen mendakan kelas SQLCompletionAnalyzer. Kuring nempo kode jeung éta naon Abdi peryogi. Sadaya anu tetep nyaéta nyerat deui supados sadayana tiasa dianggo. Kuring waited pikeun malem bébas sarta mimiti mikir ngaliwatan palaksanaan. Kuring mutuskeun nulis aturan link tabel (metadata) dina json. Kuring teu boga pangalaman praktis gawé bareng format ieu jeung tugas ayeuna katempona kasempetan pikeun ngabenerkeun omission ieu.

Pikeun damel sareng json kuring mutuskeun pikeun ngagunakeun perpustakaan json-basajan ti Google. Ieu dimana kejutan dimimitian. Tétéla, dbeaver, salaku aplikasi anu leres, ditulis dina platform Eclipse nganggo kerangka OSGi. Pikeun pamekar anu berpengalaman, hal ieu ngagampangkeun pikeun ngatur katergantungan, tapi pikeun kuring éta sapertos sihir poék, anu kuring jelas henteu siap: sapertos biasa, kuring ngimpor kelas anu kuring peryogikeun tina perpustakaan json-simple dina header of kelas diédit, tangtukeun eta dina pom xml, nu satutasna proyék categorically nampik ngumpul normal sarta ngadat jeung kasalahan.

Tungtungna, kuring junun ngalereskeun kasalahan ngawangun: Kuring didaptarkeun perpustakaan teu di pom.xml, tapi dina manifest.mf manifest, sakumaha diperlukeun ku OSGI, bari nangtukeun salaku impor-pakét. Teu solusi paling geulis, tapi jalan. Lajeng kejutan salajengna mucunghul. Upami anjeun nuju ngembangkeun Intellij Idea, anjeun moal tiasa ngan ukur ngamimitian nga-debug proyek anjeun dumasar kana platform samagaha: pamekar anu teu berpengalaman kedah sangsara teu langkung ti hiji analis tanpa parantosan query. Pamekar berang-berang sorangan sumping ka nyalametkeun, nunjukkeun dina wiki sagala tarian jeung rebana anu kudu dipigawé. Hal anu paling ngaganggu nyaéta yén sanajan saatos sadayana squats ieu, proyék éta henteu hoyong diluncurkeun dina debug sareng perpustakaan json dihubungkeun liwat pakét-impor (sanaos kanyataan yén éta masih suksés dirakit kana produk réngsé).

Dina waktos éta, kuring parantos sadar kana kasulitan ngagunakeun json pikeun tugas kuring - saatosna, metadata sakuduna diédit sacara manual, sareng format xml langkung cocog pikeun ieu. Argumen kadua pikeun xml nyaéta ayana sadaya kelas anu diperyogikeun dina JDK, anu ngamungkinkeun pikeun ngeureunkeun gelut sareng perpustakaan éksternal. Kalayan senang pisan, kuring mindahkeun sadaya metadata tina json ka xml sareng ngamimitian ngédit logika autocomplete.

Conto metadata

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

Hasilna I dijieun parobahan kana kelas SQLUtils sareng SQLCompletionAnalyzer. Gagasanna nyaéta kieu: upami program éta henteu tiasa mendakan bongbolongan autocomplete anu cocog nganggo logika dasar, maka éta pariksa ayana kamungkinan ngagabung nganggo file xml éksternal. File sorangan nyimpen pasangan tabel anu nunjukkeun widang dimana tabel ieu kedah dikaitkeun. Watesan tanggal validitas téknis rékaman eff_dttm sareng exp_dttm sareng bandéra ngahapus logis deleted_ind diatur sacara standar.

Nalika parobahan dilakukeun kana kode, timbul patarosan - saha anu bakal ngeusian file nganggo metadata? Aya seueur éntitas dina gudang, éta mahal pikeun ngadaptarkeun sadaya sambungan sorangan. Hasilna, kuring mutuskeun pikeun napelkeun tugas ieu ka sasama analis kuring. Kuring dipasang file metadata di svn, ti mana Checkout a dijieun ka diréktori lokal kalawan program. Prinsipna nyaéta kieu: naha éntitas énggal muncul dina gudang? Hiji analis asupkeun kamungkinan ngagabung kana file, commits parobahan, sésana pariksa kaluar ka diri jeung ngarasakeun karya otomatis-parantosan: komunitas, akumulasi pangaweruh jeung sagala rupa nu. Ngalaksanakeun bengkel ngeunaan ngagunakeun program pikeun kolega, nyerat tulisan dina Confluence - ayeuna perusahaan ngagaduhan alat anu langkung saé.

Gawé dina fitur ieu masihan kuring pamahaman yén teu kudu sieun tinker kalawan proyék open source - sakumaha aturan, maranéhna boga arsitektur jelas, komo pangaweruh dasar basa bakal cukup pikeun percobaan. Sareng kalayan sababaraha kegigihan, anjeun malah bakal tiasa nyingkirkeun operasi rutin anu dibenci, ngahémat waktos diri pikeun percobaan énggal.

sumber: www.habr.com

Tambahkeun komentar