ODI stage tablo yaratmadan subquery elde edilmesi
Subquery içeren selectleri kolaylaştırmak için temp (yellow) interfaceleri kullanabiliriz. Aşağıdaki sorguyu mavi interfacelerle yaptığımızda 2 tablo, 2 datastore, 2 interface gerekiyor. Temp interface ile yaptığımızda ise subquery için tablo ve datastore yaratmadan temp interface yaratılır.
CREATE TABLE TOP_10_MIN_PRICE_PROD AS
select prod_id, PROD_MIN_PRICE, MIN_ROWNUM FROM (
select prod_id, PROD_MIN_PRICE, row_number() over (partition by 1
order by PROD_MIN_PRICE) MIN_ROWNUM from sh.PRODUCTS s)
WHERE MIN_ROWNUM<11
Temp interface i oluştururken source datastore u atıyorum, source datastore üzerine gelip sağ tıklayarak add to target ile source datastore alanları target a kopyalanır.
Quick-edit tabından Target datastore ismini belirliyorum, ben anlamlı bir isim olması için MIN_PROD_PRICE yazdım.
MIN_ROWNUM alanını ekleyerek “row_number() over (partition by 1 order by PROD_MIN_PRICE )” şeklinde map ettim.
Flow tabında temp tablo özellikleri için create table yapmamasını istiyorum. Fiziksel bir tablo oluşturmadığı için truncate etmememize de gerek kalmıyor.
Ve temp interface i execute ettiğimde aşağıdaki script ortaya çıkıyor:
insert into SH.MIN_PRICE_PROD
(
PROD_ID,
PROD_MIN_PRICE,
MIN_ROWNUM
)
select
PRODUCTS.PROD_ID,
PRODUCTS.PROD_MIN_PRICE,
row_number() over (partition by 1
order by PROD_MIN_PRICE)
from SH.PRODUCTS PRODUCTS
Asıl tablomuz için database de TOP_10_MIN_PRICE_PROD tablosunu yaratıyorum.
CREATE TABLE TOP_10_MIN_PRICE_PROD
(
PROD_ID NUMBER(6) NOT NULL,
PROD_MIN_PRICE NUMBER(8,2) NOT NULL,
MIN_ROWNUM NUMBER
);
ODI de yeni bir interface yaratarak, ismi INT_TOP_10_MIN_PRICE_PROD olsun, temp interface i source datasource olarak atıyorum, source datasource u seçerek source properties ten Use Temporary Interface as Devired Table (Sub-Select) seçeneğini işaretliyorum.
Flow tabından truncate:true seçerek kaydediyorum.
Sub-select içeren query yi istediğim için sadece mavi interface i çalıştırıyorum. Tmp interface i kullanmadan istediğim sorguyu elde ediyorum.
Schedule için interface senaryosu veya paket içinde sadece mavi interface i kullanmak yeterli olacak.
ODI kullanımı açısından temp interfacelerin tek sakıncası, target datasource un kaynağına baktığımızda olarak temp tabloyu göstermesi, aslında kaynak olarak sh.products tablosunu gösterebilirdi.
Jale Ozgur
Latest posts by Jale Ozgur (see all)
- Analitik Fonksiyonlar - Ara 5, 2013
- ODI’da Seri ve Paralel Paket Çalıştırma - Ara 5, 2013
- Partitioning in Data Warehouse - Ara 5, 2013