【问题标题】:How to deal with data structure changes when performing a full historical data load?执行完整的历史数据加载时如何处理数据结构的变化?
【发布时间】:2021-12-31 08:45:29
【问题描述】:

我正在处理一个 SQL Server 数据库,其中包含一个“定义的数据”列,其中包含 JSON 数据(以及其他一些简单的列)。数据随着时间的推移而积累,现在我们有大约 800 万行。

来自此数据库的数据由 ETL 系统定期读取,然后读取“已定义数据”列中的 JSON 数据,并根据 JSON 数据中包含的列名将数据映射到新的 SQL Server 表。

此 SQL Server 表容易更改,这意味着大约每 4 个月需要额外的列或列名更改。每当这个 SQL Server 表改变它的数据结构时,就会引入一个新版本,这也迫使 JSON 数据结构改变。

但是,ETL 系统应该仍然能够从 SQL Server 数据库中加载所有历史 (JSON) 数据,而不管版本一直在变化。考虑到 SQL Server 表和 JSON 数据的版本更改,我如何才能完成这项工作?

!example]1

所以在这个例子中我的问题是:

我如何确保我可以将客户端 20 和 21 加载到 一个 SQL Server 表中而不会出错,因为 JSON 数据结构在历史数据的情况下不反映版本 2? p>

鉴于 SQL Server 数据库的大小,根据最新版本更新所有历史 JSON 数据似乎不是一个选项(在此示例中,这意味着为 01-01-2021 数据添加“AssetType”并用NULL填充)。

提前非常感谢!

【问题讨论】:

    标签: sql json sql-server


    【解决方案1】:

    首先,我将通过在信息模式中查找 json 字段作为列名来检查表中是否存在它们。如果不存在,则更改表添加列。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    我如何确保我可以将客户端 20 和 21 加载到一个 SQL Server 表中而不会出现错误,因为 JSON 数据结构在历史数据的情况下不反映版本 2?

    您维护 2 个单独的表。与源具有相同架构的 Raw/Staging/Bronze 表,以及具有报告所需架构的 Cleansed/Warehouse/Silver 表。如果您有多个单独的来源,则可能有单独的 Raw 表。

    您会定期增强 Cleansed 表的架构,以添加已出现在 Raw 表中的新数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多