0

我有一个包含 80 个字段以北的患者表,其中我需要保留所有字段的历史数据。为澄清起见,并非所有字段都“需要”版本控制,尽管决定简单地保留旧记录的完整副本。

为澄清起见,这是针对 ETL 流程,该流程将在非工作时间进行。

这里似乎有一些方法,虽然我不知道哪种方法最适合我,因为我以前没有这样做过。

选项 1:将 SSIS 用于 SCD 实施。
优点:由于我们无论如何都在使用 SSIS 来获取数据,所以继续使用相同的工具是有意义的
缺点:我已经阅读了一些关于 SSIS 中 SCD 性能的文章 - 例如:https ://chrisjarrintaylor.co .uk/2012/07/03/ssis-scd-vs-merge-statement-performance-comparison/

选项 2MERGE在 tsql 语句中使用。
优点:编写简短,易于理解 - 一个步骤完成所有步骤 缺点
:如果我们尝试在 80 多个字段上编写条件,可能会很麻烦。我们也可能OR在这么多字段上执行性能问题(如在,如果有的话)
下面的方法对我有用,虽然这样写,但意味着一个很长的合并语句:需要帮助理解 scd 的替代方案在SSIS

选项 3INSERT所有新记录,使用 CTE 清理重复项(那些没有更改的记录),UPDATE停用那些更改的记录的声明
Pro:没有杂乱OR的声明,不太难写或理解 - 性能不会似乎这将是一个问题(我们过去使用过 CTE 方法)
Con:不知何故,这是一种非常笨拙的方法

考虑到这些方法或您可能拥有的其他方法,是否有一种更易于维护、扩展性更好的方法?

小数据样本 - 源数据中有 80 多列(我无法控制)和更多行:http ://rextester.com/live/AYQUT28070

4

0 回答 0