Oracle Data Integrator(ODI) 12c ile EXISTS Kullanımı

Merhabalar, bu yazımızda Oracle Data Integrator(ODI) aracı ile EXISTS operatörünü nasıl kullanabileceğimizi anlatacağız. Öncelikle PostgreSQL veritabanımızda HR şemasının olduğunu varsayalım ve biz bu şema içerisinden Employees, Departments ve Locations tablolarını kullanacağız.

cncpt292

ODI üzerinde source(kaynak) ve target(hedef) şeklinde iki modelimizin olduğunu varsayalım. Source(PostgreSQL) modelimizin içerisinde Employees, Departments ve Locations tablolarının metadatalarını hazırlıyoruz. Ardından Target(Oracle) modelimiz içerisinde ise “Speal Locations” adında bir tablomuzun metadatası hazırlıyoruz.

Bu çalışmamızda EXISTS kullanarak, maaşı 10.000’den fazla ve meslek tanımı IT_PROG olan ayrıca California eyaletinde yaşan kişilerin adreslerini listelemek istiyoruz.

Aslında temel amacımız ODI üzerinde Subquery Filter(EXISTS, NOT IN gibi filtereler) nasıl kullanılır onu öğrenmek. Gerekli açıklamaları yaptığımıza göre çalışmamıza başlayabiliriz. 🙂

Screenshot_1  Screenshot_47

Screenshot_3Screenshot_5Screenshot_7Screenshot_46

Tutorial_EXISTS adında bir Mapping oluşturuyoruz. Ardından Mapping içerisine  Employees, Departments ve Locations tablolarının sürüklüyoruz. İsterseniz sizde örnekteki gibi tablo isimlerine alias yaparak devam edebilirsiniz.

Screenshot_2Screenshot_45

Ardından Employees(EMP) tablosunun salary sütunu sürükleyerek beyaz alana bırakıyoruz. Bu işlemin anlamı salary için bir filtre tanımlamak istememiz. Böyle yapmak yerine istersek pencerenin sağ tarafında bulunan  Components menüsünden Filter’ı sürükleyip bırakabiliriz.  Sonrasında FILTER içerisine bir condition tanımlıyoruz. Bizim şartımız, çalışanın maaşının 10.000 TL’den büyük olmasıydı.

Filter Condition : EMP.salary >10000

Screenshot_12

Şimdi sağ tarafta bulunan Components menüsünden Subquery Filter’ı sürükleyip bırakıyoruz.

Screenshot_18Screenshot_17

Mapping alanında ki Departmens(DEP) tablosundan SUBQUERYFILTER bileşenine bir ok çiziyoruz.

Screenshot_19

Connection Path’i tanımlarken, Departments(DEP) tablomuz DRIVER_INPUT olacak şekilde ayarlıyoruz. Eşleştirme metodumuz olarak By Position(sütun sırasına göre eşleştir) seçiyoruz.

Screenshot_20

Departments(DEP) tablomuzun bağlantı tanımlamasını yaptıktan sonra Employees(EMP) tablomuz için Connection Path tanımlayacağız. EMP bileşeninde bulunan department_id satırını sürekleyip, SUBQUERY_FILTER bileşeni üzerinde ki department_id üzerine bırakıyoruz. Karşımıza çıkan ekranda bu kez DRIVER_INPUT yerine SUBQUERY_FILTER_INPUT olacak şekilde ayarlıyoruz.

Screenshot_23Screenshot_24Screenshot_25

Gerekli ayarlamaları doğru bir şekilde yaptığınızdan emin olmak için SUBQUERY_FILTER bileşenini seçip Attributes değerlerinin aşağıdaki gibi olmasına dikkat ediniz.

Screenshot_26

Sıradaki işlemimiz SUBQUERY_FILTER bileşini için Condition tanımlaması yapmak olacak. Bu işleme geçmeden önce oluşturduğumuz filtrelerin isimlerini güncellememizde fayda var. Bunun için ismini değiştirmek istediğiniz bileşenin üzerine tıklayıp General sekmesinden Name değerini değiştirmeniz yeterli olacaktır.

General : 

Name : SUBQUERY_FILTER_EmpDep

Condition :

