Azure Data Factory执行Upsert到CosmosDB后删除Blob源文件方案咨询
方案1:直接通过Azure Data Factory原生功能实现(推荐)
完全可以通过ADF的活动编排实现单文件粒度的处理+成功后删除,完全不会误删未处理文件,操作步骤如下:
- 替换原有批量读取Blob的逻辑,先通过
Get Metadata活动拉取指定Blob容器/目录下所有待处理JSON文件的列表 - 新增
For Each活动遍历上述文件列表,所有单文件处理逻辑都放在该活动内部执行 - 在
For Each内部首先添加复制活动:源端选择当前遍历到的单个Blob文件,Sink端保持原有Cosmos DB的Upsert配置 - 在复制活动的成功后置链路中添加
Delete活动:指定删除对象为当前正在处理的单个Blob文件,仅当前文件Upsert成功后才会触发删除,不会影响其他未处理文件
方案2:其他可选落地方案
如果不想调整现有ADF的批量处理逻辑,也可以用以下方案实现:
- Cosmos DB变更Feed + Azure Function实现:给Cosmos DB对应容器开启变更Feed触发器,当有新文档Upsert成功后自动触发Azure Function,读取文档中携带的源Blob路径字段,调用Blob存储接口删除对应文件,该方案完全解耦写入和删除逻辑,一致性更高
- Blob生命周期规则做兜底补充:可以给待处理Blob的目录配置生命周期规则,例如创建时间超过24小时的文件自动删除,避免ADF流程异常中断时残留无用文件
原流程参考图

内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

