ODI hiyerarşik tablo bağımlılıkları 

Oracle Data Integrator kullanılan ETL projelerinde interface sayısı arttıkça bunları yönetmesi de sorun haline gelir. Aşağıda görsel olarak okunması kolay bir hiyerarşik sorgu ile şuna benzer sorulara cevaplar bulabilirsiniz; Tablolar hangi sırayla dolacak? Yapılan bir değişiklik hangi tabloları etkileyecek? Bir tablo hangi tablolara kaynaklık ediyor? Çıktı şöyle olacak;

odi hiyerarşik tablo bağımlılığı

odi hiyerarşik tablo bağımlılığı

Bir tablonun dolması için hangi kaynak tabloların dolması gerekir? Bu sorguyu ODI WORK REPOSITORY şemasında çalıştırmalısınız ( Muhtemelen PROD_ODI_WORK ya da DEV_ODI_WORK ) Bu sorguda 22. satıra dikkat edin. Ara tabloların ya da kaynak tabloların bağımlılıklarının fazladan listelenmemesi için burada filtre verebilirsiniz. Vermeseniz de sorgu doğru çalışır. Fakat ara tablolar için de hiyerarşi oluşturur. Ya da tek bir tablo ismi yazarsanız sadece o tablonun bağımlılıklarını alırsınız ( Aynı şeyi en sonda da filtre ile yapabilirsiniz. Bir diğer nokta: Sorgu sonucunda VALIDITY isminde bir kolon göreceksiniz.Bu kolon hayati bir önem taşımıyor. Bu kolonu kullanabilmeniz için kaynak tablolarınız ( kastım ham datanın geldiği ilk tablolar) ile hedef tablolarınızın ( geçici-ara tablolar hariç) isim deseni birbirinden net olarak ayrılabiliyor olmalıdır. Aynı tablonun tüm bağımlılığını tekrar tekrar görmek istemiyorsanız ( distink komutu ile tekrarsız liste tabii ki oluşturabilirsiniz) bu kolonu oluşturan regexp komutunu hedef tablo desenini verecek şekilde verebilirsiniz. Mesela bu sorguda hedef tablolar TRG ile başlıyor

WITH dependency
     AS (SELECT i.pop_name
              , i.table_name target
              , NVL (s.table_name, s.src_tab_alias) source
           FROM prod_odi_work.snp_pop i
              , prod_odi_work.snp_data_set ds
              , prod_odi_work.snp_source_tab s
          WHERE     i.i_pop = ds.i_pop
                AND ds.i_data_set = s.i_data_set
                AND i.pop_name NOT LIKE 'XXX%' --  hariç bırakılacak olan tablolar-interfaceler vs
                                              ),
     a
     AS (           SELECT CONNECT_BY_ROOT target AS target_root
                         , LPAD (' ', 5 * (LEVEL - 1)) || d.target AS target
                         , d.source
                         , SYS_CONNECT_BY_PATH (target, '/') PATH
                         , CONNECT_BY_ROOT source AS source_root  
                         , LEVEL AS h_level
                         , CONNECT_BY_ISLEAF AS is_leaf
                         , d.pop_name                         
                      FROM dependency d
                START WITH target NOT LIKE 'STG%'  -- Bağımlılıkları incelenecek tabloların isimleri ya da deseni
                CONNECT BY NOCYCLE PRIOR source = target
         ORDER SIBLINGS BY d.target),
      b 
      AS ( 
SELECT a.h_level
     , a.target_root
     , a.target
     , a.source
     , CASE WHEN REGEXP_COUNT( path,'/TRG') =1 THEN 'OK' ELSE 'MUKERRER VS' END AS validity  -- burada TRG yerine hedef tabloyu ayıran net desen
     , a.path
     , a.pop_name
  FROM a
 WHERE 1 = 1
         )
SELECT  * from b --distinct target_root,source FROM b                
WHERE 1=1
       AND REGEXP_COUNT( path,'/TRG') = 1  --validity ile aynı işi yapar.  kaynak tekrarını engellemek için!
--       AND target_root = 'ORNEK TABLO,' --tekil örnek incelemek için filtre

Sorgu ODI 11g için yazıldı. Bu sorguyu tersten yazarsanız kaynaktan hedefe doğru bağımlılıkları çıkarabilirsiniz.