Azure Logic App:仅新文件到来时删除旧文件的实现疑问
实现Azure Logic App的"新文件到来时删旧文件,旧文件重复加载"逻辑
核心思路
别在加载完就立刻删旧文件,改用跟踪当前活跃文件的方式:保留旧文件直到新版本出现,这样就能在新文件到来前重复处理它。
具体实现步骤
1. 用存储记录当前有效文件
选Azure Storage Table或者Blob容器元数据来存当前要重复加载的文件信息:
- 用Storage Table的话:建一张
ActiveFiles表,字段设FileNamePrefix(比如text)、CurrentFileName(当前活跃文件名,比如text 04/10/2023)。 - 用Blob元数据的话:在目标容器上加元数据,键设为
ActiveFile-{前缀},值填当前活跃文件名。
2. 修改现有文件加载流程
当Blob触发逻辑应用时,按以下步骤走:
- 先从新文件名里提取前缀(比如从
text 04/15/2023里揪出text)。 - 查存储记录,拿到该前缀对应的旧活跃文件名:
- 要是没旧记录:直接加载当前文件,然后把当前文件名写入存储记录。
- 要是有旧记录且旧文件名≠当前文件名:
- 先把新文件加载到数据库。
- 删除旧文件。
- 更新存储记录为新文件名。
- 要是有旧记录且旧文件名=当前文件名:直接重复把这个文件加载到数据库(满足"新文件来前重复处理"的需求)。
3. 避坑细节
- 文件名版本要能准确判断:建议用
yyyyMMdd格式命名(比如text 20230410),方便直接字符串比较先后;前缀要能精准区分同一类文件。 - 加错误处理:如果删旧文件失败,别更新存储记录,免得丢了旧文件的跟踪信息。
4. 逻辑应用步骤示例
1. 触发:Blob存储中添加/修改Blob 2. 处理:用split/substring函数提取文件名前缀 3. 查询:从Storage Table/Blob元数据获取当前活跃文件名 4. 分支判断: a. 无旧记录 → 加载文件 → 写入存储记录 b. 旧记录≠当前文件名 → 加载新文件 → 删除旧文件 → 更新存储记录 c. 旧记录=当前文件名 → 加载文件(重复处理)
为啥不能直接删?
直接删旧文件的话,新文件到来前就没文件可加载了。用"保留旧文件+跟踪活跃状态"的方式,既能满足重复加载需求,又能在新版本出现时及时清理旧文件。
内容的提问来源于stack exchange,提问作者noobsterCoder
相关产品推荐
相关产品推荐

