GeoKettle: Açık Kaynaklı Konumsal ETL Aracı

Hangi amaca yönelik olursa olsun verilerin bir formattan/platformdan diğerine aktarılması, gerekli düzenlemelerin yapılması zahmetli bir iştir. Bu durum verinin miktarıyla beraber doğru orantıda zorlaşabiliyor. İşte bu noktada ETL (Extract-Transform-Load) araçları devreye giriyor. ETL araçlarını kullanarak elinizdeki verinin dönüşümü ve düzenlemesini adım adım tasarlayarak olası hataları en aza indirgemeniz mümkün. Öte yandan bu işlemleri programlama ile de halletmeniz mümkün fakat ETL araçları daha konforlu ve güvenli bir ortam sunmaktadır.

Farklı uygulama alanları için özelleşmiş ETL araçlarının yanı sıra konumsal verilere yönelik olarak geliştirilen çeşitli araçlar da mevcuttur. Bu yazımda Spatialytics tarafından geliştirilen konumsal ETL aracı olan GeoKettle ‘dan bahsedeğim. Java ile geliştirilmekte olan GeoKettle açık kaynaklı, ücretsiz bir ETL aracıdır.

Gerekenler

GeoKettle (v2.5)

Ordance Survey topografya veri seti (OS MasterMap Topography Layer **GML)

Hazırladığım örnek dönüşüm.

Arayüz

GeoKettle arayüzü aslında oldukça kolay ve anlaşılır. Temelde Transformation ve Job olmak üzere iki tür işlem bulunmaktadır. Transformation ile veri dönüşüm/düzenleme işlemleri tanımlanmaktadır. Job ise daha yüksek seviyeli işlemlerdir (örneğin döşümün yapılması hata olursa raporun mail olarak gönderilmesi gibi). Aşağıda arayüz ve temel olarak ihtiyaç duyulan bölümler gösterilmiştir.

1 = Kullanacağımız araçların bulunduğu menü.

2 = İşlem adımları (Steps).

3 = Veritabanı bağlantı sihirbazı.

4 = Oluşturulan işlem adımlarının çalıştırılması.

Örnek Bir Dönüşümün Gerçekleştirilmesi

Şöyle bir senaryo düşünelim: elimizde Ordance Survey (OS) tarafından hazırlanmış GML topografya veri seti bulunmaktadır. Bu veri seti içindeki istediğimiz katmanı alıp gerekli öznitelikleri düzenledikten ve koordinat dönüşümünü tamamladıktan sonra filtre uygulayarak gerekli veriyi MySQL veritabanına yükleyeceğiz. Şimdi sırasıyla bu iş adımlarını tanımlayalım.

1. Girdi Katmanının Tanımlanması

Kullanacağımız veriyi indirdikten sonra arşivden çıkarıp uzantısı .gml olarak değiştirin. Ardından GeoKettle ‘ı açın. Karşınıza gelen diyaloğu No repository diyerek geçin.

Karşımıza gelen penceredeki ana menüden File > New > Transformation seçeneğini tıklayarak yeni bir dönüşüm ekranı oluşturalım. Ardından Desing seçeneğini etkinleştirmenizi tavsiye ederim.

Soldaki Steps menüsünden Input bölümündeki OGR Input işlemine tıklayın ve basılı tutarak boş ekrana sürükleyip bırakın. Bu şekilde ilk işlemimizi (Step) eklemiş olduk. Ardından bu işleme çift tıklayarak düzenleyin. Aşağıda örnek ekran görüntüsü verilmiştir.

Veriyi ekledikten sonra görüntülemek için işlem adımı simgesine (OGR input) sağ tıklayarak açılan menüden Preview > Quick Launch diyerek veriyi inceleyebilirsiniz.

2. Öznitelik Düzenleme

Elimizdeki veriden gereksiz özniteliklerin silinmesi ve yeniden adlandırılması için soldaki Steps menüsüden Transform bölümündeki Select values işlemini ekleyin. Bu işlem ile ilk işlem olan OGR input ‘u birbirine bağlamanız gerekiyor. Bunun için ilk işleme (OGR input) farenin orta tuşu ile tıklayın ve basılı tutarak ikinci işlemin (Select values) üzerine gelerek bırakın. Ardından Select values işlemini aşağıdaki gibi düzenleyin.

Get fields to select düğmesine tıklayarak ilk adımdan gelen öznitelikleri listeyelebilirsiniz. Gereksiz görülenleri seçerek Del tuşu ile kaldırabilisiniz. Bir özniteliği yeniden adlandırmak için ise o özniteliğin yanındaki Rename to sütununa yeni adını girebilirsiniz. Oluşan işlem adımlarına ait ekran görüntüsü aşağıda verilmiştir.

3. Veri Filtreleme (Bina)

Bu adımda veriyi filtreleyerek istediğimiz koşulu sağlayanları seçeceğiz. Bunun için Filter rows işlem adımını ekleyerek Select values ile bağlantıyı sağlayın. Ardından bu işlem adımına çift tıklayarak düzen penceresini açın.

