0

我有一张可能有数十亿条记录的表。要求是将表中一组记录的某些字段设置为以前的值,直到该值更改,然后用新值替换以前的值。

考虑以下作为从原始来源检索的记录的示例:

EventSeqNo EventDesc DescId Desc2Id Desc3Id Desc4Id Desc5Id
1 EventOne 1 102 1 1 1
2 EventTwo 2862 1 1 1 131
3 EventThree 1 1 1 1 1
6 关闭 1 102 1 102 1
1 EventOne 1 105 1 1 1
2 EventTwo 2873 1 1 1 131
3 EventThree 1 101 106 1 1
6 Close 1 1 1 102 1

插入决赛桌后所需的输出为:

EventSeqNo EventDesc DescId Desc2Id Desc3Id Desc4Id Desc5Id
1 EventOne 1 102 1 1 1
2 EventTwo 2862 102 1 1 131
3 EventThree 2862 102 1 1 131
6 Close 2862 102 1 102 131
1 EventOne 1 105 1 1 1
2 EventTwo 2873 105 1 1 131
3 EventThree 2873 101 106 1 131
6 关闭 2873 101 106 102 131

如您所见,每个字段都应获取前一个字段记录的值,除非它的值为 1。此外,重复此规则的记录范围被分组,范围从 1 到 6 作为事件值。

是否有一个 SSIS 组件可以在初始记录插入期间以最小的复杂性优雅地完成此任务,而不是在填充后对表执行复杂的 SQL 更新?

有人建议我缓存转换任务可能是解决方案,但在阅读了如何实现它之后,它似乎不是解决问题的合适解决方案。

如果没有任何 SSIS 包任务可以作为解决方案,还有哪些其他可能的替代方案?我愿意接受任何合理的建议。

谢谢

4

1 回答 1

1

假设您可以保证插入的顺序,我会将数据插入到一个临时表中,该表具有一个身份和一个父 ID 列(以空值开始)。然后我会在 SSIS 中使用 Execute SQL 任务来转换数据(首先设置父 id 值(因此每个相关任务都有一个列告诉它组中的第一个任务),使其更容易进行转换)。在对暂存表中的数据进行转换后,我会做一个从暂存表到最终表的简单数据流。但是,如果有任何机会更改 csv 以添加一列将记录分组在一起,我会坚持这一点,否则其中一些迟早会出现故障。

于 2012-09-11T18:13:44.963 回答