2016-03-17 467 views
0

我有我需要在Netezza公司的加入兩個表,其中一個非常大如何優化Netezza公司表恭維與日期條件

我有一個維度表是具有客戶表的連接兩個字段,客戶ID和觀察日期,即

cust_id, obs_date 
'a','2015-01-05' 
'b','2016-02-03' 
'c','2014-05-21' 
'd','2016-01-31' 

我有一個事實表,事實上,並在數量上非常高。它有每個客戶有很多交易的每日期即

cust_id, tran_date, transaction_amt 
'a','2015-01-01',1 
'a','2015-01-01',2 
'a','2015-01-01',5 
'a','2015-01-02',7 
'a','2015-01-02',2 
'b','2016-01-02',12 

兩個表是由相同的密鑰分發 - CUST_ID

但是當我加入的表,我需要加入給出的日期條件。查詢是非常快,當我只是將它們加入到一起,但是當我添加日期條件它似乎並沒有優化。有沒有人有關於如何設置基礎表或編寫連接的提示?

I.e.總和transaction_amt爲每個客戶對他們所有的交易爲3個月,他們的obs_date

FROM CUSTOMER_TABLE 
INNER JOIN TRANSACTION_TABLE 
ON CUSTOMER_TABLE.cust_id = TRANSACTION_TABLE.cust_id 
    AND TRANSACTION_TABLE.TRAN_DATE BETWEEN CUSTOMER_TABLE.OBS_DATE - 30 AND CUSTOMER_TABLE.OBS_DATE 

回答

1

如果你的交易表足夠大,則可能受益於使用CBTs

如果可以的話,創建一個使用TRAN_DATE組織表的副本(我在你這裏DDL猜測):

create table transaction_table (
    cust_id varchar(20) 
    ,tran_date date 
    ,transaction_amt numeric(10,0) 
) distribute on (cust_id) 
organize on (tran_date); 

加入到該看看性能得到改善。你也可以爲這些列使用物化視圖,但我認爲CBT在這裏會更有用。

正如斯科特在下面的評論中提到的那樣,您應該按插入日期排序或修改記錄後確保它們被正確排序。

+0

也許還要提到最初的新郎記錄剪切定義後所需的全部內容。 – ScottMcG

+0

我在談論創建表的另一個副本;但是,如果你重組而不是創建/插入,你需要修改記錄。如果表格足夠大,複製它可能會令人望而卻步。 –

+0

即使您進行了創建/插入操作,您也需要在插入時進行修飾或排序,以獲得區域地圖的好處。 – ScottMcG