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 在今天加载时只有 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)

任何反馈将不胜感激。

4

1 回答 1

0

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

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

select CAST(<thedate> as int)%5

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

于 2012-03-27T13:46:38.770 回答