将关系表展平为单个展平表

时间:2018-11-21 10:57:35

标签: sql tsql ssis sql-server-2016 data-warehouse

我正在尝试找出将一系列表展平为一个大平面表的最佳方法,以创建单个摘录(由于业务原因,它必须是一个最终表)

我们有15个表,这些表具有大约2500万条记录,每个表中总共有近200列需要合并到一个表中。幸运的是,这是一项一次性任务。

我相信我们在数据仓库方面具有星型架构,其中有一个主系统表,其中每个记录与一个业务Record_ID一起保存一次,然后其余表混合在一起,有些表仅对每个Business Record_ID进行一次保存,而其他人将多次持有Business Record_ID。在具有多个Business Record_ID的表中,为了展平它们,我们决定采用前4/10/12重复(取决于它是哪个表)并将它们旋转到列中。不幸的是,这意味着最终表有500列需要填充。

现在,我的第一个尝试是围绕内部联接创建一个视图,并将所有这些表与Business Record_ID上的主系统表合并。但是,事实证明这非常耗费资源,DBA在5小时后将其杀死。事实证明,尝试内部联接15个表(每个表具有2500万条记录)(以及对其中一些表进行透视)是非常糟糕的。

我接下来转向SSIS,也许使用了MERGE JOIN转换进行了研究,但实际上一次只能处理2个表。我对此想法进行了一些尝试,必须创建第二个表才能一次实现一个表,例如:

  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脚本,并以系统表的初始INSERT作为基础直接写入平面表,然后使用UPDATE函数逐一写入其他14个表中的所有列。

我知道TSQL具有MERGE语句,但是从online的角度来看,从性能角度考虑,最好还是使用INSERT / UPDATE。

无论如何,我希望我已经充分解释了我的问题,如果还有其他需要补充/解释的地方,请告诉我。

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

1 个答案:

答案 0 :(得分:1)

  

我最后的想法是只使用TSQL脚本并直接写到   使用系统表的初始INSERT作为基础的平面表   然后使用UPDATE函数从中写入所有列   其他14张桌子一张一张。

考虑到所涉及表的大小,这是我要使用的方法。 Be sure to do your UPDATEs in batches,而不是一次所有行。