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

时间:2012-03-18 04:54:19

标签: sql-server-2008 tsql ranking-functions

我有一组基于时间的记录,我需要将其加载到用于登台数据的分区表中。阶段表按天分区。为了提高效率,我已将数据负载分配到多个“处理器”(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在今天加载时仅有6,000,000,但一旦填充了整个范围,处理器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)

非常感谢任何反馈。

1 个答案:

答案 0 :(得分:0)

这是一个想法,但这取决于您的重复数据删除要求。在您当前的分区方案中,您将数月的记录保存在一起。如果一天的所有记录都在同一个地方,那么重复数据删除是否会有效?

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

select CAST(<thedate> as int)%5

这对于负载平衡应该更好。