问题
我们很多年来都日常加载数据仓库,每次加载的都是真实记录。我们想批处理地执行这个过程并能够在发生错误的情况下重启失败时间点。你能够为我们提供一个例子介绍下我们该怎样在一个SSIS包中执行这个批处理功能吗?
专家解答
SSIS使用Toolbox中的现有组件能够很好地支持批处理。在SSIS中执行批处理的一个很简便的方法是将记录分组放到批处理中,处理每个批处理,然后将每个组更新为处理过的。首先让我们描绘一个场景然后执行一个SSIS包来完成这个工作。
在开发报表应用程序中,一个很常见的需求是聚合数据使得报表查询可以快速地执行。让我们假设我们想要按月份聚合数据。我们还想具有能够调整聚合数据并只重新计算调整过的按月聚合的能力。
我们可以假设一个SSIS包具有以下步骤:
Get Batch List(获得批处理列表)是一个Execute SQL任务,它将源数据分组在批处理中执行,创建一个每个批处理中包含一个单独记录的结果集。
Process Batch Loop(执行批处理循环)是一个Foreach Loop容器,它迭代这个结果集记录;例如,这个结果集中的每条记录执行一次。
Transaction Container(事务容器)是一个序列容器,它包含这个循环的每个迭代要执行的任务;它控制事务,如果成功就提交,如果失败就回滚。
Append Batch to Sales History(附加批处理到销售历史)是一个Execute SQL任务,它提取一批记录并将它们插入到一个历史表中。
Compute Aggregation(计算聚合)是一个Execute SQL任务,它对这个批处理执行聚合并更新聚合表。
Mark Batch as Processed(将批处理标记为处理过的)是一个Execute SQL任务,它更新源表中的记录以显示它们已经处理过了。
在下面的章节中,我们将详细讨论SSIS包中的每个步骤。从建立开始,然后逐步介绍。