RavenDB执行ETL任务后目标端非匹配用户文档消失问题咨询
RavenDB ETL迁移非目标文档丢失排查方案
核心诱因推测
你当前的转换脚本仅对MDMId匹配的文档调用loadToProfiles()输出到目标库,最高概率的触发原因是ETL任务开启了源端删除同步配置:RavenDB ETL默认会将「脚本未输出的源集合文档」判定为源端已删除,自动触发目标端对应文档的删除操作,完全符合你遇到的非匹配文档消失的现象。
其他可能触发的原因包括文档ID冲突、ETL源范围配置错误等。
分步排查思路
- 首先核对ETL任务配置,确认是否开启了
Delete documents that no longer exist on the source(删除源端不存在的文档)选项:
若开启该选项,你当前仅输出单条文档的脚本会触发所有其他源集合对应目标文档的删除,是最高概率原因。仅迁移指定文档的场景必须关闭该选项,或调整脚本对所有需要保留的文档都执行loadToProfiles()输出(无修改需求可直接输出原文档)。 - 核对ETL任务的源范围配置:
确认是否误将整个用户集合作为ETL同步源,而非提前筛选出仅需要迁移的文档子集。全集合作为源时,未被脚本输出的文档都会触发同步逻辑。 - 排查文档ID冲突问题:
核对消失文档的原始ID,和你迁移成功的dac50220-7c14-eb11-a813-000d3aacb01f文档转换后的ID是否完全一致,RavenDB以ID为主键,同ID写入会直接覆盖旧文档,表现为原文档消失。同时检查脚本是否存在隐式修改this.id的未公开逻辑。 - 核查ETL执行日志:
导出对应时间段的ETL任务运行日志,搜索消失文档的ID,确认是否存在明确的DELETE操作记录及操作触发原因,可直接定位删除操作的发起方。如果目标库开启了审计日志,也可直接核查该文档删除操作的执行账号是否为ETL服务账号。 - 最小场景复现验证:
新建隔离测试库,仅导入目标匹配文档和消失的非匹配文档两份测试数据,重新运行ETL任务,对比运行前后两份文档的状态,可直接复现问题触发路径。
临时规避方案
如果仅需要迁移少量指定文档,可暂时关闭全量ETL任务,直接用RavenDB自带的文档导出导入工具,手动迁移修改后的目标文档,避免触发全量同步的删除逻辑。
内容的提问来源于stack exchange,提问作者Ivan Angelinin
相关产品推荐
相关产品推荐

