回填时间 table

Backfill a temporal table

去年我用的是自己的手卷 'temporal' 桌子。因此,在 2017 年 1 月,我进行了原始数据导入并执行了插入、更新和删除操作。 2017 年 2 月,我使用 2 月的原始数据文件做了同样的事情。我在 2017 年 12 月(包括 2017 年 12 月)的整个月中都这样做了。

我有用于导入的所有原始月末数据文件,现在我想废弃垃圾手卷 'temporal' 表解决方案并使用 Microsoft 提供的时态表。我的问题是我需要将计算机系统日期设置回 2017 年 1 月,执行 2017 年 1 月的 ETL,将系统日期更改为 2017 年 2 月,执行 2017 年 2 月的 ETL,将系统日期更改为 2017 年 3 月,执行 2017 年 3 月的 ETL等等等等

除了更改系统日期之外还有其他选择吗?

您无需更改服务器时间即可获得正确的时间。

过程如下所述。

  1. 首先为每个 table 创建所有历史记录 table(与使用默认历史记录 table 创建临时 table 相同的结构)。
  2. 为所有历史记录 table 创建索引(结构与使用默认历史记录 table 创建时态 table 的结构相同)。
  3. 直接填充历史 tables,包括具有所需日期时间值的 SysStartTime、SysEndTime 列
  4. 更改 tables 以启用版本控制,指定历史记录 table。

https://docs.microsoft.com/en-us/sql/relational-databases/tables/creating-a-system-versioned-temporal-table

(参见将 Non-Temporal Table 更改为 System-Versioned 临时 Table 段落)

或者,您可以:

  1. 删除并重新创建启用版本控制的所有 tables (指定您自己的 (non-default) 历史记录 tables).
  2. 运行 ETL
  3. 暂时停止版本控制
  4. 更新历史 tables 以获得 SysStartTime/SysEndTime
  5. 的正确值
  6. Re-enable 版本控制 (指定现有历史记录 tables)