GUID хранилища данных для Int PrimaryKeys

Я (очень) младший аналитик, отвечающий за настройку 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 форме.

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

MatBailie 18.07.2018 09:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
222
1

Ответы 1

  1. Является ли удаление GUID основной причиной возможного сжатия до 90 МБ? Вам не нужен GUID для обработки отчета?
  2. Вы удаляете отношения и объединяете почти всю таблицу в как можно меньшее количество таблиц при создании промежуточной таблицы?

Если ответ на номера 1 и 2 положительный, тогда вам не нужен GUID, и вам просто нужно иметь уникальный столбец int.

Я предлагаю в команде выбора во время создания / вставки промежуточной таблицы использовать ROW_NUMBER для замены столбца GUID уникальным столбцом int. Это сработает только в том случае, если вы воссоздаете промежуточную таблицу каждый раз при запуске сценария SSIS.

Если вы просто вставляете данные в уже существующую промежуточную таблицу при запуске сценария SSIS, вы можете просто создать основной столбец автоинкремента. Когда вы вставляете данные в промежуточную таблицу, не вставляйте их в первичный столбец с автоинкрементом, чтобы столбец автоматически генерировал уникальное значение типа int.

Другие вопросы по теме