Как добавить столбец в таблицу фактов "после" того, как он уже развернут и заполнен?


У меня есть схема SQL Server 2005 data-mart star с обычными таблицами фактов и измерений. Он развертывается и заполняется с помощью пакета ETL на основе SSIS. Все отлично до сих пор.

Ко мне только что обратился клиент с новым требованием. Никогда, я слышу, как ты говоришь! Это требование будет означать, что мне нужно добавить новую таблицу измерений в data-mart, чтобы измерить новый аспект входящих фактов, которые оказываются финансовыми.

Чтобы иметь возможность "нарезать" факты этим новым измерение мне нужно добавить новый столбец внешнего ключа в таблицу фактов, связанную с новым измерением.

Я не знаю, как лучше всего это сделать. Что мне делать с данными, которые уже были захвачены? Просто сделайте новый столбец null-способным и примите, что старый факт будет иметь NULL? На самом деле, пока я печатаю, до меня дошло, что я могу обновить и старые факты. Или, может быть, мне следует создать отдельного (ребенка?) таблица фактов, которая будет содержать только ссылку на каждый новый (родительский) факт и ссылку в новое измерение.

Я не смог найти никакой информации о наилучшей практике для такого типа изменений.

Любая помощь будет очень признательна.

Кстати. Службы анализа еще не использовались.

Спасибо, Мартин

3 3

3 ответа:

  1. Добавьте новую таблицу измерений.

  2. Заселите его.

  3. Добавьте нулевую ссылку на существующие факты.

    Не все факты могут быть присоединены к новому измерению. Это часто происходит, когда у вас есть новая информация. Если у вас есть все ваши исходные файлы, вы можете иметь всю информацию, необходимую для обновления всех фактов.

    Если все факты не могут быть сопоставлены с новым измерением, добавьте в измерение строку "N/A". Иногда для этого есть веская причина. имейте несколько строк N/A в зависимости от того, что вы знаете о ваших фактах.

  4. Обновите факты, чтобы все они ссылались на новое измерение - либо на правильное значение измерения, либо на специальную строку N/A.

В идеале, вы измените таблицу фактов, чтобы сделать столбец not-nullable. Иногда это занимает мучительно много времени, и проще экспортировать данные, переопределить таблицу и перезагрузить данные.

Лот ответил на большинство из них, я бы только добавил, что то, что делать со старыми фактами, - это бизнес-решение. Обязательно спросите их и получите это в письменном виде.

У S. Lott есть отличный ответ, если вы объедините это с вашим предложением "дочерней" таблицы фактов, вы можете иметь другую таблицу фактов в качестве "мостовой таблицы" с новым измерением и всеми другими такими же измерениями, но подумайте об этом - если вы собираетесь в эту проблему, вы можете просто сделать новый дизайн таблицы фактов идентичным старому, но с ненулевым новым измерением (единственным расходом по вашей мостовой таблице будет пространство фактов в любом случае). Правильно заполнить историю в новую таблицу-привязка либо к действительному измерению, либо к измерению N/A для истории, как предложил С. Лотт. Затем начните заполнять новые данные. Вам никогда не придется возвращаться и менять nullable на non-nullable. Затем вы можете просто отказаться от старой таблицы фактов - или поменять местами представления слоя презентации (если они у вас есть, это дает вам большую свободу действий с вашими фактами и измерениями).