SSIS SCD 向导对我的数据执行 select *
SSIS SCD wizard does a select * on my data
Visual studio 在使用渐变维度向导时挂起。
我select连接正确。
然后我尝试打开下拉菜单 'Table or view' 到 select 目的地 table。
此刻visual studio挂在我身上..
我在所有客户端机器和不同的 visual studio 版本上都有这个,并且只在这个特定的数据库上。在 activity 监视器中,我注意到向导在数据库中的所有 table 上执行了 select *...我有一个 table 有 +40 亿行(+300GB ).正是这个 table 上的 select * 花了这么长时间。
是否有人知道是什么原因导致我的数据库出现 select *,或者他们为什么要这样做?更好的是,如何解决这个问题?
根本不要在 SSIS 中使用渐变维度向导。与您可以使用 TSQL.
编写的数据流相比,它创建的数据流执行得非常糟糕
几个假设;您需要一个 2 型 SCD,并且您至少使用 SQL 带有 MERGE 语句的 Server 2008。
不使用 SSIS,而是使用 TSQL 中 MERGE 语句的 OUTPUT 子句来执行维度 update/insert。例如:
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';
Visual studio 在使用渐变维度向导时挂起。
我select连接正确。 然后我尝试打开下拉菜单 'Table or view' 到 select 目的地 table。 此刻visual studio挂在我身上..
我在所有客户端机器和不同的 visual studio 版本上都有这个,并且只在这个特定的数据库上。在 activity 监视器中,我注意到向导在数据库中的所有 table 上执行了 select *...我有一个 table 有 +40 亿行(+300GB ).正是这个 table 上的 select * 花了这么长时间。
是否有人知道是什么原因导致我的数据库出现 select *,或者他们为什么要这样做?更好的是,如何解决这个问题?
根本不要在 SSIS 中使用渐变维度向导。与您可以使用 TSQL.
编写的数据流相比,它创建的数据流执行得非常糟糕几个假设;您需要一个 2 型 SCD,并且您至少使用 SQL 带有 MERGE 语句的 Server 2008。
不使用 SSIS,而是使用 TSQL 中 MERGE 语句的 OUTPUT 子句来执行维度 update/insert。例如:
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';