我有一个包含 80 个字段以北的患者表,其中我需要保留所有字段的历史数据。为澄清起见,并非所有字段都“需要”版本控制,尽管决定简单地保留旧记录的完整副本。
为澄清起见,这是针对 ETL 流程,该流程将在非工作时间进行。
这里似乎有一些方法,虽然我不知道哪种方法最适合我,因为我以前没有这样做过。
选项 1:将 SSIS 用于 SCD 实施。
优点:由于我们无论如何都在使用 SSIS 来获取数据,所以继续使用相同的工具是有意义的
缺点:我已经阅读了一些关于 SSIS 中 SCD 性能的文章 - 例如:https ://chrisjarrintaylor.co .uk/2012/07/03/ssis-scd-vs-merge-statement-performance-comparison/
选项 2:MERGE
在 tsql 语句中使用。
优点:编写简短,易于理解 - 一个步骤完成所有步骤 缺点
:如果我们尝试在 80 多个字段上编写条件,可能会很麻烦。我们也可能OR
在这么多字段上执行性能问题(如在,如果有的话)
下面的方法对我有用,虽然这样写,但意味着一个很长的合并语句:需要帮助理解 scd 的替代方案在SSIS
选项 3:INSERT
所有新记录,使用 CTE 清理重复项(那些没有更改的记录),UPDATE
停用那些更改的记录的声明
Pro:没有杂乱OR
的声明,不太难写或理解 - 性能不会似乎这将是一个问题(我们过去使用过 CTE 方法)
Con:不知何故,这是一种非常笨拙的方法
考虑到这些方法或您可能拥有的其他方法,是否有一种更易于维护、扩展性更好的方法?
小数据样本 - 源数据中有 80 多列(我无法控制)和更多行:http ://rextester.com/live/AYQUT28070