ETL如何更改表结构

时间:2014-04-21 05:47:04

标签: database etl data-warehouse

我尝试基于操作数据库构建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中使用。

3 个答案:

答案 0 :(得分:2)

这里解释所有内容有点复杂。首先,您需要了解数据仓库的设计方式。然后必须使用SSIS等ETL工具来设计数据仓库。您将获得许多关于SSIS的教程,这是一个用于执行ETL的Microsoft产品。

所以我建议你使用SSIS ETL工具作为你的第一个ETL。稍后您可以使用广泛使用的ETL工具,如Informatica。

我在这里提供一些链接。请参考这些。

  1. Create first Data Warehouse
  2. SSIS1
  3. SSIS2
  4. SSIS3 Tutorial
  5. SSIS4 Tutorial
  6. 这些是一般链接,您可以在其中拾取逻辑和在你的场景中实现。

    祝你好运。

答案 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子句指定。