Oracle Data Integrator ya da yaygın olarak duyduğumuz kısaltması ile ODI, Oracle’ın geliştirdiği bir ELT aracıdır.

Oracle Data Integrator; Spark, Spark Streaming, Hive ve Kafka gibi birçok Big Data teknolojisini ve Oracle, Exadata, Teradata, IBM DB2, Netezza gibi birçok DWH platformunu destekler. ODI bu ortamlar arasında veri entegrasyonunu da mümkün kılar.

Bu yazıda; ODI hakkında bir giriş yaparak, temel olarak bir Developer’ın geliştirme aşamasında kullanacağı, ilerleyeceği yoldan bahsetmeye çalışacağım.

İlk önce arayüzden bahsetmek gerekirse; gerekli kullanıcı bilgileriniz ile mevcut bağlantılarınızdan (gerekli kullanıcı ve bağlantıların bulunduğu varsayılmıştır) birine bağlandığınızda, karşınıza bir başlangıç sayfası açılır.

Arayüzün sol tarafında 4 tane sekme(Navigator) bulunmaktadır bunlar yukarıda gördüğümüz; Designer, Operator, Topology ve Security’dir. Kısaca bunları ne için kullandığımızdan bahsedelim. Geliştirme aşamasında yoğun olarak Designer ve Operator araçlarını kullanıyor olacağız.

Designer:

Designer bileşeni en çok kullanacağımız bileşendir. Burada da bir developerın en çok kullanacağı alan Projects ve Models kısımlarıdır.

 

-Projects: Bu kısım yarattığımız projelerin bulunduğu kısımdır. Projelerimizin altında yaptığımız geliştirme adımları bulunur. Bu geliştirmeleri yazının ileri kısımlarında ele alacağız.

-Models: Bu kısımda ise herhangi bir databaseden ya da DWH şemasından getireceğimiz, kısacası ELT aşamasında kullandığımız tabloları bulabileceğimiz kısımdır. Getirmek istediğimiz tablonun bulunduğu database’in model bağlantılarının kurulmuş olması gerekmektedir.

-Dimensions and Cubes: ODI 12.2.1 versiyonu ile gelen özellikle artık Dimensions ve Cubes yaratarak bunları mappinglerde kullanabiliriz. Bu kısımda da yarattığımız Dimensions ve Cubes bulunur.

-Load Plans and Scenarios: Burada üretilen kodlar ve yürütülebilir nesneler bulunur.

-Global Objects: Seçeneklerden de gördüğümüz üzere global değişkenler, user functions gibi objeler bulunur.

-Labels: Label, nesnelerin kapsamlı ve tutarlı birbirlerine bağımlı sürümler kümesidir. Bu kısımda Label’lar bulunur.

Operator:

Operator kısmı ise yarattığımız akışları çalıştırdığımızda, akışları izleyebileceğimiz gerekirse müdahale edebileceğimiz kısımdır. Operator kısmında çalışan işimizin detaylarına, hangi adımda olduğuna ya da hata aldıya nerede aldığını Steps kısmında detaylıca inceleyebiliriz. Adımların her birinin detaylarını ilgili adımı tıklayarak görüntüleyebiliriz.

Topology:

Topology, bilgi sisteminin fiziksel ve mantıksal mimarisini tanımlayan verileri yönetmek için kullanılır. Bağlanmak istediğimiz bir sistemi(db vb.) burada tanımlayarak ODI üzerinden erişebiliriz. 

Security:

ODI’de güvenliği yönetmek için kullanılır. Burada kullanıcılar ve profiller oluşturulabilir ve bu kullanıcılara veya profillere yetkiler tanımlanabilir.

Bir developer, geliştirmelerini yaparken belli adımları izler. Bu adımlardan sırasıyla bahsetmeye çalışacağız. ODI’de iki farklı şekilde geliştirmelerimizi yapabiliriz, istersek direkt olarak içerisine SQL’i koyduğumuz ODI Procedure yapısı ya da componentleri kullanarak geliştirme yaptığımız Mapping’dir. Procedure’ler mappinglere göre daha az kullanılır denilebilir.

1.Proje ve Mapping Oluşturma:

Geliştirme aşamasına başlarken ilk önce bir proje oluşturulur bunun için de Designer-Projects adımları ilerlenerek proje oluşturulur. Sonrasında projede yarattığımız folder’da Mapping seçeneğinden new mapping diyerek mappingleri oluşturabiliriz.

2.ODI’de ELT Aşamaları:

Bir ELT aşamasında belli kaynak tablolarımız ve hedef tablomuz bulunur. Bu kaynak ve hedef tabloları ODI’de kullanabilmek için Reverse etmemiz gerekmektedir. Nedir bu reverse dersek, aslında herhangi bir database’de ya da bir DWH’ta bulunan tablonun ODI’ye getirilmesidir diyebiliriz. Reverse işlemini getirmek istediğimiz tablonun, Designer – Models altındaki modelini açarak Selective Reverse-Engineering sekmesinden istediğimiz tabloyu seçerek gerçekleştiririz.

