Ssis 不同类型的增量荷载

Ssis 不同类型的增量荷载,ssis,Ssis,请看下表。同一策略有多行。 此表中的数据是从外部源接收的平面文件加载的 列值可以在一行到下一行之间更改。看看可乐。第一行中可能填充了有限的列。将在下一行中填充更多列。请参见ColB和ColC列,它们最初为null,并填充在第二行和第三行中 `CREATE TABLE #Stg ( PolicyNum VARCHAR(10) , ColA VARCHAR(10) , ColB VARCHAR(10) , ColC VARCHAR(10) , TimeStampKey VARCH

请看下表。同一策略有多行。 此表中的数据是从外部源接收的平面文件加载的

列值可以在一行到下一行之间更改。看看可乐。第一行中可能填充了有限的列。将在下一行中填充更多列。请参见ColB和ColC列,它们最初为null,并填充在第二行和第三行中

`CREATE TABLE #Stg
(
  PolicyNum VARCHAR(10) ,
  ColA VARCHAR(10) ,
  ColB VARCHAR(10) ,
  ColC VARCHAR(10) ,
  TimeStampKey VARCHAR(100)
)

INSERT  #Stg
    ( PolicyNum, ColA, ColB, ColC, TimeStampKey )
VALUES  ( 'MDT1000', 'SomeVal_A1', NULL, NULL, '2013041113033140MDT1000ZA' )
    ,
    ( 'MDT1000', 'SomeVal_A2', 'SomeVal_B', NULL, '2013041113051756MDT1000ZA' )
    ,
    ( 'MDT1000', 'SomeVal_A3', 'SomeVal_B', 'SomeVal_C', '2013041113115418MDT1000ZA' )`
在维护历史记录时,我需要从这个暂存表将数据加载到目标表。目标表基本上是一个类型2缓慢变化的维度。换句话说,我从staging加载了第一行,因为它不存在,所以我用第二行更新它,然后用第三行再次更新它

Folling是目标架构的一个示例:

CREATE TABLE #Dst
(
PolicyKey INT IDENTITY(1,1) PRIMARY KEY
, PolicyNum VARCHAR(10)
, ColA VARCHAR(10) 
, ColB VARCHAR(10)
, ColC VARCHAR(10)
, IsActive BIT
, RowStartDate DATETIME
, RowEndDate DATETIME
)
通常我会编写一个合并语句或SSIS包来处理增量加载和scd维度,但由于原始记录和更改记录位于同一个文件中,因此标准方法不起作用

如果你能告诉我怎么做,我将不胜感激。我试图避免逐行操作

谢谢, 萨姆。

试试这个:

SELECT 
  Stg.*
FROM Stg 
INNER JOIN 
(
    SELECT PolicyNum, MAX (TimeStampKey) AS MAX_TimeStampKey 
    FROM Stg
    GROUP BY PolicyNum 
 ) T 
 ON T.PolicyNum = Stg.PolicyNum
 AND T.MAX_TimeStampKey = Stg.TimeStampKey
结果是:

 PolicyNum  ColA       ColB       ColC       TimeStampKey
 ---------- ---------- ---------- ---------- -------------------
 MDT1000    SomeVal_A3 SomeVal_B  SomeVal_C  2013041113115418MDT1000ZA

请让我们知道这是否对您有帮助

我最初的方法是通过将源数据分割成一组唯一的PolicyKey,然后是一组重复的PolicyKey来解决这个问题。然后,在加载期间,需要对照数据库检查这两个数据集是否存在。因此,将所有内容转储到一个staging表中,然后在for循环中执行类似于我的方法的操作,以获取唯一的键,然后获取其余的键。如果你想让我把这句话吹成一个恰当的回答,请告诉我谢谢比尔。这是一个好主意,虽然我没有“先删除”暂存表,而是通过添加一个额外的列并使用它标记要处理的segmet并循环它们来进行分段。如果您想将您的评论作为答案发布,我会将其标记为答案。再次感谢!