我们正在处理大量的流程记录。我们现在正在使用NTILE函数进行批处理过程。
请查看附图图示例。
我们正在使用当前的NTILE函数来制作范围,然后使用其中的ID列进行处理。
根据新要求,我们必须根据“大小”列制作范围。每批100 GB。
例如:
Batch 1 : 1 has 100 size So ID: 1 record only.
Batch 2 : 2,3,4,5 (Total 100 GB)
Batch 3 : 6 ID has > 100 so 1 record only
etc.
请查看随附的屏幕截图以了解更多信息。
我的发现但没有给出确切的解决方案:
DECLARE @intBatchSize BIGINT = 100;
SELECT y.ID, y.FileSize, y.RunningTotal
,DENSE_RANK() OVER (ORDER BY (y.RunningTotal / @intBatchSize) + 1) batch
FROM (SELECT i.ID, i.FileSize
,RunningTotal = SUM(i.Size) OVER (ORDER BY i.ID) -- RANGE UNBOUNDED PRECEDING)
FROM dbo.Table1 AS i WITH (NOLOCK)
) y
ORDER BY y.ID;