You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Data Factory实现MariaDB到Azure SQL的历史数据保留式更新

需求场景说明

我正尝试将数据从MariaDB迁移至Azure SQL数据库,具体场景如下:

Azure SQL目标表现有数据

idstateinsert timeupdated value
11002022-01-01 14:30:00yes
21002022-01-01 14:30:00yes
102002022-01-01 14:30:00yes

MariaDB新查询结果

idstateinsert timeupdated value
13002022-01-01 15:30:00yes
22002022-01-01 15:30:00yes
121002022-01-01 15:30:00yes

核心需求

检查MariaDB返回结果中的id是否已存在于Azure SQL表中:

  • 若存在,将Azure SQL表中对应旧数据的updated value列更新为NO
  • 随后插入MariaDB的新查询结果

最终目标表数据如下:

idstateinsert timeupdated value
11002022-01-01 14:30:00NO
21002022-01-01 14:30:00NO
102002022-01-01 14:30:00yes
13002022-01-01 15:30:00yes
22002022-01-01 15:30:00yes
121002022-01-01 15:30:00yes

由于需要保留旧数据用于不同时间点的状态分析,不适用常规Upsert方案,请问如何在Azure Data Factory中实现该需求?


实现方案(Azure Data Factory)

通过串联三个核心活动即可实现需求,具体步骤如下:

1. 暂存MariaDB新数据

使用复制数据活动,将MariaDB的查询结果写入Azure SQL的临时表(例如temp_mariadb_sync_data),结构需与目标表完全一致;也可选择Azure Blob Storage/ADLS Gen2作为中转存储。临时存储仅用于暂存本次同步的新数据。

2. 更新目标表旧数据状态

使用存储过程活动,调用Azure SQL中预先创建的自定义存储过程,完成旧数据状态更新:

  • 从临时表中提取所有待匹配的id
  • 将目标表中id匹配且updated value为yes的记录,批量更新为NO

示例存储过程代码:

CREATE PROCEDURE Sync_UpdateOldRecords
AS
BEGIN
    UPDATE target_table
    SET [updated value] = 'NO'
    FROM target_table t
    INNER JOIN temp_mariadb_sync_data tm ON t.id = tm.id
    WHERE t.[updated value] = 'yes';
END

3. 插入新数据至目标表

再次使用复制数据活动,将临时存储中的新数据插入到Azure SQL目标表中。若使用Blob/ADLS作为中转,则直接从存储位置复制到目标表即可。

4. 清理临时数据(可选)

添加存储过程活动或脚本活动,清空临时表或删除中转存储中的文件,避免占用不必要的资源。

管道执行顺序

确保活动按以下顺序执行:
复制数据(MariaDB→临时存储) → 存储过程(更新旧记录) → 复制数据(临时存储→目标表) → 清理临时数据(可选)


内容的提问来源于stack exchange,提问作者Alfaisal Albakri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:26:16