Лучшие практики для заполнения таблиц фактов и измерений из транзакционной плоской базы данных - PullRequest
5 голосов
/ 21 марта 2010

Я хочу заполнить звездную схему / куб в SSIS / SSAS.

Я подготовил все свои таблицы измерений и свою таблицу фактов, первичные ключи и т.д.'(уровень предмета) таблица, и теперь моя проблема в том, как разделить ее и получить из одной в соответствующие таблицы.

Я немного погуглил, но не смог найти удовлетворительного решения проблемы.Можно было бы предположить, что это довольно распространенная проблема / ситуация в разработке BI?!

Спасибо, alexl

Ответы [ 3 ]

9 голосов
/ 22 марта 2010

Для начала, это зависит от того, хотите ли вы выполнить простую начальную передачу данных или что-то более сложное (например, инкрементное).Я собираюсь предположить, что вы делаете начальную передачу данных.

Скажем, ваша таблица элементов имеет столбцы следующим образом: id, cat1, cat2, cat3, cat4, ... Предполагая, что категории 1-4 имеют столбцы id, cat_name, вы можете загрузить dim_cat1 (Таблица измерений для категории элементов 1) выглядит следующим образом:

insert into dim_cat1 (cat_name)
  select distinct cat1 from item_table;

Вы можете сделать то же самое для всех других категорий / таблиц измерений.Я предполагаю, что ваши таблицы измерений автоматически сгенерировали идентификаторы.Теперь, чтобы загрузить таблицу фактов:

insert into fact_table (id, cat1_id, cat2_id, cat3_id, cat4_id, ...)
  select id, dc1.id
    from item_table it
      join dim_cat1 dc1 on dc1.cat_name = it.cat1
      join dim_cat2 dc2 on dc2.cat_name = it.cat2
      join dim_cat3 dc3 on dc3.cat_name = it.cat3
      join dim_cat4 dc3 on dc4.cat_name = it.cat4
 ...

Если у вас есть значительный объем данных, возможно, имеет смысл создать индексы для имен категорий в item_table и, возможно, таблиц измерений.

Между прочим, это независимый от базы данных ответ, я не работаю с SSIS / SSAS: у вас могут быть инструменты, которые оптимизируют части этого процесса для вас, но на самом деле не так сложно / долго писать в простом SQL.

3 голосов
/ 24 марта 2010

Мы делаем это, используя задачу потока данных, чтобы скопировать информацию со времени последнего выполнения пакета во временные промежуточные таблицы, затем обновить архив / хранилище данными из этих промежуточных таблиц на основе ключа, а затем вставить те строки, которые не пока не существует. Обрежьте промежуточную таблицу, готовую к следующему разу, добавьте нагрузку аудита. Работа выполнена?

0 голосов
/ 16 ноября 2012

Я часто строю кубы на основе оперативных хранилищ данных вместо схем типа «звезда». Производительность почти всегда будет лучше при использовании схемы «звезда», но для создания прототипов и тестирования не бойтесь разрабатывать кубы на основе данных, которые вы не имеетесхема, которую вы ХОТИТЕ.

...