我有一张可能有数十亿条记录的表格。要求是将表中一组记录的某些字段设置为先前的值,直到该值更改,然后将该值替换为新值。
请考虑以下内容作为从原始来源检索的记录的示例:
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
关
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
关
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包任务,还有哪些其他可能的替代方案?我愿意接受任何合理的建议。
由于
答案 0 :(得分:1)
假设您可以保证insert的顺序,我会将数据插入到一个临时表中,该表具有一个标识和一个父id的列(启动空值)。然后我将在SSIS中使用执行SQL任务来转换数据(首先设置父id值(因此每个相关任务都有一列告诉它组中的第一个任务)使变换更简单)。在转储表中转换数据之后,我会从登台表到最终表执行简单的数据流。但是,如果有机会查看csv以添加一个列来将记录组合在一起,我会坚持认为,迟早其中一些会出现故障。