使用ssis在多个大表中进行upsert

时间:2018-02-25 14:38:29

标签: sql-server ssis etl

我有40个表在一个服务器上的DB之一具有不同的结构,正由数据提供者更新。

我想创建一个SSIS包,它将从该数据提供者数据库中提取数据,并将数据插入,更新或删除(合并)到开发,测试,UAT和prod数据库中。

这些表分别有1m-3m行和20-30列,所有数据库都在SQL Server平台上,并且位于不同的服务器上。

业务要求是每天在特定时间加载数据,并且必须使用SSIS。我是SSIS的新手,希望您的建议能够创造更好的设计。

2 个答案:

答案 0 :(得分:0)

我不了解SSIS。

有同步数据库的打包解决方案。

一般只有TSQL

  1. 删除
  2. 更新
  3. 插入
  4. TSQL

    delete 
    tableA a
    where not exists (select 1 from tableB b where b.PK = a.PK)
    
    update A  
    set ...
    from TableA a 
    join TableB b 
      on a.PK = b.PK  
    
    insert into TableA (columns) 
    select columns 
    from tableB b
    where not exists (select 1 from tableA a where b.PK = a.PK)
    

答案 1 :(得分:0)

这是一个非常广泛的问题。我可以帮你指点。当你遇到困难时,跟着他们问问题。我会告诉你一张桌子。你必须与其他人并行:

  1. 创建source OLEDB connectiondestination OLEDB connection。这将用于从源复制到实际数据仓库所在的临时表。
  2. 创建Data flow task。只需将源数据库复制到临时表。您必须实现增量加载逻辑。例如,存储最后一个source.Id并将该Id中的数据加载到最新的。
  3. 在暂存中创建数据后,创建另一个Data flow task,您必须应用Lookup transformation来插入和更新数据,同时加载到目标表中。
  4. 删除在此无效,因此您必须在下一步中应用删除(最好通过execute sql task
  5. 以上步骤是指导原则。您将拥有多个并行工作的序列容器,每个容器都在DFT之上,在不同的表上工作。