Azure Synapse - 增量数据加载

Azure Synapse - Incremental Data Load

我们使用 Azure 数据工厂 将数据从本地数据库服务器加载到 Azure Data Lake Storage Gen2 Databricks 将它们存储为 parquet 文件。每个 运行,我们只获取上次 运行 的新数据和修改后的数据,并使用 databricks merge[=30 UPSERT 到现有的镶木地板文件中=]声明。

现在我们正在尝试从 parquet 文件 Azure Synapse 中移动这些数据。理想情况下,我想这样做。

  • 将增量加载数据读入外部table。 (CETAS 或 COPY 进入)
  • 将以上用作分期table。
  • 合并暂存 table 与生产 table。

问题是合并语句在 Azure Syanpse 中不可用。这是 Microsoft suggests 增量加载

的解决方案
    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];

基本上使用 CTAS 删除并重新创建作品 table。将在小维度 tables 上正常工作,但我担心大事实 tables 具有 100 的数百万行索引。关于什么是对非常大的事实 table 进行增量加载的最佳方法的任何建议。谢谢!

直到正式支持SQL MERGE,更新目标tables 的推荐方法是在增量记录之间使用T SQL insert/update 命令和目标 table.

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