SSIS SCD向导对我的数据执行select *

时间:2016-09-12 11:08:38

标签: sql-server ssis sql-server-data-tools

使用慢速变化维度向导时,Visual Studio会挂起。

我选择了正确的连接。 然后我尝试打开下拉列表或查看'选择目标表。 在这一刻,视觉工作室挂在我身上..

我在所有客户端计算机和不同的Visual Studio版本上都有此功能,并且仅在此特定数据库上。在活动监视器中,我注意到向导对数据库中的所有表执行了select *我有一个表有+40亿行(+ 300GB)。这张桌子上的select *花了这么长时间。

有没有人知道是什么原因导致我的数据库上的select *,或者为什么他们这样做?甚至更好,如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

根本不要在SSIS中使用缓慢变化的尺寸向导。与使用TSQL编写的数据流相比,它创建的数据流执行得非常糟糕。

一些假设;你需要一个2型SCD,你至少使用SQL Server 2008和MERGE语句。

而不是SSIS使用TSQL中的MERGE语句的OUTPUT子句来执行维度更新/插入。例如:

INSERT INTO Customer_Master
SELECT 
    Source_Cust_ID, 
    First_Name, 
    Last_Name, 
    Eff_Date, 
    End_Date, 
    Current_Flag
FROM
    ( 
    MERGE 
        Customer_Master CM
    USING 
        Customer_Source CS
    ON 
        CM.Source_Cust_ID = CS.Source_Cust_ID
    WHEN NOT MATCHED 
    THEN
        INSERT VALUES 
            (
            CS.Source_Cust_ID, 
            CS.First_Name, 
            CS.Last_Name, 
            CONVERT(char(10), GETDATE()-1, 101),
            '12/31/2199',
            'y'
            )
    WHEN MATCHED 
        AND CM.Current_Flag = 'y'
        AND (CM.Last_Name <> CS.Last_Name )
    THEN
        UPDATE 
        SET 
            CM.Current_Flag = 'n',
            CM.End_date = convert(char(10), getdate()- 2, 101)
    OUTPUT 
        $Action Action_Out,
        CS.Source_Cust_ID,
        CS.First_Name,
        CS.Last_Name,
        convert(char(10), getdate()-1, 101) Eff_Date,
        '12/31/2199' End_Date,
        'y' Current_Flag
    ) AS MERGE_OUT
WHERE 
    MERGE_OUT.Action_Out = 'UPDATE';

来源:http://www.kimballgroup.com/2008/11/design-tip-107-using-the-sql-merge-statement-for-slowly-changing-dimension-processing/