SQL Server 2017 将预先存在的数据添加到时态表的实践经验

问题描述

在这些论坛中进行了搜索,发现了半相关文章“将历史数据添加到系统版本化时态表 (sql Server 2017)”和“回填时态表”,其中涵盖了技术方面,即“如何到'。我已经涵盖了那部分。我所没有的是如何维护包含 700 多个系统版本化表的环境的实践经验,这些表正在持续手动填充,以及我不知道的任何问题。如果有人在这方面有实践经验和务实的方法,并且可以给我一些关于要注意什么的具体提示,我们将不胜感激。

我们正在探索从源系统中提取的数据创建时态表的可能性,因为我们需要执行时间点报告。

可以将数据源视为具有数百个表的 CRM 解决方案,所有表的结构各不相同,其中一些表有数百个列。

数据源将信息保存在具有这样结构的表中;我们有一个 ETL 过程,它获取这些源表,确定开始和结束日期并生成中间表,以便我们可以确定某个时间点的数据;仅示例用途:

CREATE TABLE [dbo].[something]
(
    [Id] [uniqueidentifier] NULL,<<-- original column from source
    [Name] varchar(200) NULL,<<-- original column from source
    ...
    [Other columns] varchar(200) NULL,<<-- original columns from source
    ...
    [ValidFrom] [datetime2](7) NOT NULL,<<-- date/time over which the row is valid; added by ETL
    [ValidTo] [datetime2](7) NULL        <<-- date/time over which the row is valid; added by ETL
)

因此,中间表本质上与时态表具有相同的结构 - 除了它不是时态表而且我无法控制它!

我们需要报告出来,我希望我们使用时态查询而不是大量额外的代码

-- We expect to do this:
table1 join table2 on table2.whatever = table1.whatever
       join table3 on table3.whatever = table2.whatever
       join table4 on table4.whatever = table3.whatever

-- But we don't want to have to also do this which we would have to if we were querying the intermediate tables directly:
where @date_as_at between table1.[ValidFrom] and table1.[ValidTo] and
      @date_as_at between table2.[ValidFrom] and table2.[ValidTo] and
      @date_as_at between table3.[ValidFrom] and table3.[ValidTo] and
      @date_as_at between table4.[ValidFrom] and table4.[ValidTo]

因此希望将中间表放入一个非常相似的目标结构中 - 除了作为时态表。

寻找以下内容

  1. 您如何编写这些目标表的自动化/模板化维护(当您按照所需的步骤设置系统版本控制开/关并进行数据插入时,发生了什么问题(如果有),您需要注意什么)
  2. 您如何处理失败的加载 - 例如,您是否有任何提示/代码示例可以让您原位插入行,而不必从源中提取所有数据
  3. 数据加载的任何性能问题 - 例如,您是否可以在单个事务下完成这些问题,或者这是否超出了极限

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)