Azure Synapse-增量数据加载

Azure Synapse-增量数据加载,azure,azure-sql-database,azure-data-factory-2,azure-sql-data-warehouse,azure-synapse,Azure,Azure Sql Database,Azure Data Factory 2,Azure Sql Data Warehouse,Azure Synapse,我们使用Azure data Factory将数据从prem数据库服务器加载到Azure data Lake Storage Gen2,并将其存储为拼花文件。每次运行时,我们只从上次运行中获取新的和修改过的数据,并使用databricksmerge语句向上插入到现有的拼花地板文件中 现在我们正试图将这些数据从拼花地板文件转移到Azure Synapse。理想情况下,我想这样做 将增量加载数据读入外部表。(CETAS或副本) 进入) 使用上面的作为暂存表 将临时表与生产表合并 问题是合并语句在

我们使用Azure data Factory将数据从prem数据库服务器加载到Azure data Lake Storage Gen2,并将其存储为拼花文件。每次运行时,我们只从上次运行中获取新的和修改过的数据,并使用databricksmerge语句向上插入到现有的拼花地板文件中

现在我们正试图将这些数据从拼花地板文件转移到Azure Synapse。理想情况下,我想这样做

  • 将增量加载数据读入外部表。(CETAS或副本) 进入)
  • 使用上面的作为暂存表
  • 将临时表与生产表合并
问题是合并语句在Azure Syanpse中不可用。以下是Microsoft针对增量加载的解决方案

CREATE TABLE dbo.[DimProduct_upsert]
WITH
(   DISTRIBUTION = HASH([ProductKey])
,   CLUSTERED INDEX ([ProductKey])
)
AS
-- New rows and new versions of rows
SELECT      s.[ProductKey]
,           s.[EnglishProductName]
,           s.[Color]
FROM      dbo.[stg_DimProduct] AS s
UNION ALL  
-- Keep rows that are not being touched
SELECT      p.[ProductKey]
,           p.[EnglishProductName]
,           p.[Color]
FROM      dbo.[DimProduct] AS p
WHERE NOT EXISTS
(   SELECT  *
    FROM    [dbo].[stg_DimProduct] s
    WHERE   s.[ProductKey] = p.[ProductKey]
)
;

RENAME OBJECT dbo.[DimProduct]          TO [DimProduct_old];
RENAME OBJECT dbo.[DimProduct_upsert]  TO [DimProduct];

基本上使用CTA删除并重新创建生产表。对于小尺寸的表,它可以很好地工作,但是我担心有1亿行索引的大型事实表。任何关于为真正大型事实表执行增量加载的最佳方法的建议。谢谢

在正式支持SQL合并之前,fwd更新目标表的推荐方法是在增量记录和目标表之间使用T SQL insert/update命令

或者,您也可以使用映射数据流(在ADF中)来模拟用于维度/事实数据加载的SCD事务