Рекомендуется заполнять таблицы фактов и измерений из транзакционной плоской БД


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

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

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

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

Спасибо, alexl

3 5

3 ответа:

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

Предположим, что ваша таблица элементов имеет столбцы следующим образом: 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.

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

Я часто строю кубы для операционных хранилищ данных вместо звездных схем.. Производительность почти всегда будет лучше с помощью звездной схемы, но для прототипирования / тестирования не бойтесь разрабатывать Кубы на основе данных, которые у вас не являются звездной схемой, которую вы хотите.