使用Data Factory数据流跨Cosmos账户复制时_ts时间戳变更问题
解决Data Factory数据流复制Cosmos数据时
_ts字段变更的问题 问题根源
Cosmos DB的_ts是系统专属时间戳字段,完全由数据库自动维护,用于记录文档最后一次修改的时间。当使用数据流向目标Cosmos账户写入数据时,无论你是否传入原_ts值,Cosmos都会自动生成新的_ts——因为这个字段的控制权在数据库系统,外部写入操作无法强制覆盖。哪怕勾选了「包含系统列」,数据流的转换写入逻辑依然会触发Cosmos的文档创建/更新流程,导致原_ts被覆盖。
可行解决办法
- 用复制活动替代数据流:如果不需要对数据做复杂转换,直接使用Data Factory的复制活动。勾选「包含系统列」后,复制活动会原样复制包括
_ts在内的系统元数据,不会触发Cosmos的_ts重新生成逻辑,能完美保留原时间戳。 - 数据流场景下的折中方案:
- 在数据流的源节点,把
_ts字段重命名为自定义字段(比如original_ts),避免和目标端的系统_ts冲突 - 写入目标Cosmos时,不要映射系统列的
_ts,仅将original_ts作为普通业务字段写入 - 注意:这种方式无法替换系统
_ts,目标文档仍会生成新的系统时间戳,但你可以通过original_ts字段保留原时间戳的副本
- 在数据流的源节点,把
- 验证源配置有效性:检查源Cosmos数据集的「包含系统列」选项是否确实勾选,且在数据流的源映射中能看到
_ts字段(可通过源预览功能确认),确保该字段已被正确读取到数据流中。
内容的提问来源于stack exchange,提问作者HItesh Kumar
相关产品推荐
相关产品推荐

