Я (очень) младший аналитик, отвечающий за настройку mssql DWH, в котором хранятся данные из нашей CRM для целей отчетности.
Текущая CRM использует уникальные идентификаторы в своей базе данных mssql для всех ключей, а в некоторых таблицах содержится более 8 миллионов строк. В нашем программном обеспечении для отчетов (Qlikview) я могу поменять идентификаторы GUID на int и уменьшить размер файла данных 800 МБ до 90 МБ, что отлично, однако я хотел бы выполнить эту логику в DWH, если это возможно, чтобы сделать его быстрее и немного чище.
Моя проблема в том, что я понятия не имею, как это сделать, сохраняя ссылки FK на другие таблицы. Я рассматривал возможность поддержки промежуточной таблицы идентификаторов GUID и связанных числовых идентификаторов, однако это кажется неэффективным и создает проблему, связанную с попыткой записи произвольного числового идентификатора в столбец PK целевой таблицы, что, я уверен, является ужасной идеей.
Импорт DWH работает следующим образом: у меня есть USP на исходной базе данных, выполняющие SELECT, которые выполняются пакетом SSIS, выходные данные которого помещаются в таблицы с тем же именем в схеме [Staging] DWH. Оттуда преобразование выполняется USP в DWH, также выполняется тем же пакетом SSIS, который обрабатывает порядок выполнения и многопоточность. Какую бы реализацию я ни придумал, она должна быть совместима с этой архитектурой (реализованной в рамках УТП, которые потенциально могут работать асинхронно).
Я в большой степени новичок в SQL, поэтому прошу при необходимости связать документацию или, по крайней мере, описать ответы в удобной для Google форме.





Если ответ на номера 1 и 2 положительный, тогда вам не нужен GUID, и вам просто нужно иметь уникальный столбец int.
Я предлагаю в команде выбора во время создания / вставки промежуточной таблицы использовать ROW_NUMBER для замены столбца GUID уникальным столбцом int. Это сработает только в том случае, если вы воссоздаете промежуточную таблицу каждый раз при запуске сценария SSIS.
Если вы просто вставляете данные в уже существующую промежуточную таблицу при запуске сценария SSIS, вы можете просто создать основной столбец автоинкремента. Когда вы вставляете данные в промежуточную таблицу, не вставляйте их в первичный столбец с автоинкрементом, чтобы столбец автоматически генерировал уникальное значение типа int.
Поскольку вы собираетесь многократно переводить из GUID в INT (при каждой загрузке в DWH), вам нужно где-то хранить GUID (вы не можете их отбрасывать, на них будут ссылаться будущие данные). Я рекомендую хранить их в таблице, для которой они являются PK, а также иметь столбец с целочисленным автоинкрементом (суррогатный ключ), который будет действовать как PK в вашем DWH. Затем, когда вы загружаете данные, которые используют GUID в качестве внешнего ключа, выполните соединение, чтобы найти целочисленный суррогатный ключ и использовать его вместо этого. Наконец, при загрузке данных в QlikView просто не включайте столбцы guid.