Rutin işlemleri defalarca tekrarlamayı sever misiniz? Yani istemiyorum. Ancak SQL istemcisinde Rostelecom depolama alanıyla her çalışırken, tablolar arasındaki tüm birleştirmeleri manuel olarak kaydetmem gerekiyordu. Ve bu, vakaların %90'ında tabloları birleştirmeye yönelik alan ve koşulların sorgudan sorguya çakışmasına rağmen! Görünüşe göre herhangi bir SQL istemcisinde otomatik tamamlama işlevleri vardır, ancak depolar için bu her zaman işe yaramaz: performansı artırmak için nadiren benzersiz kısıtlama ve yabancı anahtar içerirler ve bu olmadan program, varlıkların her biriyle nasıl ilişkili olduğunu bilemez. diğer ve sizin için neler yapabileceğini sunuyoruz.
İnkar, öfke, pazarlık, depresyon ve yaklaşan kabullenme sürecinden geçtikten sonra karar verdim - neden blackjack ile otomatik doldurmayı kendim uygulamaya çalışmıyorum ve bunu doğru şekilde yapmıyorum? Java ile yazılmış dbeaver istemcisini kullanıyorum, açık kaynaklı bir topluluk sürümüne sahip. Basit bir plan olgunlaştı:
- Kaynak kodunda otomatik tamamlamadan sorumlu sınıfları bulun
- Onları harici meta verilerle çalışmaya yönlendirin ve oradan birleştirmelerle ilgili bilgileri çekin
- ???
- KAR
İlk noktayı oldukça hızlı bir şekilde çözdüm - hata izleyicide otomatik doldurmayı ayarlamaya yönelik bir istek buldum ve ilgili
Json ile çalışmak için kütüphaneyi kullanmaya karar verdim
Sonunda derleme hatalarını düzeltmeyi başardım: Kitaplığı pom.xml dosyasına değil, manifest.mf manifest dosyasına, OSGI'nin gerektirdiği şekilde, içe aktarma paketi olarak belirterek kaydettim. En güzel çözüm değil ama işe yarıyor. Sonra bir sonraki sürpriz ortaya çıktı. Intellij Idea'da geliştirme yapıyorsanız, Eclipse platformuna dayalı olarak projenizde hata ayıklamaya başlayamazsınız: deneyimsiz bir geliştirici, sorgu tamamlamayan bir analistten daha az sıkıntı çekmeyecektir. Kunduz geliştiricileri, wiki'de yapılması gereken tüm dansları tef ile belirterek kurtarmaya geldiler. En can sıkıcı şey, tüm bu işgallerden sonra bile projenin, içe aktarma paketi aracılığıyla bağlanan json kütüphanesiyle hata ayıklamada başlatılmak istememesidir (yine de bitmiş ürüne başarıyla monte edilmiş olmasına rağmen).
O zamana kadar, görevim için json kullanmanın zorluğunu zaten fark etmiştim - sonuçta meta verilerin manuel olarak düzenlenmesi gerekiyordu ve xml formatı bunun için daha uygun. Xml lehine ikinci argüman, JDK'da gerekli tüm sınıfların bulunmasıydı ve bu, harici bir kütüphaneyle mücadeleyi durdurmayı mümkün kıldı. Büyük bir keyifle json'dan xml'e tüm metadata'yı aktardım ve otomatik tamamlama mantığını düzenlemeye başladım.
Meta veri örneği
<?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>
Sonuç olarak ben
Kodda değişiklikler yapıldığında şu soru ortaya çıktı: dosyayı meta verilerle kim dolduracak? Depoda çok sayıda varlık var, tüm bağlantıları kendiniz kaydetmek pahalıdır. Sonuç olarak bu görevi analist arkadaşlarıma devretmeye karar verdim. Meta veri dosyasını svn'ye gönderdim, buradan programla yerel dizine bir ödeme yapıldı. Prensip şudur: Depoda yeni bir varlık mı ortaya çıktı? Bir analist dosyaya olası birleştirmeleri girer, değişiklikleri taahhüt eder, geri kalanı kendi kendilerine kontrol eder ve çalışan otomatik tamamlamanın tadını çıkarır: topluluk, bilgi birikimi ve tüm bunlar. Programın meslektaşları için kullanımına ilişkin bir atölye çalışması düzenledi, Confluence'da bir makale yazdı - artık şirketin bir kullanışlı aracı daha var.
Bu özellik üzerinde çalışmak bana açık kaynaklı projelerle uğraşmaktan korkmaya gerek olmadığı anlayışını kazandırdı - kural olarak net bir mimariye sahipler ve hatta temel dil bilgisi bile deneyler için yeterli olacak. Ve belli bir miktar ısrarla, nefret ettiğiniz rutin işlemlerden bile kurtulabilecek ve yeni deneyler için kendinize zaman kazandırabileceksiniz.
Kaynak: habr.com