Database ETL如何改变表结构
我尝试建立一个基于操作数据库的数据仓库。在操作数据库中,我有一些表来描述位置信息,它们是规范化的表。如下图所示:Database ETL如何改变表结构,database,etl,data-warehouse,Database,Etl,Data Warehouse,我尝试建立一个基于操作数据库的数据仓库。在操作数据库中,我有一些表来描述位置信息,它们是规范化的表。如下图所示: MM_CITY { CITY_ID; CITY_NAME; } MM_DISTRICT { CITY_ID; DISTRICT_ID; DISTRICT_NAME; } MM_REGION { DISTRICT_ID; REGION_ID; REGION_NAME; } FACT_TABLE { REGIO
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)来完成数据传输?怎么做?任何参考资料都将不胜感激
提前谢谢
评论:
这是我自己的困惑,实际上,如果地区有城市ID、地区ID和地区ID,它不需要做更多的ID命名。原始的ID系统足以在DW中使用。在这里解释这一切有点复杂。首先,您需要了解数据仓库是如何设计的。然后必须使用诸如SSIS之类的ETL工具来设计数据仓库。您将获得许多有关SSIS的教程,SSIS是一种用于进行ETL的Microsoft产品 因此,我建议您使用SSIS ETL工具进行第一次ETL。稍后,您可能会使用广泛使用的ETL工具,如Informatica 我在这里提供一些链接。请参考这些 这些是常规链接,您可以在其中选择逻辑并在场景中实现
祝你好运。在这里解释这一切有点复杂。首先,您需要了解数据仓库是如何设计的。然后必须使用诸如SSIS之类的ETL工具来设计数据仓库。您将获得许多有关SSIS的教程,SSIS是一种用于进行ETL的Microsoft产品 因此,我建议您使用SSIS ETL工具进行第一次ETL。稍后,您可能会使用广泛使用的ETL工具,如Informatica 我在这里提供一些链接。请参考这些 这些是常规链接,您可以在其中选择逻辑并在场景中实现
祝你好运。在这里解释这一切有点复杂。首先,您需要了解数据仓库是如何设计的。然后必须使用诸如SSIS之类的ETL工具来设计数据仓库。您将获得许多有关SSIS的教程,SSIS是一种用于进行ETL的Microsoft产品 因此,我建议您使用SSIS ETL工具进行第一次ETL。稍后,您可能会使用广泛使用的ETL工具,如Informatica 我在这里提供一些链接。请参考这些 这些是常规链接,您可以在其中选择逻辑并在场景中实现
祝你好运。在这里解释这一切有点复杂。首先,您需要了解数据仓库是如何设计的。然后必须使用诸如SSIS之类的ETL工具来设计数据仓库。您将获得许多有关SSIS的教程,SSIS是一种用于进行ETL的Microsoft产品 因此,我建议您使用SSIS ETL工具进行第一次ETL。稍后,您可能会使用广泛使用的ETL工具,如Informatica 我在这里提供一些链接。请参考这些 这些是常规链接,您可以在其中选择逻辑并在场景中实现
祝你好运。阿迪蒂亚的建议是正确的。除非您正在管理一个非常复杂的ETL过程,否则最好将表更改隔离在ETL过程之外,然后相应地更新包
您可以管理模式更改,甚至可以使用biml等语言自动创建新的包/表。如果您每年都要管理100次表更改,那么这可能是值得的,但是对于少量更改,这一努力将远远超过其好处Aditya的建议是正确的。除非您正在管理一个非常复杂的ETL过程,否则最好将表更改隔离在ETL过程之外,然后相应地更新包
您可以管理模式更改,甚至可以使用biml等语言自动创建新的包/表。如果您每年都要管理100次表更改,那么这可能是值得的,但是对于少量更改,这一努力将远远超过其好处Aditya的建议是正确的。除非您正在管理一个非常复杂的ETL过程,否则最好将表更改隔离在ETL过程之外,然后相应地更新包
您可以管理模式更改,甚至可以使用biml等语言自动创建新的包/表。如果您每年都要管理100次表更改,那么这可能是值得的,但是对于少量更改,这一努力将远远超过其好处Aditya的建议是正确的。除非您正在管理一个非常复杂的ETL过程,否则最好将表更改隔离在ETL过程之外,然后相应地更新包
您可以管理模式更改,甚至可以使用biml等语言自动创建新的包/表。如果您每年都要管理100次表更改,那么这可能是值得的,但对于少量更改,所做的工作将远远超过其好处希望这就是您想要的,一个包含地理详细信息的维度
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子句指定。希望这是您想要的,一个包含地理详细信息的维度
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子句指定。希望这是您想要的,一个包含地理详细信息的维度
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条款指定。希望这就是您想要的