【问题标题】:Azure Synapse - Incremental Data LoadAzure Synapse - 增量数据加载
【发布时间】:2020-12-27 06:04:34
【问题描述】:

我们使用 Azure Data Factory 将数据从本地数据库服务器加载到 Azure Data Lake Storage Gen2,然后 Databricks 将它们存储为 parquet 文件.每次运行时,我们只使用 databricks merge 语句将上次运行的新数据和修改后的数据和 UPSERT 获取到现有 parquet 文件中。

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

  • 将增量负载数据读入外部表。 (CETAS 或副本 进入)
  • 将上面用作临时表。
  • 将暂存表与生产表合并。

问题是合并语句在 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 删除并重新创建生产表。可以与小型维度表一起正常工作,但我担心具有数百万行索引的大型事实表。关于什么是对非常大的事实表进行增量加载的最佳方法的任何建议。谢谢!

【问题讨论】:

    标签: azure azure-sql-database azure-data-factory-2 azure-sql-data-warehouse azure-synapse


    【解决方案1】:

    在正式支持 SQL MERGE 之前,fwd 更新目标表的推荐方式是在增量记录和目标表之间使用 T SQL 插入/更新命令。

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

    【讨论】:

      猜你喜欢
      • 2022-08-12
      • 2022-10-05
      • 2022-10-12
      • 2020-07-06
      • 2021-10-18
      • 1970-01-01
      • 2021-04-19
      • 2023-01-31
      • 2020-08-29
      相关资源
      最近更新 更多