Sql server 2008 如何平铺跨边界均匀分布的数据

Sql server 2008 如何平铺跨边界均匀分布的数据,sql-server-2008,tsql,ranking-functions,Sql Server 2008,Tsql,Ranking Functions,我有一组基于时间的记录,需要加载到用于暂存数据的分区表中。舞台桌子是按天划分的。为了提高效率,我在SSIS中跨多个处理器流将数据负载分配到stage表中。数据暂存后,我会在加载到数据集市之前执行一系列重复数据消除操作。然而,我面临的挑战是,由于我在按日期划分的集合中使用NTILE函数,因此分段的数据在处理器之间并不是均匀地分割的 因此,我可能会看到以下5个处理器的分布 Processor 1, >= 2011-01-01 and < 2011-05-01, Rows = 200,00

我有一组基于时间的记录,需要加载到用于暂存数据的分区表中。舞台桌子是按天划分的。为了提高效率,我在SSIS中跨多个处理器流将数据负载分配到stage表中。数据暂存后,我会在加载到数据集市之前执行一系列重复数据消除操作。然而,我面临的挑战是,由于我在按日期划分的集合中使用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在今天的加载时只有6000000条,但一旦填充了整个范围,处理器4可能总共处理8000000多行记录

我的目标是根据行数在处理器之间平均分配工作,同时确保任何两个处理器不会在同一个分区日竞争

所以,作为一个视觉的分布,需要看起来像这样

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)

任何反馈都将不胜感激。

这里有一个想法,但这取决于您的重复数据消除要求。在当前的分区方案中,您要将数月的记录保存在一起。如果一天的所有记录都在同一个分区中,重复数据消除会起作用吗

如果是这样,那么您可以按天进行循环分区。不使用范围,而是将日期转换为数字,并根据mod 5分配分区。以下是一个例子:

select CAST(<thedate> as int)%5

这对于负载平衡应该更有效。

这里有一个想法,但它取决于您的重复数据消除要求。在当前的分区方案中,您要将数月的记录保存在一起。如果一天的所有记录都在同一个分区中,重复数据消除会起作用吗

如果是这样,那么您可以按天进行循环分区。不使用范围,而是将日期转换为数字,并根据mod 5分配分区。以下是一个例子:

select CAST(<thedate> as int)%5
这对于负载平衡应该会更好