Subquery Filter Input Role : EXISTS

Subquery Filter Condition :

EMP.department_id = DEP.department_id  AND EMP.job_id = 'IT_PROG'

Screenshot_29Screenshot_33Screenshot_34Screenshot_35Screenshot_37

Bu kez oluşturduğumuz  SUBQUERYFILTER_EmpDep filtresi ile Locations(LOC) tablomuzu bir filtreden geçireceğiz. Bunun için öncelikle yeni bir SUBQUERYFILTER bileşeni ekliyoruz. Ardından LOC bileşeninden yeni eklediğimiz filtreye bir ok çiziyoruz.

Screenshot_38Screenshot_39

LOC bileşeni ile SUBQUERYFILTER bileşenini eşleştirirken,  Connection Path olarak DRIVER_INPUT olarak tanımlayacağız.

Connection Path : DRIVER_INPUT

Match Options : By Position

Create Actions:

Create Attributes On Target 

Auto Map

Screenshot_40

SUBQUERYFILTER_EmpDep bileşeni ile SUBQUERYFILTER bileşenini eşleştirirken,  Connection Path olarak SUBQUERY_FILTER _INPUT olarak tanımlayacağız.

Screenshot_41

Gerekli ayarlamaları doğru bir şekilde yaptığınızdan emin olmak için SUBQUERY_FILTER bileşenini seçip Attributes değerlerinin aşağıdaki gibi olmasına dikkat ediniz.

Screenshot_43

Sıradaki işlemimiz SUBQUERY_FILTER bileşini için Condition tanımlaması yapmak olacak. Bu işleme geçmeden önce oluşturduğumuz filtrelerin isimlerini güncellememizde fayda var. Bunun için ismini değiştirmek istediğiniz bileşenin üzerine tıklayıp General sekmesinden Name değerini değiştirmeniz yeterli olacaktır.

General : 

Name : SUBQUERY_FILTER_DepLoc

Condition :

Subquery Filter Input Role : EXISTS

Subquery Filter Condition :

SUBQUERY_FILTER_DepLoc.location_id = LOC.location_id AND
LOC.state_province = 'California'

Screenshot_44Screenshot_48Screenshot_49

Ve son olarak elde ettiğimiz satırları hangi tablo içerisine atmak istiyorsak önce onu Mapping alanına ekliyoruz. ( Model içerisinden ilgili tabloyu mapping alanına sürükleyip bırakmanız yeterli olacaktır.)

En başta söylediğimiz üzere biz elde ettiğimiz satırları Special Locations(SPL) tablosuna kaydetmek istiyorduk.

SUBQUERY_FILTER_DepLoc bileşeninden SPL bileşenine bir ok çiziyoruz. Match Options olarak By Position(Sütun Sıralamasına Göre) seçiyoruz.

 

Screenshot_51Screenshot_53

Mapping işlemimizin Logical kısmını tamamladık. Yazımızı bitirmeden önce Physical kısmına da değinelim.

Bu kısımda iki ana grup var: SOURCE_GROUP ve EXEC_GROUP

  • SOURCE_GROUP, kaynak veritabanı üzerinde çalışacak işlemler grubu anlamına gelir.
  • EXEC_GROUP, hedef veritabanı üzerinde çalışacak işlemler grubu anlamına gelir.

Bizim örneğimizde kaynak olarak PostgreSQL ve hedef olarak Oracle veritabanı tanımlıdır. Aşağıdaki düzende bütün filtrelerin PostgreSQL veritabanı üzerinde çalışacağı ve sonrasında Oracle veritabanına verileri aktaracağı anlamına geliyor.

Peki biz bundan ne çıkarmalıyız ?

Boyutu çok büyük olan bir veriniz var ve bu veriyi bir veritabanından diğerine aktarmanız gerekiyor. Bu durumda EXISTS operatörünü kullanarak fark yaratabilirsiniz. 🙂 🙂

Screenshot_67.png

Faydalı bir yazı olması dileğiyle,

iyi çalışmalar dileriz. 🙂

Bu yazı ETL, Oracle Data Integrator, PostgreSQL içinde yayınlandı ve , , , , , , , , , , , , , , , , , , , , , , , , , , , olarak etiketlendi. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s