我尝试基于操作数据库构建DW。在操作数据库中,我有一些表来描述位置信息,它们是规范化表。如下所示:
MM_CITY
{
CITY_ID;
CITY_NAME;
}
MM_DISTRICT
{
CITY_ID;
DISTRICT_ID;
DISTRICT_NAME;
}
MM_REGION
{
DISTRICT_ID;
REGION_ID;
REGION_NAME;
}
FACT_TABLE
{
REGION_ID;
COST;
}
我想构建一个区域维度并将其与事实表连接,如下所示:
REGION_DIMENSION
{
REGION_ID;
REGION_NAME;
DISTRICT_NAME;
CITY_NAME
}
我可以使用SQL连接来做到这一点,但考虑到还有其他方面,只需编写SQL就很难将原始数据库中的数据传输到新的DW中。
当表结构发生变化时,是否有任何ETL工具(如Kettle)完成数据传输?怎么做?任何参考资料都将非常受欢迎。
提前致谢。
评论:
这是我自己的困惑,实际上如果REGION_DIMESNION有CITY_ID,DISTRICT_ID和REGION_ID,它不需要做更多的ID命名。原始ID系统足以在DW中使用。
答案 0 :(得分:2)
这里解释所有内容有点复杂。首先,您需要了解数据仓库的设计方式。然后必须使用SSIS等ETL工具来设计数据仓库。您将获得许多关于SSIS的教程,这是一个用于执行ETL的Microsoft产品。
所以我建议你使用SSIS ETL工具作为你的第一个ETL。稍后您可以使用广泛使用的ETL工具,如Informatica。
我在这里提供一些链接。请参考这些。
这些是一般链接,您可以在其中拾取逻辑和在你的场景中实现。
祝你好运。
答案 1 :(得分:1)
Aditya的建议是正确的。除非您正在管理一个非常复杂的ETL过程,否则最好将表更改隔离在ETL过程之外,然后相应地更新您的包。
您可以管理架构更改,甚至可以使用biml等语言自动创建新的包/表。如果您每年管理100次表格更改,这可能值得做,但对于少量更改,这项工作将远远超过收益
答案 2 :(得分:0)
希望这是你想要的,一个带有地理细节的维度。
DIM_GEOGRAPHY
{
PK,
CITY_ID,
CITY_NAME,
DISTRICT_ID,
DISTRICT_NAME,
REGION_ID,
REGION_NAME
}
FACT_TABLE
{
PRIMARY_KEY,
CITY_ID;
COST;
}
您也可以查询相同的结构,
SELECT
DIM.DISTRICT_NAME AS 'District_Name',
SUM(F.COST) AS 'Total_Cost'
FROM
FACT F
INNER JOIN DIM_GEOGRAPHY DIM
ON F.CITY_ID = DIM.CITY_ID
GROUP BY DIM.DISTRICT_NAME
-- WHERE DIM.REGION_NAME = 'XYZ'
在这里,您将获得特定区域的区域明智成本总额,使用where子句指定。