2012-03-18 102 views
2

我有一組基於時間的記錄集,需要將其加載到用於分段數據的分區表中。舞臺表按天劃分。爲了提高效率,我將數據負載分佈到多個「處理器」(SSIS中的流)的階段表中。一旦數據被分級,我就會在加載到數據集市之前執行一系列的重複數據刪除操作。然而,我的挑戰是,分階段的數據並不是均勻地分佈在處理器中,因爲我在由日期分區的集合中使用NTILE函數。如何平鋪跨越邊界均勻分佈的數據

所以我可能會看到下面的分配5個處理器...

Processor 1, >= 2011-01-01 and < 2011-05-01, Rows = 200,000 
Processor 2, >= 2011-05-01 and < 2011-09-01, Rows = 3,000,000 
Processor 3, >= 2011-09-01 and < 2012-01-01, Rows = 6,000,000 
Processor 4, >= 2012-01-01 and < 2012-05-01, Rows = 6,000,000 
Processor 5, >= 2012-05-01 and < 2012-09-01, Rows = 0 

的數據量成倍增加,所以雖然處理器4只擁有600萬在負載時的今天,一旦滿範圍被填充,處理器4可能總共工作在8,000,000+行(記錄)。

我的目標是根據行數平均分配處理器上的工作量,同時確保任何兩個處理器不會爭用相同的分區(日)。

所以,作爲一個視覺的分佈將需要是這個樣子......

Processor 1, >= 2011-01-01 and < 2011-09-01, Rows (3,200,000) 
Processor 2, >= 2011-09-01 and < 2011-11-01, Rows (3,000,000) 
Processor 3, >= 2011-11-01 and < 2012-01-01, Rows (3,000,000) 
Processor 4, >= 2012-01-01 and < 2012-01-03, Rows (3,000,000) 
Processor 5, >= 2012-01-03 and < 2012-03-18, Rows (3,000,000; 2012-03-18 contains most current data) 

任何反饋將不勝感激。

回答

0

這是一個想法,但它取決於您的重複需求。在您當前的分區方案中,您需要保存幾個月的記錄。如果一天中的所有記錄都在同一地區,重複工作是否會發生?

如果是這樣,那麼你可以在白天進行「循環」分區。下面是一個例子:

select CAST(<thedate> as int)%5 

這應該對負載平衡更好。