我是一名(非常)初级分析师,负责设置mssql DWH,该主机托管来自CRM的数据以进行报告。
当前的CRM在其mssql数据库中为所有键使用uniqueidentifiers,并且某些表有8m +行。在我们的报告软件(Qlikview)中,我可以将GUID交换为整数,然后将800mb的数据文件减小到90mb,这非常好,但是我希望在DWH中执行此逻辑,以使其更快,更干净。
我的问题是我不知道如何维护FK到其他表的链接。我曾经考虑过维护一个GUID和关联数字ID的临时表,但是这似乎效率低下,并提出了一个问题,那就是尝试将一些任意数字ID写入目标表的PK列,我确信这是一个糟糕的主意。 >
DWH导入的工作方式如下:我在源db上有USP执行SELECT,这些SELECT由SSIS包执行,其输出放在DWH的[Staging]模式上同名的表中。从那里,变换由DWH上的USP执行,也由相同的SSIS包执行,该SSIS包处理执行顺序和多线程。无论我想出什么实现方式,都需要与该架构兼容(在可能异步运行的USP中完成)。
我非常喜欢使用SQL,所以我确实要求在必要时链接文档,或者至少以Google友好的方式描述答案。
答案 0 :(得分:0)
如果对数字1和2的回答为是,那么您就不需要GUID,而只需要具有一个int唯一列。
我建议在创建/插入登台表期间的select命令中,使用ROW_NUMBER用int unique列替换GUID列。仅当您每次运行SSIS脚本时都重新创建登台表时,这才起作用。
如果在运行SSIS脚本时仅将数据插入到已经存在的暂存表中,则可以仅创建autoincrement primary column。在将数据插入到暂存表中时,请勿插入到自动增量主列中,这样该列会自动生成唯一的int值。