将关系 table 扁平化为单个平面 table

Flattening relational tables into a single flat table

我正在尝试找出将一系列 table 拼合成一个大平面 table 的最佳方法,以便创建单个提取物(出于商业原因,它必须成为单曲决赛table)

我们有 15 个 table 大约有 2500 万条记录,每条记录总共有近 200 列需要合并为一个 table。谢天谢地,这是一次性任务。

我相信我们在数据仓库方面有一个星型模式,其中有一个主系统 table 保存每条记录一次的业务 Record_ID,然后是其余的 table 是一个混合体,一些仅持有一个企业 Record_ID 一次,而其他人将持有一个企业 Record_ID 多次。在具有多个业务 Record_ID 的 table 中,为了使它们变平,我们决定在 2012 年 4 月 10 日进行前 4 次重复(取决于 table 是哪个)并且将它们旋转成列。不幸的是,这意味着最终 table 有 500 列需要填充。

现在我的第一个尝试是围绕内部联接创建一个视图,并将所有这些 table 与业务 Record_ID 上的主系统 table 结合起来。然而,这被证明是非常耗费资源的,5 小时后 DBA 将其终止。事实证明,尝试在 15 table 内连接每个 2500 万条记录(以及旋转其中一些记录)是非常非常糟糕的。

接下来我转向 SSIS,并考虑使用 MERGE JOIN 转换,但它一次只适用于 2 tables。我试了一下这个想法,我必须创建第二个 table 来一次实现这个 table,比如:

  1. TBL1 + TBL2 ---合并连接---> FLAT_TABLE_1
  2. FLAT_TABLE_1 + TBL3 ---合并连接---> FLAT_TABLE_2
  3. 截断 FLAT_TABLE_1
  4. FLAT_TABLE_2 + TBL4 ---合并连接---> FLAT_TABLE_1
  5. 截断 FLAT_TABLE_2
  6. FLAT_TABLE_1 + TBL5 ---合并连接---> FLAT_TABLE_2

我最后的想法是简单地使用 TSQL 脚本并使用系统 table 的初始 INSERT 作为基础直接写入平面 table 然后使用 UPDATE函数将其他 14 table 中的所有列一一写入。

我知道 TSQL 有 MERGE 语句,但看过 online,性能方面最好还是使用 INSERT/UPDATEs.

无论如何,我希望我已经充分解释了我的问题,如果还有什么需要add/explain请告诉我。

编辑:我们使用 SQL Server/SSIS 2016

My final thought was to simply use TSQL scripts and write directly to the flat table using an initial INSERT of the system table as the base and then using the UPDATE function to write all the columns from the other 14 tables one by one.

考虑到涉及的表的大小,这是我会使用的方法。 ,而不是一次所有行。