Excel新增行时如何通过Azure Data Factory增量更新MySQL数据库
前置准备
首先确认你的Excel表内存在可用于判断增量的标识字段,比如数据创建时间戳、自增唯一ID这类新增行数值单调递增、不会重复修改的字段。如果没有该类字段,先给Excel新增隐藏列,设置公式让新增行自动生成创建时间,作为后续增量判断的依据。
方案1:水印列增量同步(定时触发,最常用)
该方案适配大部分低/中等实时性要求的场景,配置简单稳定性高:
- 第一步:创建水印表存储同步位点
先在你的MySQL库中新建一张水印表,用来记录每次同步的最大位点值,参考建表语句:CREATE TABLE adf_watermark ( source_name VARCHAR(100) PRIMARY KEY COMMENT '数据源标识,填你的SharePoint Excel路径别名即可', last_sync_value DATETIME NOT NULL COMMENT '上次同步的最大时间戳/最大ID值', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -- 首次同步初始化记录,全量同步的话填历史最早时间即可 INSERT INTO adf_watermark (source_name, last_sync_value) VALUES ('sharepoint_excel_business', '2000-01-01 00:00:00'); - 第二步:配置ADF的增量读取逻辑
- 在ADF管线中先添加一个
Lookup活动,读取MySQL水印表,拿到上次同步的last_sync_value值 - 新增第二个
Lookup活动读取SharePoint Excel的全量数据(Excel本身不支持服务端过滤,所以需要全量读入内存过滤,只要单表行数不超过10万级别,性能不会有明显损耗) - 新增
Filter活动,设置过滤条件为Excel的增量标识列 > 第一步拿到的last_sync_value,筛选出本次需要同步的新增行
- 在ADF管线中先添加一个
- 第三步:执行ETL逻辑+更新水印
- 把Filter输出的新增行接入你原有的数据转换逻辑,处理后写入MySQL目标表
- 写入成功后添加
Script活动,更新水印表的位点值为本次同步取到的新增行里最大的增量标识值,参考语句:
UPDATE adf_watermark SET last_sync_value = (SELECT MAX(create_time) FROM your_target_table) WHERE source_name = 'sharepoint_excel_business'; - 第四步:配置触发频率
给管线配置定时触发器,按你的数据实时性要求设置15分钟到几小时的触发间隔即可。
方案2:事件触发实时增量同步(高实时性场景)
如果需要Excel新增数据后1分钟内完成同步,可以用该方案:
- 第一步:配置Power Automate触发规则
登录Power Automate创建自动化流,触发条件设置为「当SharePoint指定文件被修改时」,选择你要同步的Excel文件路径 - 第二步:配置ADF调用逻辑
流中添加调用Azure Data Factory管线的动作,把修改后的文件路径作为参数传给ADF管线 - 后续执行逻辑和方案1完全一致:ADF管线拿到文件后执行新增行过滤、转换、写入目标表、更新水印的流程即可。
注意事项
- 如果使用Excel公式自动生成时间戳,记得新增行后把公式结果转成固定值,避免旧行的时间戳被刷新导致增量判断出错
- 单次同步Excel行数超过10万的话,建议先把Excel同步到Azure Blob存储做中间层,再做增量过滤,避免ADF内存不足
- 写入MySQL前建议加主键去重逻辑,避免网络波动导致的重复写入问题
内容的提问来源于stack exchange,提问作者deeplearner93
相关产品推荐
相关产品推荐

