数据仓库GUID转换为Int PrimaryKeys

时间:2018-07-18 05:34:41

标签: sql-server data-warehouse

我是一名(非常)初级分析师,负责设置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友好的方式描述答案。

1 个答案:

答案 0 :(得分:0)

  1. 是否删除GUID是可能缩小到90mb的主要原因?您不需要GUID来处理报告吗?
  2. 创建暂存表时,是否剥离关系并将几乎所有表联接到尽可能少的表中?

如果对数字1和2的回答为是,那么您就不需要GUID,而只需要具有一个int唯一列。

我建议在创建/插入登台表期间的select命令中,使用ROW_NUMBER用int unique列替换GUID列。仅当您每次运行SSIS脚本时都重新创建登台表时,这才起作用。

如果在运行SSIS脚本时仅将数据插入到已经存在的暂存表中,则可以仅创建autoincrement primary column。在将数据插入到暂存表中时,请勿插入到自动增量主列中,这样该列会自动生成唯一的int值。