我正在尝试找出将一系列表展平为一个大平面表的最佳方法,以创建单个摘录(由于业务原因,它必须是一个最终表)
我们有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个表。我对此想法进行了一些尝试,必须创建第二个表才能一次实现一个表,例如:
我的最终想法是简单地使用TSQL脚本,并以系统表的初始INSERT作为基础直接写入平面表,然后使用UPDATE函数逐一写入其他14个表中的所有列。
我知道TSQL具有MERGE语句,但是从online的角度来看,从性能角度考虑,最好还是使用INSERT / UPDATE。
无论如何,我希望我已经充分解释了我的问题,如果还有其他需要补充/解释的地方,请告诉我。
编辑:我们正在使用SQL Server / SSIS 2016
答案 0 :(得分:1)
我最后的想法是只使用TSQL脚本并直接写到 使用系统表的初始INSERT作为基础的平面表 然后使用UPDATE函数从中写入所有列 其他14张桌子一张一张。
考虑到所涉及表的大小,这是我要使用的方法。 Be sure to do your UPDATEs in batches,而不是一次所有行。