nesneTipi ‘nin bulunduğu kutucuğa tıklayın açılan penceren girdi sütunu belirleyin (ben nesneTipi ni seçtim) ardında orta kutucuktan opearötü seçin ve son olarak Building in bulunduğu kutucuktan koşulu belirtin (ben (1:Building) seçtim). Kısaca açıklayacak olursak nesneTipi özniteliği (1:Building) olanlar seçilmektedir.

Koşulu bu şekilde tanımladıktan sonra yukarıdaki bölümden koşulun doğru veya yanlış olması durumda nelerin yapılacağını tanımlayacağız. Ama şuan için bir sonraki işlem adımı eklemediğimizden önce onları ekleyip ardından bu pencereye geri dönerek bunları tanımlamanız gerekiyor. Yukarıda son hali gösteriliyor, normalde kutucuklar boştur. Şu ana kadar yapılan işlem adımları ise aşağıda gösterilmiştir.

4. Koordinat Düzenleme

Koordinat sistemi dönüşümü için SRS Transformation aracını ekleyin. Filter rows ile bağlantıyı kurun. Ardından düzen penceresini açın.  Burada girdi geometri sütunun ve dönüşüm yapılacak koordinat sistemini (WGS84 EPSG kodu 4324 ‘tür) belirleyin.

5. Boş İşlemin Tanımlanması

Yukarıdaki filtre adımında koşulun sağlanması durumunda koordinat dönüşümü işlemine geçilecek eğer sağlanmıyorsa bu sefer herhangi bir işlem yapılmasın istiyoruz. Bunun için Dummy (do nothing) işlem adımını kullancağız. Soldaki menüden Dummy ‘yi ekleyin ve Filter rows ile bağlantıyı kurun. Soru penceresi gelirse Copy ‘yi seçin.

6. Filtredeki Eksiklerin Tanımlanması

3. Adımdaki Veri Filtreleme de sadece koşulu tanımlamıştık. Koşulun sağlanması veya sağlanmaması durumunda ne yapılacağını belirmemiştik o yüzden geriye dönüp bunları tanımlayacağız. Filter rows ‘un düzen penceresini açın ve boş olan Send true data to step kısmında SRS Trasnformation işlem adımını seçin. Send false data to step kısmı için Dummy işlem adımını seçerek kaydedin. Önemli bir hatırlatma: bu işlemi yapmadan önce hem SRS Trans. hem de Dummy ile Filter rows arasından bağlantı olmalıdır. Aksi halde bunları seçenekler arasında göremezsiniz. Son durum aşağıda gösterilmiştir.

7. Veritabanına Aktarma

Son olarak veriyi MySQL veritabanına aktaracağız. Öncelikle veritabanı bağlantı parametrelerini tanımlamamız gerekiyor. Bunun için yukarıdaki Wizard menüsünden Create database… seçeneğini tıklayarak karşımıza gelen pencereden MySQL veritabanını seçin ve adım adım gerekli parametreleri girerek bağlantıyı oluşturun. Oldukça basit olduğundan buna değinmeyeceğim.

Veriyi aktarmak için Table output aracını ekleyin ve düzen penceresini açın.

Yukarıda verilen gerekli parametrelerin girilmiş halini görüyorsunuz. Burada

Connection ile bağlantıyı seçtik.

Target table ile hedef tablo belirlendi.

Specify database fields ile hangi sütunların gönderileceğini istediğimiz seçebilirsiniz.

Database fiels sekmesinde önce Get fields düğmesine tıklayarak sütunları listeledik gidecek sütunları belirledik (aslında ikinci iş adımına (Select values) hiç gerek kalmıyor).

Şimdi hemen OK demeden önce önemli bir nokta var. Elimizdeki veriyi var olan bir tabloya mı aktarmak istiyorsunuz yoksa yeni bir tabloyamı ? Eğer tablo varsa (bunu Target table seçeneğinde belirtmiştik) sıkıntı yok. Fakat böyle bir tablo yoksa oluşturmanız gerekiyor yoksa hata mesajı alırsınız. Bunun için SQL butonuna tıklayın. GeoKettle sizin için otomatik bir sql sorgusu üretecektir. Execute diyerek çalıştırın.

Artık veritabanında tablomuzda hazır olduğuna göre OK diyerek Table output işlem adımına ait düzen penceresini kapatın. Son durumda oluşan işlem adımlarına ait ekran görüntüsü aşağıda verilmiştir.

Dönüşüm işlemini başlatmak için Arayüz kısmında belirttiğim 4 nolu Oynat butonuna tıklayın. Karşınıza gelen ekranda Launch butonuna tıklayın. Ana ekranın altında Execution Result penceresinden işlemlerin nasıl gittiğini görebilirsiniz. Hata oluşması durumunda kırmızı renkle gösterilmektedir.

MySQL ve QGIS Bağlantısı

MySQL veritabanına aktardığımız veriye QGIS ile erişmeniz mümkün. Bunun için Add Vector Layer düğmesine tıklayarak açılan pencereden Database seçeneğini işaretleyin ve New diyerek gerekli parametreleri girin.

Ardından Open diyerek veritabanına bağlanın. Karşınıza gelecek pencereden (eğer başka tablo yoksa gelmeyebilir) aktardığınız tablo adını seçerek veriyi QGIS ‘e ekleyin.

Yayınlamış olduğum yazıları kaynak belirtmek kaydıyla paylaşabilirsiniz.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s