You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS DMS MongoDB迁移至Postgres时嵌套字段列过滤失效问题

故障原因

AWS DMS 以MongoDB为源端做列过滤时,两个默认逻辑直接导致嵌套字段被跳过:

  • 列过滤执行顺序优先于嵌套文档打平逻辑:DMS读取Mongo源文档时,会先匹配顶层字段的过滤规则,只有被纳入包含范围的顶层字段,才会进入后续的嵌套解析、字段打平流程。当前包含规则里没有添加嵌套字段所属的顶层对象Params,DMS在读取阶段就直接丢弃了整个Params对象,后续根本不会解析Params下的name、age字段。
  • 默认配置下DMS不会对未显式声明的嵌套层级做字段裁剪:如果只写点分隔的嵌套字段路径、不开启嵌套字段过滤开关,DMS会把这类路径识别为不存在的顶层字段,直接忽略不做处理。
配置解决方法

按以下步骤调整任务配置即可实现嵌套字段的精准列迁移:

  • 调整表映射的Include-column规则顺序
    • 首先在包含列列表中添加顶层字段Params,必须排在它的子字段前面,且不能对Params字段配置任何排除规则,否则会导致整个对象下的子字段规则全部失效。
    • 再依次添加需要同步的嵌套字段Params.name、Params.age,和已有的顶层字段oid__id、phone_no、address放在同一规则集下。
  • 修改MongoDB源端点的额外连接属性
    进入DMS源端点配置页,在「额外连接属性」栏添加以下参数:
    nestingLevel=2;
    filterNestedColumns=true;
    
    • nestingLevel对应嵌套文档的解析深度,当前字段是Params下直接挂载的一级子字段,设置为2即可;如果存在更深层级的嵌套,按实际最大深度调整数值。
    • filterNestedColumns=true是开启嵌套字段过滤的开关,打开后DMS才会在保留Params顶层对象的前提下,按配置的子字段列表做裁剪,不会把Params下所有无关字段都同步到目标端。
  • 调整目标端字段映射(可选但推荐)
    DMS打平后的嵌套字段名默认带.分隔符,PostgreSQL中带特殊字符的列名需要双引号包裹才能正常读写,建议在表映射的字段转换规则里,把Params.name映射为params_name、Params.age映射为params_age,避免后续业务读写目标表出现语法错误。

配置完成后建议先用单条测试文档做小规模全量同步验证,确认目标端字段同步符合预期后,再启动正式的全量+增量迁移任务。

内容的提问来源于stack exchange,提问作者Aim_headshot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 04:42:16