首页 > 解决方案 > 数据仓库 GUID 到 Int PrimaryKeys

问题描述

我是一名(非常)初级分析师,负责设置一个 mssql DWH,该 DWH 托管来自我们 CRM 的数据以用于报告目的。

当前的 CRM 在其 mssql 数据库中为所有键使用唯一标识符,并且一些表有 8m+ 行。在我们的报告软件 (Qlikview) 中,我可以将 GUID 换成整数,并将 800mb 的数据文件缩小到 90mb,这非常好,但是如果可能的话,我想在 DWH 中执行这个逻辑,以使其更快更简洁。

我的问题是我不知道如何在维护与其他表的 FK 链接的同时这样做。我考虑过维护一个包含 GUID 和相关数字 ID 的临时表,但这似乎效率低下,并且会产生一个问题,即尝试将一些任意数字 ID 写入目标表的 PK 列,我确信这是一个糟糕的主意。

DWH 导入的工作方式如下:我在源数据库上有 USP 执行由 SSIS 包执行的 SELECT,其输出放置在 DWH 的 [Staging] 架构上的同名表中。从那里,USP 在 DWH 上执行转换,也由处理执行顺序和多线程的同一个 SSIS 包执行。无论我想出什么实现都需要与这个架构兼容(在可能异步运行的 USP 中完成)。

我是一个 SQL 菜鸟,所以我确实要求在必要时链接文档,或者至少以谷歌友好的方式描述答案。

标签: sql-serverdata-warehouse

解决方案


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

如果对数字 1 和 2 的回答是肯定的,那么您不需要 GUID,只需要一个 int 唯一列。

我建议在创建/插入临时表期间的 select 命令中使用ROW_NUMBER将 GUID 列替换为 int 唯一列。这只有在每次运行 SSIS 脚本时都重新创建临时表时才有效。

如果您只是在运行 SSIS 脚本时将数据插入到已经存在的暂存表中,那么您只需创建一个自动增量主列。将数据插入到临时表时,不要插入到自动增量主列,以便该列自动生成唯一的 int 值。


推荐阅读