О суррогатном ключе в процессе загрузки в хранилище данных - PullRequest
0 голосов
/ 16 ноября 2018

Когда вы выполняете процесс загрузки из таблицы этапов в таблицу фактов и измерений и означает ли это, что вы также загружаете суррогатный ключ из этапа в таблицу измерений в отношении новых строк?

Или вы создаете новый суррогатный ключ в таблице измерений, используя SQL-код Identity для таблицы? (https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql-identity-property?view=sql-server-2017)?

Какой подход правильный?

Другая информация:
* Я новичок в ETL и бизнес-аналитике
* Я использую только T-SQL, но не SSIS.

Спасибо!

1 Ответ

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

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

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

Обычно элементы измерения загружаются в таблицу измерений перед загрузкойданные в таблицу фактов.Просто так проще сделать, если это вообще возможно.Шаги, которые я бы использовал в следующем порядке:

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

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

create table #factstaging
(
    dimension1Value nvarchar(20),
    factmeasure1 int,
    factmeasure2 int
)
create table #dimension1
(
    ID int identity(1,1),
    dimension1Value nvarchar(20)
)
insert into #dimension1
values
('d1 value 1'),
('d1 value 2'),
('d1 value 3')

insert into #factstaging
values
('d1 value 1',22,44),
('d1 value 1',22,44),
('d1 value 2',22,44),
('d1 value 3',22,44)

--contents of stored procedure to insert fact rows
select d1.ID as Dimension1SurrogateKey, s.factmeasure1,s.factmeasure2
from #factStaging s
join #dimension1 d1 on s.dimension1Value = d1.dimension1Value

Примечание:

  • Ваши данные должны быть чистыми.
  • , если факты поступают доданные измерений, шаблон будет другим, и нужно использовать что-то вроде шаблона измерения с поздним прибытием, который намного сложнее.
...