首先,这取决于您想要进行简单的初始数据传输还是更复杂的数据传输(例如增量)。我假设您正在进行初始数据传输。
假设您的项目表包含如下列: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;
您可以对所有其他类别/维度表执行相同的操作。我假设您的维度表已自动生成 ID。现在,加载事实表:
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 编写实际上并不那么困难/耗时。