i)Mappings:

İstediğimiz tabloları ODI üzerinde modelimizin altında görmeye başladıktan sonra artık geliştirmeye başlayabiliriz. İstediğimiz tabloları mapping sayfasına sürükle bırak ile getirerek daha sonra componentler yardımıyla istediğiniz şekilde veriyi dönüştürebilirsiniz.

Birkaç örnek ile inceleyebiliriz. Örneğin basit bir örnekle başlamak istersek, aşağıdaki örnekte SRC_CITY adında bir kaynak tablomuz bulunmaktadır, bu tablodaki veriler içerisinde POPULATION değeri 500’den büyük olan kayıtları, TRG_CITY adındaki hedef tablomuza eklemek istediğimizde aşağıdaki gibi bir akış yapabiliriz.

Aşağıdaki örnekte ise TRG_PROD_FAMILY ve SRC_PRODUCT tablolarının inner join ile FAMILY_NAME kolonu üzerinden bağlanarak belli sahaların distinct işlemine sokulması ve sonrasında TRG_PRODUCT tablosuna eklendiği akışı inceleyebiliriz.

ii)Variables:

Değişkenler, ODI’de 3 tipte tanımlanabilir bunlar numeric, alphanumeric ve date’dir. Bir değişken yaratmak istediğimizde Projects altındaki Variables seçeneğine sağ tıklayarak New Variable seçeneği ile ekleyebiliriz.

Değişken ismini ve tipini girdikten sonra refreshing kısmında değişkenin alacağı değeri SQL sorgusuyla set edebiliriz.

Değişkeni yaratıp set ettikten sonra proje içinde herhangi bir yerde kullanmak istediğimizde #PROJE_ADI.DEGISKEN_ADI şeklinde kullanabiliriz.

Değişkenler, bir pakette kullanılırken 4 farklı şekilde kullanılabilir bunlar; Declare, Set, Evaluate ve Refresh Variable.

Declare Variable: Değişkenin değeri, paket çalıştırılırken dışarıdan set edilecek ise, değişken Declare Variable olmalıdır.

Set Variable: Değişkenin değeri, paket içinde direkt olarak verilmek istendiğinde, değişken Set Variable olmalıdır.

Refresh Variable: Değişkenin değeri, yaratırken Refreshing kısmına yazdığımız SQL ile set edilmesini istersek, değişken Refresh Variable olmalıdır.

Evaluate Variable: Değişkenin değerini bir değer ile karşılaştırmak istediğimizde, değişkeni Evaluate Variable şeklinde kullanırız.

iii)Packages:

Peki, bu mappingleri oluşturduk, onlarca mapping bulunan büyük bir projemiz var ve sırayla çalışması gereken birbirine bağımlı olan akışlar var bunları nasıl yönetebiliriz? Burada devreye Package’lar giriyor.

Package’ların içerisine projemiz için ihtiyacımız olan tüm akışları koyabiliriz. Bunlar mappingler, procedureler ya da değişkenler olabilir. Örneğin yarattığımız 5 tane mapping var ve birbirine bağımlı mappingler yani birinin target tablosu diğer bir mappingde source olarak kullanılıyor bu durumda sırayla çalışmalarını istiyoruz, bunun için yarattığımız mappingleri oluşturduğumuz pakete taşırız ve istediğimiz sıralamayla bağlarız. Paketlerde akışın hangi adımdan başlayacağı First Step seçeneği ile belirlenir. Başlatmak istediğimiz akışa sağ tıklayarak first step diyerek başlangıç adımı olarak bu akışı seçmiş oluruz. Eğer first step seçtiğimiz adımdan önce başka adımlar varsa bu adımlar çalışmayacaktır.

Yarattığımız mappingler ve bu mappinglerde kullanılan bir değişken ile aşağıdaki gibi bir paket oluşturabiliriz. Ayrıca görüldüğü gibi paketlerde bir toolbox bulunmaktadır. Bu toolbox’ta birçok durum için farklı toollar vardır, bu toolları da paketler içinde isteğe ve ihtiyaca bağlı şekilde bağlayarak kullanabiliriz.

Son olarak yarattığımız bir Package’ın belirli bir periyodda(günlük, aylık yıllık vb.) çalışmasını istediğimizde bu paketin bir senaryosunu üreterek bu senaryoyu istediğimiz aralıklarda istediğimiz şekillerde tetikletebiliriz. Bir paketten senaryo yaratmak için ilgili pakete sağ tıklayarak Generate Scenario seçeneğini tıklayarak, senaryo üretebiliriz. Her değişiklik sonrası yeni senaryo ürettiğimizde ODI bu senaryoyu yeni bir version olarak yaratır ve gerektiği durumlarda bu paketin eski senaryosu da elimizde bulunur.