Как добавить столбец в таблицу фактов "после" того, как он уже развернут и заполнен?
У меня есть схема SQL Server 2005 data-mart star с обычными таблицами фактов и измерений. Он развертывается и заполняется с помощью пакета ETL на основе SSIS. Все отлично до сих пор.
Ко мне только что обратился клиент с новым требованием. Никогда, я слышу, как ты говоришь! Это требование будет означать, что мне нужно добавить новую таблицу измерений в data-mart, чтобы измерить новый аспект входящих фактов, которые оказываются финансовыми.
Чтобы иметь возможность "нарезать" факты этим новым измерение мне нужно добавить новый столбец внешнего ключа в таблицу фактов, связанную с новым измерением.
Я не знаю, как лучше всего это сделать. Что мне делать с данными, которые уже были захвачены? Просто сделайте новый столбец null-способным и примите, что старый факт будет иметь NULL? На самом деле, пока я печатаю, до меня дошло, что я могу обновить и старые факты. Или, может быть, мне следует создать отдельного (ребенка?) таблица фактов, которая будет содержать только ссылку на каждый новый (родительский) факт и ссылку в новое измерение.
Я не смог найти никакой информации о наилучшей практике для такого типа изменений.
Любая помощь будет очень признательна.
Кстати. Службы анализа еще не использовались.
Спасибо, Мартин
3 ответа:
Добавьте новую таблицу измерений.
Заселите его.
Добавьте нулевую ссылку на существующие факты.
Не все факты могут быть присоединены к новому измерению. Это часто происходит, когда у вас есть новая информация. Если у вас есть все ваши исходные файлы, вы можете иметь всю информацию, необходимую для обновления всех фактов.Если все факты не могут быть сопоставлены с новым измерением, добавьте в измерение строку "N/A". Иногда для этого есть веская причина. имейте несколько строк N/A в зависимости от того, что вы знаете о ваших фактах.
Обновите факты, чтобы все они ссылались на новое измерение - либо на правильное значение измерения, либо на специальную строку N/A.
В идеале, вы измените таблицу фактов, чтобы сделать столбец not-nullable. Иногда это занимает мучительно много времени, и проще экспортировать данные, переопределить таблицу и перезагрузить данные.
Лот ответил на большинство из них, я бы только добавил, что то, что делать со старыми фактами, - это бизнес-решение. Обязательно спросите их и получите это в письменном виде.
У S. Lott есть отличный ответ, если вы объедините это с вашим предложением "дочерней" таблицы фактов, вы можете иметь другую таблицу фактов в качестве "мостовой таблицы" с новым измерением и всеми другими такими же измерениями, но подумайте об этом - если вы собираетесь в эту проблему, вы можете просто сделать новый дизайн таблицы фактов идентичным старому, но с ненулевым новым измерением (единственным расходом по вашей мостовой таблице будет пространство фактов в любом случае). Правильно заполнить историю в новую таблицу-привязка либо к действительному измерению, либо к измерению N/A для истории, как предложил С. Лотт. Затем начните заполнять новые данные. Вам никогда не придется возвращаться и менять nullable на non-nullable. Затем вы можете просто отказаться от старой таблицы фактов - или поменять местами представления слоя презентации (если они у вас есть, это дает вам большую свободу действий с вашими фактами и измерениями).